annotate lib/Atom.pm @ 0:4816e4a8ae95 draft default tip

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 09:23:18 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1 package Atom;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: Atom.pm,v $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:47:02 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.62 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
6 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
8 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
10 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
12 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
17 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
22 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
27 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
28
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
32 use Storable ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
33 use Scalar::Util ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
34 use ObjectProperty;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
35 use PeriodicTable;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
36 use Vector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
37 use MathUtil;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
38 use Text::ParseWords;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
39 use TextUtil;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
40 use FileUtil;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
41
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
42 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
43
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
44 @ISA = qw(ObjectProperty Exporter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
45 @EXPORT = qw();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
46 @EXPORT_OK = qw();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
47
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
48 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
49
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
50 # Setup class variables...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
51 my($ClassName, $ObjectID, %MDLValenceModelDataMap, %DaylightValenceModelDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
52 _InitializeClass();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
53
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
54 # Overload Perl functions...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
55 use overload '""' => 'StringifyAtom';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
56
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
57 # Class constructor...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
58 sub new {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
59 my($Class, %NamesAndValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
60
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
61 # Initialize object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
62 my $This = {};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
63 bless $This, ref($Class) || $Class;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
64 $This->_InitializeAtom();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
65
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
66 $This->_InitializeAtomProperties(%NamesAndValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
67
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
68 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
69 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
70
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
71 # Initialize object data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
72 sub _InitializeAtom {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
73 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
74 my($ObjectID) = _GetNewObjectID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
75
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
76 # All other property names and values along with all Set/Get<PropertyName> methods
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
77 # are implemented on-demand using ObjectProperty class.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
78 $This->{ID} = $ObjectID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
79 $This->{Name} = "Atom ${ObjectID}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
80 $This->{AtomSymbol} = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
81 $This->{AtomicNumber} = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
82 $This->{XYZ} = Vector::ZeroVector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
83 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
84
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
85 # Initialize atom properties...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
86 sub _InitializeAtomProperties {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
87 my($This, %NamesAndValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
88
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
89 my($Name, $Value, $MethodName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
90 while (($Name, $Value) = each %NamesAndValues) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
91 $MethodName = "Set${Name}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
92 $This->$MethodName($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
93 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
94 if (!exists $NamesAndValues{'AtomSymbol'}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
95 carp "Warning: ${ClassName}->new: Atom object instantiated without setting atom symbol...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
96 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
97
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
98 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
99 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
100
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
101 # Initialize class ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
102 sub _InitializeClass {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
103 #Class name...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
104 $ClassName = __PACKAGE__;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
105
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
106 # ID to keep track of objects...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
107 $ObjectID = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
108
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
109 # Load atom class data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
110 _LoadAtomClassData();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
111 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
112
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
113 # Setup an explicit SetID method to block setting of ID by AUTOLOAD function...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
114 sub SetID {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
115 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
116
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
117 carp "Warning: ${ClassName}->SetID: Object ID can't be changed: it's used for internal tracking...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
118
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
119 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
120 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
121
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
122 # Setup an explicit SetMolecule method to block setting of ID by AUTOLOAD function...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
123 sub SetMolecule {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
124 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
125
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
126 carp "Warning: ${ClassName}->SetMolecule: Molecule property can't be changed: it's used for internal tracking...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
127
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
128 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
129 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
130
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
131 # Assign atom to molecule...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
132 sub _SetMolecule {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
133 my($This, $Molecule) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
134
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
135 $This->{Molecule} = $Molecule;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
136
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
137 # Weaken the reference to disable increment of reference count; otherwise,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
138 # it it becomes a circular reference and destruction of Molecule object doesn't
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
139 # get initiated which in turn disables destruction of atom object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
140 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
141 Scalar::Util::weaken($This->{Molecule});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
142
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
143 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
144 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
145
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
146 # Setup atom symbol and atomic number for the element...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
147 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
148 # Possible atom symbol values:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
149 # . An element symbol or some other type of atom: L - Atom list; LP - Lone pair; R# - R group;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
150 # A, Q, * - unknown atom; or something else?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
151 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
152 # Default mass number corresponds to the most abundant natural isotope unless it's explicity
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
153 # set using "MassNumber" property.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
154 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
155 sub SetAtomSymbol {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
156 my($This, $AtomSymbol) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
157 my($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
158
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
159 $This->{AtomSymbol} = $AtomSymbol;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
160
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
161 $AtomicNumber = PeriodicTable::GetElementAtomicNumber($AtomSymbol);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
162 $This->{AtomicNumber} = (defined $AtomicNumber) ? $AtomicNumber : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
163
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
164 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
165 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
166
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
167 # Setup atom symbol and atomic number for the element...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
168 sub SetAtomicNumber {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
169 my($This, $AtomicNumber) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
170 my($AtomSymbol);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
171
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
172 $AtomSymbol = PeriodicTable::GetElementAtomSymbol($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
173 if (!defined $AtomSymbol) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
174 carp "Warning: ${ClassName}->SetAtomicNumber: Didn't set atomic number: Invalid atomic number, $AtomicNumber, specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
175 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
176 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
177 $This->{AtomicNumber} = $AtomicNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
178 $This->{AtomSymbol} = $AtomSymbol;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
179
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
180 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
181 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
182
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
183 # Set atom as stereo center...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
184 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
185 sub SetStereoCenter {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
186 my($This, $StereoCenter) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
187
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
188 $This->SetProperty('StereoCenter', $StereoCenter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
189
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
190 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
191 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
192
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
193 # Is it a stereo center?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
194 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
195 sub IsStereoCenter {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
196 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
197 my($StereoCenter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
198
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
199 $StereoCenter = $This->GetProperty('StereoCenter');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
200
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
201 return (defined($StereoCenter) && $StereoCenter) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
202 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
203
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
204 # Set atom stereochemistry.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
205 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
206 # Supported values are: R, S.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
207 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
208 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
209 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
210 # . After the ligands around a central stereocenter has been ranked using CIP priority scheme and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
211 # the lowest ranked ligand lies behind the center atom, then R and S values correspond to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
212 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
213 # R: Clockwise arrangement of remaining ligands around the central atom going from highest to lowest ranked ligand
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
214 # S: CounterClockwise arrangement of remaining ligands around the central atom going from highest to lowest ranked ligand
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
215 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
216 # . Assignment of any other arbitray values besides R and S is also allowed; however, a warning is printed.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
217 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
218 sub SetStereochemistry {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
219 my($This, $Stereochemistry) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
220
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
221 if ($Stereochemistry !~ /^(R|S)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
222 carp "Warning: ${ClassName}->SetStereochemistry: Assigning non-supported Stereochemistry value of $Stereochemistry. Supported values: R, S...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
223 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
224
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
225 $This->SetProperty('StereoCenter', 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
226 $This->SetProperty('Stereochemistry', $Stereochemistry);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
227
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
228 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
229 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
230
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
231 # Setup mass number for atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
232 sub SetMassNumber {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
233 my($This, $MassNumber) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
234 my($AtomicNumber, $AtomSymbol);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
235
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
236 $AtomicNumber = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
237 $AtomSymbol = $This->{AtomSymbol};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
238 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
239 carp "Warning: ${ClassName}->SetMassNumber: Didn't set mass number: Non standard atom with atomic number, $AtomicNumber, and atomic symbol, $AtomSymbol...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
240 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
241 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
242 if (!PeriodicTable::IsElementNaturalIsotopeMassNumber($AtomicNumber, $MassNumber)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
243 carp "Warning: ${ClassName}->SetMassNumber: Unknown mass number, $MassNumber, specified for atom with atomic number, $AtomicNumber, and atomic symbol, $AtomSymbol. Don't forget to Set ExactMass property explicitly; otherwise, GetExactMass method would return mass of most abundant isotope...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
244 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
245 $This->SetProperty('MassNumber', $MassNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
246
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
247 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
248 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
249
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
250 # Get mass number...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
251 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
252 sub GetMassNumber {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
253 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
254
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
255 # Is mass number explicity set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
256 if ($This->HasProperty('MassNumber')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
257 return $This->GetProperty('MassNumber');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
258 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
259
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
260 # Is it an element symbol?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
261 my($AtomicNumber) = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
262 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
263 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
264 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
265
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
266 # Return most abundant mass number...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
267 return PeriodicTable::GetElementMostAbundantNaturalIsotopeMassNumber($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
268 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
269
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
270 # Get atomic weight:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
271 # . Explicitly set by the caller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
272 # . Using atomic number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
273 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
274 sub GetAtomicWeight {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
275 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
276
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
277 # Is atomic weight explicity set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
278 if ($This->HasProperty('AtomicWeight')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
279 return $This->GetProperty('AtomicWeight');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
280 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
281
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
282 # Is it an element symbol?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
283 my($AtomicNumber) = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
284 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
285 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
286 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
287
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
288 # Return its atomic weight...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
289 return PeriodicTable::GetElementAtomicWeight($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
290 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
291
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
292 # Get exact mass weight:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
293 # . Explicitly set by the caller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
294 # . Using atomic number and mass number explicity set by the caller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
295 # . Using atomic number and most abundant isotope
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
296 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
297 sub GetExactMass {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
298 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
299
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
300 # Is exact mass explicity set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
301 if ($This->HasProperty('ExactMass')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
302 return $This->GetProperty('ExactMass');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
303 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
304
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
305 # Is it an element symbol?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
306 my($AtomicNumber) = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
307 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
308 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
309 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
310
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
311 # Is mass number explicitly set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
312 if ($This->HasProperty('MassNumber')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
313 my($MassNumber) = $This->GetProperty('MassNumber');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
314 if (PeriodicTable::IsElementNaturalIsotopeMassNumber($AtomicNumber, $MassNumber)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
315 return PeriodicTable::GetElementNaturalIsotopeMass($AtomicNumber, $MassNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
316 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
317 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
318
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
319 # Return most abundant isotope mass...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
320 return PeriodicTable::GetElementMostAbundantNaturalIsotopeMass($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
321 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
322
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
323 # Get formal charge:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
324 # . Explicitly set by the caller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
325 # . Or return zero insetad of undef
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
326 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
327 sub GetFormalCharge {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
328 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
329 my($FormalCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
330
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
331 $FormalCharge = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
332 if ($This->HasProperty('FormalCharge')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
333 $FormalCharge = $This->GetProperty('FormalCharge');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
334 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
335
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
336 return defined($FormalCharge) ? $FormalCharge : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
337 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
338
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
339 # Get spin multiplicity:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
340 # . Explicitly set by the caller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
341 # . From FreeRadicalElectrons value explicitly set by the caller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
342 # . Or return zero insetad of undef
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
343 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
344 sub GetSpinMultiplicity {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
345 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
346 my($SpinMultiplicity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
347
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
348 $SpinMultiplicity = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
349 if ($This->HasProperty('SpinMultiplicity')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
350 $SpinMultiplicity = $This->GetProperty('SpinMultiplicity');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
351 return defined($SpinMultiplicity) ? $SpinMultiplicity : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
352 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
353
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
354 if ($This->HasProperty('FreeRadicalElectrons')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
355 my($FreeRadicalElectrons);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
356 $FreeRadicalElectrons = $This->GetProperty('FreeRadicalElectrons');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
357
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
358 SPINMULTIPLICITY: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
359 if ($FreeRadicalElectrons == 1) { $SpinMultiplicity = 2; last SPINMULTIPLICITY;}
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
360 if ($FreeRadicalElectrons == 2) { $SpinMultiplicity = 1; last SPINMULTIPLICITY;}
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
361 carp "Warning: ${ClassName}->GetSpinMultiplicity: It's not possible to determine spin multiplicity from the specified free radical electrons value, $FreeRadicalElectrons. It has been set to 0...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
362 $SpinMultiplicity = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
363 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
364 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
365
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
366 return $SpinMultiplicity;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
367 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
368
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
369 # Get number of free radical electrons:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
370 # . Explicitly set by the caller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
371 # . From SpinMultiplicity value explicitly set by the caller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
372 # . Or return zero insetad of undef
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
373 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
374 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
375 # . For atoms with explicit assignment of SpinMultiplicity property values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
376 # Singlet (two unpaired electrons corresponding to one spin state), Doublet (free radical; an unpaired
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
377 # electron corresponding to two spin states), and Triplet (two unparied electrons corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
378 # three spin states; divalent carbon atoms (carbenes)), FreeRadicalElectrons are calculated as follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
379 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
380 # SpinMultiplicity: Doublet(2); FreeRadicalElectrons: 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
381 # SpinMultiplicity: Singlet(1)/Triplet(3); FreeRadicalElectrons: 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
382 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
383 sub GetFreeRadicalElectrons {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
384 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
385 my($FreeRadicalElectrons);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
386
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
387 $FreeRadicalElectrons = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
388
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
389 if ($This->HasProperty('FreeRadicalElectrons')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
390 $FreeRadicalElectrons = $This->GetProperty('FreeRadicalElectrons');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
391 return defined($FreeRadicalElectrons) ? $FreeRadicalElectrons : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
392 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
393
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
394 if ($This->HasProperty('SpinMultiplicity')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
395 my($SpinMultiplicity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
396 $SpinMultiplicity = $This->GetProperty('SpinMultiplicity');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
397
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
398 SPINMULTIPLICITY: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
399 if ($SpinMultiplicity == 1) { $FreeRadicalElectrons = 2; last SPINMULTIPLICITY;}
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
400 if ($SpinMultiplicity == 2) { $FreeRadicalElectrons = 1; last SPINMULTIPLICITY;}
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
401 if ($SpinMultiplicity == 3) { $FreeRadicalElectrons = 2; last SPINMULTIPLICITY;}
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
402 carp "Warning: ${ClassName}->GetFreeRadicalElectrons: It's not possible to determine free radical electrons from the specified spin multiplicity value, $FreeRadicalElectrons. It has been set to 0...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
403 $FreeRadicalElectrons = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
404 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
405 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
407 return $FreeRadicalElectrons;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
408 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
409
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
410 # Set atom coordinates using:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
411 # . An array reference with three values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
412 # . An array containg three values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
413 # . A 3D vector
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
414 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
415 sub SetXYZ {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
416 my($This, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
417
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
418 if (!@Values) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
419 carp "Warning: ${ClassName}->SetXYZ: No values specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
420 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
421 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
422
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
423 $This->{XYZ}->SetXYZ(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
424 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
425 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
426
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
427 # Set X value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
428 sub SetX {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
429 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
430
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
431 if (!defined $Value) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
432 carp "Warning: ${ClassName}->SetX: Undefined X value...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
433 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
434 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
435 $This->{XYZ}->SetX($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
436 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
437 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
438
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
439 # Set Y value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
440 sub SetY {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
441 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
442
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
443 if (!defined $Value) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
444 carp "Warning: ${ClassName}->SetY: Undefined Y value...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
445 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
446 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
447 $This->{XYZ}->SetY($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
448 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
449 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
450
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
451 # Set Z value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
452 sub SetZ {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
453 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
454
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
455 if (!defined $Value) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
456 carp "Warning: ${ClassName}->SetZ: Undefined Z value...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
457 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
458 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
459 $This->{XYZ}->SetZ($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
460 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
461 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
462
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
463 # Return XYZ as:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
464 # . Reference to an array
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
465 # . An array
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
466 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
467 sub GetXYZ {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
468 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
469
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
470 return $This->{XYZ}->GetXYZ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
471 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
472
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
473 # Return XYZ as a vector object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
474 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
475 sub GetXYZVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
476 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
477
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
478 return $This->{XYZ};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
479 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
480
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
481 # Get X value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
482 sub GetX {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
483 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
484
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
485 return $This->{XYZ}->GetX();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
486 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
487
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
488 # Get Y value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
489 sub GetY {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
490 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
491
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
492 return $This->{XYZ}->GetY();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
493 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
494
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
495 # Get Z value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
496 sub GetZ {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
497 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
498
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
499 return $This->{XYZ}->GetZ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
500 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
501
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
502 # Delete atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
503 sub DeleteAtom {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
504 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
505
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
506 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
507 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
508 # Nothing to do...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
509 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
510 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
511 my($Molecule) = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
512
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
513 return $Molecule->_DeleteAtom($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
514 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
515
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
516 # Get atom neighbor objects as array. In scalar conetxt, return number of neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
517 sub GetNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
518 my($This, @ExcludeNeighbors) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
519
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
520 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
521 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
522 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
523 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
524 my($Molecule) = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
525
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
526 if (@ExcludeNeighbors) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
527 return $This->_GetAtomNeighbors(@ExcludeNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
528 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
529 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
530 return $This->_GetAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
531 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
532 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
533
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
534 # Get atom neighbor objects as array. In scalar conetxt, return number of neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
535 sub _GetAtomNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
536 my($This, @ExcludeNeighbors) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
537 my($Molecule) = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
538
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
539 if (!@ExcludeNeighbors) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
540 return $Molecule->_GetAtomNeighbors($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
541 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
542
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
543 # Setup a map for neigbhors to exclude...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
544 my($ExcludeNeighbor, $ExcludeNeighborID, %ExcludeNeighborsIDsMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
545
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
546 %ExcludeNeighborsIDsMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
547 for $ExcludeNeighbor (@ExcludeNeighbors) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
548 $ExcludeNeighborID = $ExcludeNeighbor->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
549 $ExcludeNeighborsIDsMap{$ExcludeNeighborID} = $ExcludeNeighborID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
550 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
551
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
552 # Generate a filtered neighbors list...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
553 my($Neighbor, $NeighborID, @FilteredAtomNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
554 @FilteredAtomNeighbors = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
555 NEIGHBOR: for $Neighbor ($Molecule->_GetAtomNeighbors($This)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
556 $NeighborID = $Neighbor->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
557 if (exists $ExcludeNeighborsIDsMap{$NeighborID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
558 next NEIGHBOR;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
559 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
560 push @FilteredAtomNeighbors, $Neighbor;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
561 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
562
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
563 return wantarray ? @FilteredAtomNeighbors : scalar @FilteredAtomNeighbors;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
564 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
565
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
566 # Get specific atom neighbor objects as array. In scalar conetxt, return number of neighbors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
567 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
568 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
569 # . AtomSpecification correspond to any valid AtomicInvariant based atomic specifications
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
570 # as implemented in DoesAtomNeighborhoodMatch method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
571 # . Multiple atom specifications can be used in a string delimited by comma.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
572 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
573 sub GetNeighborsUsingAtomSpecification {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
574 my($This, $AtomSpecification, @ExcludeNeighbors) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
575 my(@AtomNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
576
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
577 @AtomNeighbors = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
578 @AtomNeighbors = $This->GetNeighbors(@ExcludeNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
579
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
580 # Does atom has any neighbors and do they need to be filtered?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
581 if (!(@AtomNeighbors && defined($AtomSpecification) && $AtomSpecification)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
582 return wantarray ? @AtomNeighbors : scalar @AtomNeighbors;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
583 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
584
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
585 # Filter neighbors using atom specification...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
586 my($AtomNeighbor, @FilteredAtomNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
587
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
588 @FilteredAtomNeighbors = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
589 NEIGHBOR: for $AtomNeighbor (@AtomNeighbors) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
590 if (!$AtomNeighbor->_DoesAtomSpecificationMatch($AtomSpecification)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
591 next NEIGHBOR;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
592 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
593 push @FilteredAtomNeighbors, $AtomNeighbor;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
594 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
595
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
596 return wantarray ? @FilteredAtomNeighbors : scalar @FilteredAtomNeighbors;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
597 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
598
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
599
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
600 # Get non-hydrogen atom neighbor objects as array. In scalar context, return number of neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
601 sub GetHeavyAtomNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
602 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
603
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
604 return $This->GetNonHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
605 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
606
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
607 # Get non-hydrogen atom neighbor objects as array. In scalar context, return number of neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
608 sub GetNonHydrogenAtomNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
609 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
610
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
611 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
612 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
613 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
614 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
615 my($NonHydrogenAtomsOnly, $HydrogenAtomsOnly) = (1, 0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
616
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
617 return $This->_GetFilteredAtomNeighbors($NonHydrogenAtomsOnly, $HydrogenAtomsOnly);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
618 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
619
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
620 # Get hydrogen atom neighbor objects as array. In scalar context, return numbe of neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
621 sub GetHydrogenAtomNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
622 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
623
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
624 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
625 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
626 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
627 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
628 my($NonHydrogenAtomsOnly, $HydrogenAtomsOnly) = (0, 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
629
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
630 return $This->_GetFilteredAtomNeighbors($NonHydrogenAtomsOnly, $HydrogenAtomsOnly);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
631 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
632
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
633 # Get non-hydrogen neighbor of hydrogen atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
634 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
635 sub GetNonHydrogenNeighborOfHydrogenAtom {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
636 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
637
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
638 # Is it Hydrogen?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
639 if (!$This->IsHydrogen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
640 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
641 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
642 my(@Neighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
643
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
644 @Neighbors = $This->GetNonHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
645
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
646 return (@Neighbors == 1) ? $Neighbors[0] : undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
647 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
648
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
649 # Get filtered atom atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
650 sub _GetFilteredAtomNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
651 my($This, $NonHydrogenAtomsOnly, $HydrogenAtomsOnly) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
652
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
653 # Check flags...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
654 if (!defined $NonHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
655 $NonHydrogenAtomsOnly = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
656 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
657 if (!defined $HydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
658 $HydrogenAtomsOnly = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
659 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
660 my($Neighbor, @FilteredAtomNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
661
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
662 @FilteredAtomNeighbors = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
663 NEIGHBOR: for $Neighbor ($This->GetNeighbors()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
664 if ($NonHydrogenAtomsOnly && $Neighbor->IsHydrogen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
665 next NEIGHBOR;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
666 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
667 if ($HydrogenAtomsOnly && (!$Neighbor->IsHydrogen())) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
668 next NEIGHBOR;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
669 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
670 push @FilteredAtomNeighbors, $Neighbor;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
671 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
672
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
673 return wantarray ? @FilteredAtomNeighbors : scalar @FilteredAtomNeighbors;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
674 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
675
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
676 # Get number of neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
677 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
678 sub GetNumOfNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
679 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
680 my($NumOfNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
681
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
682 $NumOfNeighbors = $This->GetNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
683
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
684 return (defined $NumOfNeighbors) ? $NumOfNeighbors : undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
685 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
686
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
687 # Get number of neighbors which are non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
688 sub GetNumOfHeavyAtomNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
689 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
690
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
691 return $This->GetNumOfNonHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
692 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
693
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
694 # Get number of neighbors which are non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
695 sub GetNumOfNonHydrogenAtomNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
696 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
697 my($NumOfNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
698
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
699 $NumOfNeighbors = $This->GetNonHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
700
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
701 return (defined $NumOfNeighbors) ? $NumOfNeighbors : undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
702 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
703
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
704 # Get number of neighbors which are hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
705 sub GetNumOfHydrogenAtomNeighbors {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
706 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
707 my($NumOfNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
708
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
709 $NumOfNeighbors = $This->GetHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
710
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
711 return (defined $NumOfNeighbors) ? $NumOfNeighbors : undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
712 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
713
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
714 # Get bond objects as array. In scalar context, return number of bonds...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
715 sub GetBonds {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
716 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
717
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
718 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
719 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
720 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
721 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
722 my($Molecule) = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
723
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
724 return $Molecule->_GetAtomBonds($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
725 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
726
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
727 # Get bond to specified atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
728 sub GetBondToAtom {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
729 my($This, $Other) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
730
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
731 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
732 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
733 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
734 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
735 my($Molecule) = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
736
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
737 return $Molecule->_GetBondToAtom($This, $Other);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
738 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
739
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
740 # It it bonded to a specified atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
741 sub IsBondedToAtom {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
742 my($This, $Other) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
743
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
744 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
745 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
746 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
747 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
748 my($Molecule) = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
749
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
750 return $Molecule->_IsBondedToAtom($This, $Other);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
751 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
752
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
753 # Get bond objects to non-hydrogen atoms as array. In scalar context, return number of bonds...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
754 sub GetBondsToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
755 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
756
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
757 return $This->GetBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
758 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
759
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
760 # Get bond objects to non-hydrogen atoms as array. In scalar context, return number of bonds...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
761 sub GetBondsToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
762 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
763
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
764 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
765 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
766 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
767 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
768 my($BondsToNonHydrogenAtomsOnly, $BondsToHydrogenAtomsOnly) = (1, 0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
769
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
770 return $This->_GetFilteredBonds($BondsToNonHydrogenAtomsOnly, $BondsToHydrogenAtomsOnly);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
771 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
772
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
773 # Get bond objects to hydrogen atoms as array. In scalar context, return number of bonds...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
774 sub GetBondsToHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
775 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
776
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
777 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
778 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
779 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
780 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
781 my($BondsToNonHydrogenAtomsOnly, $BondsToHydrogenAtomsOnly) = (0, 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
782
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
783 return $This->_GetFilteredBonds($BondsToNonHydrogenAtomsOnly, $BondsToHydrogenAtomsOnly);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
784 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
785
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
786 # Get filtered bonds...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
787 sub _GetFilteredBonds {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
788 my($This, $BondsToNonHydrogenAtomsOnly, $BondsToHydrogenAtomsOnly) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
789
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
790 # Check flags...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
791 if (!defined $BondsToNonHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
792 $BondsToNonHydrogenAtomsOnly = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
793 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
794 if (!defined $BondsToHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
795 $BondsToHydrogenAtomsOnly = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
796 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
797
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
798 my($Bond, $BondedAtom, @FilteredBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
799
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
800 @FilteredBonds = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
801 BOND: for $Bond ($This->GetBonds()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
802 $BondedAtom = $Bond->GetBondedAtom($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
803 if ($BondsToNonHydrogenAtomsOnly && $BondedAtom->IsHydrogen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
804 next BOND;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
805 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
806 if ($BondsToHydrogenAtomsOnly && (!$BondedAtom->IsHydrogen())) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
807 next BOND;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
808 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
809 push @FilteredBonds, $Bond;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
810 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
811
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
812 return wantarray ? @FilteredBonds : (scalar @FilteredBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
813 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
814
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
815 # Get number of bonds...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
816 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
817 sub GetNumOfBonds {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
818 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
819 my($NumOfBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
820
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
821 $NumOfBonds = $This->GetBonds();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
822
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
823 return (defined $NumOfBonds) ? ($NumOfBonds) : undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
824 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
825
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
826 # Get number of bonds to non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
827 sub GetNumOfBondsToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
828 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
829
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
830 return $This->GetNumOfBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
831 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
832
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
833 # Get number of bonds to non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
834 sub GetNumOfBondsToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
835 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
836 my($NumOfBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
837
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
838 $NumOfBonds = $This->GetBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
839
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
840 return (defined $NumOfBonds) ? ($NumOfBonds) : undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
841 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
842
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
843 # Get number of single bonds to heavy atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
844 sub GetNumOfSingleBondsToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
845 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
846
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
847 return $This->GetNumOfSingleBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
848 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
849
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
850 # Get number of single bonds to non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
851 sub GetNumOfSingleBondsToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
852 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
853
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
854 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
855 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
856 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
857 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
858 return $This->_GetNumOfBondsWithSpecifiedBondOrderToNonHydrogenAtoms(1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
859 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
860
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
861 # Get number of double bonds to heavy atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
862 sub GetNumOfDoubleBondsToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
863 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
864
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
865 return $This->GetNumOfDoubleBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
866 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
867
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
868 # Get number of double bonds to non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
869 sub GetNumOfDoubleBondsToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
870 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
871
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
872 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
873 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
874 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
875 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
876 return $This->_GetNumOfBondsWithSpecifiedBondOrderToNonHydrogenAtoms(2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
877 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
878
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
879 # Get number of triple bonds to heavy atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
880 sub GetNumOfTripleBondsToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
881 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
882
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
883 return $This->GetNumOfTripleBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
884 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
885
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
886 # Get number of triple bonds to non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
887 sub GetNumOfTripleBondsToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
888 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
889
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
890 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
891 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
892 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
893 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
894 return $This->_GetNumOfBondsWithSpecifiedBondOrderToNonHydrogenAtoms(3);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
895 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
896
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
897 # Get number of bonds of specified bond order to non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
898 sub _GetNumOfBondsWithSpecifiedBondOrderToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
899 my($This, $SpecifiedBondOrder) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
900 my($NumOfBonds, $Bond, $BondOrder, @Bonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
901
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
902 $NumOfBonds = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
903 @Bonds = $This->GetBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
904 for $Bond (@Bonds) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
905 $BondOrder = $Bond->GetBondOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
906 if ($SpecifiedBondOrder == $BondOrder) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
907 $NumOfBonds++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
908 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
909 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
910 return $NumOfBonds;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
911 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
912
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
913 # Get number of aromatic bonds to heavy atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
914 sub GetNumOfAromaticBondsToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
915 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
916
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
917 return $This->GetNumOfAromaticBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
918 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
919
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
920 # Get number of aromatic bonds to non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
921 sub GetNumOfAromaticBondsToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
922 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
923 my($NumOfBonds, $Bond, @Bonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
924
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
925 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
926 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
927 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
928 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
929
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
930 $NumOfBonds = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
931 @Bonds = $This->GetBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
932 for $Bond (@Bonds) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
933 if ($Bond->IsAromatic()) { $NumOfBonds++; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
934 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
935 return $NumOfBonds;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
936 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
937
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
938 # Get number of different bond types to non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
939 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
940 sub GetNumOfBondTypesToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
941 my($This, $CountAromaticBonds) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
942
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
943 return $This->GetNumOfBondTypesToNonHydrogenAtoms($CountAromaticBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
944 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
945
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
946 # Get number of single, double, triple, and aromatic bonds from an atom to all other
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
947 # non-hydrogen atoms. Value of CountAtomaticBonds parameter controls whether
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
948 # number of aromatic bonds is returned; default is not to count aromatic bonds. During
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
949 # counting of aromatic bonds, the bond marked aromatic is not included in the count
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
950 # of other bond types.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
951 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
952 sub GetNumOfBondTypesToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
953 my($This, $CountAromaticBonds) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
954 my($NumOfSingleBonds, $NumOfDoubleBonds, $NumOfTripleBonds, $NumOfAromaticBonds, $None, $Bond, @Bonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
955
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
956 $CountAromaticBonds = defined($CountAromaticBonds) ? $CountAromaticBonds : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
957
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
958 ($NumOfSingleBonds, $NumOfDoubleBonds, $NumOfTripleBonds) = ('0') x 3;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
959 $NumOfAromaticBonds = $CountAromaticBonds ? 0 : undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
960
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
961 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
962 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
963 return ($NumOfSingleBonds, $NumOfDoubleBonds, $NumOfTripleBonds, $NumOfAromaticBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
964 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
965
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
966 @Bonds = $This->GetBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
967
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
968 for $Bond (@Bonds) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
969 BONDTYPE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
970 if ($CountAromaticBonds) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
971 if ($Bond->IsAromatic()) { $NumOfAromaticBonds++; last BONDTYPE; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
972 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
973 if ($Bond->IsSingle()) { $NumOfSingleBonds++; last BONDTYPE; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
974 if ($Bond->IsDouble()) { $NumOfDoubleBonds++; last BONDTYPE; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
975 if ($Bond->IsTriple()) { $NumOfTripleBonds++; last BONDTYPE; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
976 $None = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
977 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
978 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
979 return ($NumOfSingleBonds, $NumOfDoubleBonds, $NumOfTripleBonds, $NumOfAromaticBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
980 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
981
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
982 # Get number of sigma and pi bonds to heavy atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
983 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
984 sub GetNumOfSigmaAndPiBondsToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
985 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
986
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
987 return $This->GetNumOfSigmaAndPiBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
988 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
989
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
990 # Get number of sigma and pi bonds from an atom to all other non-hydrogen atoms.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
991 # Sigma and pi bonds are counted using the following methodology: a single bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
992 # correspond to one sigma bond; a double bond contributes one to sigma bond count
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
993 # and one to pi bond count; a triple bond contributes one to sigma bond count and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
994 # two to pi bond count.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
995 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
996 sub GetNumOfSigmaAndPiBondsToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
997 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
998 my($NumOfSingleBonds, $NumOfDoubleBonds, $NumOfTripleBonds, $NumOfSigmaBonds, $NumOfPiBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
999
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1000 ($NumOfSingleBonds, $NumOfDoubleBonds, $NumOfTripleBonds) = $This->GetNumOfBondTypesToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1001
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1002 $NumOfSigmaBonds = $NumOfSingleBonds + $NumOfDoubleBonds + $NumOfTripleBonds;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1003 $NumOfPiBonds = $NumOfDoubleBonds + 2*$NumOfTripleBonds;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1004
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1005 return ($NumOfSigmaBonds, $NumOfPiBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1006 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1007
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1008 # Get information related to atoms for all heavy atoms attached to an atom..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1009 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1010 sub GetHeavyAtomNeighborsAtomInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1011 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1012
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1013 return $This->GetNonHydrogenAtomNeighborsAtomInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1014 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1015
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1016 # Get information related to atoms for all non-hydrogen atoms attached to an atom..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1017 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1018 # The following values are returned:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1019 # . Number of non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1020 # . A reference to an array containing atom objects correpsonding to non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1021 # atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1022 # . Number of different types of non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1023 # . A reference to a hash containing atom symbol as key with value corresponding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1024 # to its count for non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1025 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1026 sub GetNonHydrogenAtomNeighborsAtomInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1027 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1028
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1029 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1030 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1031 return (undef, undef, undef, undef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1032 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1033 my($AtomSymbol, $AtomNeighbor, $NumOfAtomNeighbors, $NumOfAtomNeighborsType, @AtomNeighbors, %AtomNeighborsTypeMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1034
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1035 $NumOfAtomNeighbors = 0; @AtomNeighbors = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1036 $NumOfAtomNeighborsType = 0; %AtomNeighborsTypeMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1037
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1038 @AtomNeighbors = $This->GetNonHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1039 $NumOfAtomNeighbors = scalar @AtomNeighbors;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1040
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1041 for $AtomNeighbor (@AtomNeighbors) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1042 $AtomSymbol = $AtomNeighbor->{AtomSymbol};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1043 if (exists $AtomNeighborsTypeMap{$AtomSymbol}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1044 $AtomNeighborsTypeMap{$AtomSymbol} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1045 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1046 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1047 $AtomNeighborsTypeMap{$AtomSymbol} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1048 $NumOfAtomNeighborsType++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1049 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1050 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1051
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1052 return ($NumOfAtomNeighbors, \@AtomNeighbors, $NumOfAtomNeighborsType, \%AtomNeighborsTypeMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1053 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1054
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1055 # Get information related to bonds for all heavy atoms attached to an atom..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1056 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1057 sub GetHeavyAtomNeighborsBondformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1058 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1059
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1060 return $This->GetNonHydrogenAtomNeighborsBondInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1061 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1062
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1063 # Get information related to bonds for all non-hydrogen atoms attached to an atom..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1064 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1065 # The following values are returned:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1066 # . Number of bonds to non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1067 # . A reference to an array containing bond objects correpsonding to non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1068 # atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1069 # . A reference to a hash containing bond type as key with value corresponding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1070 # to its count for non-hydrogen atom neighbors. Bond types are: Single, Double or Triple
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1071 # . A reference to a hash containing atom symbol as key pointing to bond type as second
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1072 # key with values correponding to count of bond types for atom symbol for non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1073 # atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1074 # . A reference to a hash containing atom symbol as key pointing to bond type as second
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1075 # key with values correponding to atom objects array involved in corresponding bond type for
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1076 # atom symbol for non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1077 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1078 sub GetNonHydrogenAtomNeighborsBondInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1079 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1080
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1081 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1082 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1083 return (undef, undef, undef, undef, undef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1084 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1085 my($BondedAtom, $BondedAtomSymbol, $BondType, $None, $Bond, $NumOfBonds, @Bonds, %BondTypeCountMap, %AtomsBondTypesCountMap, %AtomsBondTypeAtomsMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1086
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1087 $NumOfBonds = 0; @Bonds = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1088 %BondTypeCountMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1089 %AtomsBondTypesCountMap = (); %AtomsBondTypeAtomsMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1090
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1091 $BondTypeCountMap{Single} = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1092 $BondTypeCountMap{Double} = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1093 $BondTypeCountMap{Triple} = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1094
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1095 @Bonds = $This->GetBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1096 $NumOfBonds = scalar @Bonds;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1097
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1098 BOND: for $Bond (@Bonds) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1099 $BondType = $Bond->IsSingle() ? "Single" : ($Bond->IsDouble() ? "Double" : ($Bond->IsTriple() ? "Triple" : ""));
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1100 if (!$BondType) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1101 next BOND;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1102 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1103
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1104 # Track bond types...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1105 if (exists $BondTypeCountMap{$BondType}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1106 $BondTypeCountMap{$BondType} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1107 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1108 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1109 $BondTypeCountMap{$BondType} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1110 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1111
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1112 $BondedAtom = $Bond->GetBondedAtom($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1113 $BondedAtomSymbol = $BondedAtom->{AtomSymbol};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1114
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1115 # Track bond types count for atom types involved in specific bond types...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1116 if (!exists $AtomsBondTypesCountMap{$BondedAtomSymbol}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1117 %{$AtomsBondTypesCountMap{$BondedAtomSymbol}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1118 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1119 if (exists $AtomsBondTypesCountMap{$BondedAtomSymbol}{$BondType}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1120 $AtomsBondTypesCountMap{$BondedAtomSymbol}{$BondType} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1121 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1122 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1123 $AtomsBondTypesCountMap{$BondedAtomSymbol}{$BondType} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1124 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1125
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1126 # Track atoms involved in specific bond types for specific atom types...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1127 if (!exists $AtomsBondTypeAtomsMap{$BondedAtomSymbol}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1128 %{$AtomsBondTypeAtomsMap{$BondedAtomSymbol}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1129 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1130 if (!exists $AtomsBondTypeAtomsMap{$BondedAtomSymbol}{$BondType}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1131 @{$AtomsBondTypeAtomsMap{$BondedAtomSymbol}{$BondType}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1132 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1133 push @{$AtomsBondTypeAtomsMap{$BondedAtomSymbol}{$BondType}}, $BondedAtom;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1134 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1135
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1136 return ($NumOfBonds, \@Bonds, \%BondTypeCountMap, \%AtomsBondTypesCountMap, \%AtomsBondTypeAtomsMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1137 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1138
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1139 # Get number of bonds to hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1140 sub GetNumOfBondsToHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1141 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1142 my($NumOfBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1143
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1144 $NumOfBonds = $This->GetBondsToHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1145
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1146 return (defined $NumOfBonds) ? ($NumOfBonds) : undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1147 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1148
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1149 # Get sum of bond orders to all bonded atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1150 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1151 sub GetSumOfBondOrders {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1152 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1153
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1154 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1155 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1156 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1157 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1158
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1159 return $This->_GetSumOfBondOrders();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1160 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1161
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1162 # Get sum of bond orders to non-hydrogen atoms only...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1163 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1164 sub GetSumOfBondOrdersToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1165 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1166
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1167 return $This->GetSumOfBondOrdersToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1168 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1169
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1170 # Get sum of bond orders to non-hydrogen atoms only...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1171 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1172 sub GetSumOfBondOrdersToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1173 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1174
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1175 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1176 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1177 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1178 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1179 my($ToNonHydrogenAtomsOnly, $ToHydrogenAtomsOnly) = (1, 0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1180
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1181 return $This->_GetSumOfBondOrders($ToNonHydrogenAtomsOnly, $ToHydrogenAtomsOnly);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1182 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1183
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1184 # Get sum of bond orders to hydrogen atoms only...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1185 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1186 sub GetSumOfBondOrdersToHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1187 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1188
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1189 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1190 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1191 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1192 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1193 my($ToNonHydrogenAtomsOnly, $ToHydrogenAtomsOnly) = (0, 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1194
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1195 return $This->_GetSumOfBondOrders($ToNonHydrogenAtomsOnly, $ToHydrogenAtomsOnly);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1196 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1197
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1198 # Get sum of bond orders to all bonded atoms, non-hydrogen or hydrogen bonded atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1199 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1200 sub _GetSumOfBondOrders {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1201 my($This, $ToNonHydrogenAtomsOnly, $ToHydrogenAtomsOnly) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1202
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1203 # Check flags...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1204 if (!defined $ToNonHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1205 $ToNonHydrogenAtomsOnly = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1206 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1207 if (!defined $ToHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1208 $ToHydrogenAtomsOnly = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1209 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1210 my($Bond, $SumOfBondOrders, @Bonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1211 @Bonds = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1212
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1213 if ($ToNonHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1214 @Bonds = $This->GetBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1215 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1216 elsif ($ToHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1217 @Bonds = $This->GetBondsToHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1218 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1219 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1220 # All bonds...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1221 @Bonds = $This->GetBonds();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1222 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1223
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1224 $SumOfBondOrders = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1225 for $Bond (@Bonds) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1226 $SumOfBondOrders += $Bond->GetBondOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1227 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1228
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1229 if ($SumOfBondOrders =~ /\./) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1230 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1231 # Change any fractional bond order to next largest integer...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1232 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1233 # As long as aromatic bond orders in a ring are correctly using using 4n + 2 Huckel rule
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1234 # (BondOrder: 1.5) or explicity set as Kekule bonds (alternate single/double),
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1235 # SumOfBondOrders should add up to an integer.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1236 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1237 $SumOfBondOrders = ceil($SumOfBondOrders);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1238 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1239
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1240 return $SumOfBondOrders;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1241 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1242
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1243 # Get largest bond order to any bonded atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1244 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1245 sub GetLargestBondOrder {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1246 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1247
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1248 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1249 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1250 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1251 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1252
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1253 return $This->_GetLargestBondOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1254 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1255
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1256 # Get largest bond order to bonded non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1257 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1258 sub GetLargestBondOrderToHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1259 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1260
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1261 return $This->GetLargestBondOrderToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1262 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1263
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1264 # Get largest bond order to bonded non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1265 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1266 sub GetLargestBondOrderToNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1267 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1268
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1269 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1270 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1271 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1272 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1273
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1274 my($ToNonHydrogenAtomsOnly) = (1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1275
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1276 return $This->_GetLargestBondOrder($ToNonHydrogenAtomsOnly);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1277 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1278
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1279 # Get largest bond order to all bonded atoms, non-hydrogen or hydrogen bonded atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1280 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1281 sub _GetLargestBondOrder {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1282 my($This, $ToNonHydrogenAtomsOnly, $ToHydrogenAtomsOnly) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1283
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1284 # Check flags...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1285 if (!defined $ToNonHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1286 $ToNonHydrogenAtomsOnly = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1287 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1288 if (!defined $ToHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1289 $ToHydrogenAtomsOnly = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1290 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1291 my($Bond, $LargestBondOrder, $BondOrder, @Bonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1292 @Bonds = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1293
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1294 if ($ToNonHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1295 @Bonds = $This->GetBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1296 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1297 elsif ($ToHydrogenAtomsOnly) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1298 @Bonds = $This->GetBondsToHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1299 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1300 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1301 # All bonds...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1302 @Bonds = $This->GetBonds();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1303 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1304
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1305 $LargestBondOrder = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1306 for $Bond (@Bonds) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1307 $BondOrder = $Bond->GetBondOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1308 if ($BondOrder > $LargestBondOrder) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1309 $LargestBondOrder = $BondOrder;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1310 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1311 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1312
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1313 return $LargestBondOrder;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1314 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1315
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1316 # Get number of implicit hydrogen for atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1317 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1318 sub GetImplicitHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1319 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1320
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1321 return $This->GetNumOfImplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1322 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1323
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1324 # Get number of implicit hydrogen for atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1325 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1326 sub GetNumOfImplicitHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1327 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1328
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1329 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1330 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1331 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1332 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1333
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1334 # Is ImplicitHydrogens property explicitly set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1335 if ($This->HasProperty('ImplicitHydrogens')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1336 return $This->GetProperty('ImplicitHydrogens');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1337 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1338
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1339 # Is it an element symbol?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1340 if (!$This->{AtomicNumber}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1341 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1342 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1343
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1344 my($ImplicitHydrogens, $PotentialTotalValence, $SumOfBondOrders);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1345
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1346 $ImplicitHydrogens = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1347 $SumOfBondOrders = $This->GetSumOfBondOrders();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1348 $PotentialTotalValence = $This->GetPotentialTotalCommonValence();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1349
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1350 if (defined($PotentialTotalValence) && defined($SumOfBondOrders)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1351 # Subtract sum of bond orders to non-hydrogen and hydrogen atom neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1352 $ImplicitHydrogens = $PotentialTotalValence - $SumOfBondOrders;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1353 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1354
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1355 return $ImplicitHydrogens > 0 ? $ImplicitHydrogens : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1356 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1357
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1358 # Get number of bonds available to form additional bonds with heavy atoms, excluding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1359 # any implicit bonds to hydrogens set using ImplicitHydrogens property.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1360 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1361 # It's different from number of implicit or missing hydrogens, both of which are equivalent.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1362 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1363 # For example, in a SMILES string, [nH] ring atom corresponds to an aromatic nitrogen.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1364 # Although the hydrogen specified for n is treated internally as implicit hydrogen and shows
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1365 # up in missing hydrogen count, it's not available to participate in double bonds to additional
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1366 # heavy atoms.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1367 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1368 sub GetNumOfBondsAvailableForHeavyAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1369 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1370
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1371 return $This->GetNumOfBondsAvailableForNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1372 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1373
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1374 # It's another name for GetNumOfBondsAvailableForHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1375 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1376 sub GetNumOfBondsAvailableForNonHydrogenAtoms {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1377 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1378 my($NumOfAvailableBonds, $PotentialTotalValence, $SumOfBondOrders);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1379
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1380 $NumOfAvailableBonds = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1381
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1382 $SumOfBondOrders = $This->GetSumOfBondOrders();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1383 $PotentialTotalValence = $This->GetPotentialTotalCommonValence();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1384
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1385 if (defined($PotentialTotalValence) && defined($SumOfBondOrders)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1386 # Subtract sum of bond orders to non-hydrogen and hydrogen atom neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1387 $NumOfAvailableBonds = $PotentialTotalValence - $SumOfBondOrders;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1388 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1389
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1390 if ($This->HasProperty('ImplicitHydrogens')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1391 $NumOfAvailableBonds -= $This->GetProperty('ImplicitHydrogens');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1392 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1393
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1394 return $NumOfAvailableBonds > 0 ? $NumOfAvailableBonds : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1395 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1396
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1397 # Disable setting of explicit hydrogens property...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1398 sub SetExplicitHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1399 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1400
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1401 carp "Warning: ${ClassName}->SetExplicitHydrogens: Setting of explicit hydrogens is not supported...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1402
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1403 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1404 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1405
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1406 # Get number of explicit hydrogens for atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1407 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1408 sub GetExplicitHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1409 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1410
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1411 return $This->GetNumOfExplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1412 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1413
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1414 # Get number of explicit hydrogens for atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1415 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1416 sub GetNumOfExplicitHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1417 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1418 my($HydrogenAtomNbrs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1419
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1420 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1421 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1422 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1423 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1424
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1425 $HydrogenAtomNbrs = $This->GetNumOfHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1426
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1427 return defined $HydrogenAtomNbrs ? $HydrogenAtomNbrs : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1428 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1429
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1430 # Get num of missing hydrogens...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1431 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1432 sub GetMissingHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1433 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1434
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1435 return $This->GetNumOfMissingHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1436 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1437
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1438 # Get num of missing hydrogens...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1439 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1440 sub GetNumOfMissingHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1441 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1442
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1443 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1444 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1445 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1446 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1447
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1448 return $This->GetNumOfImplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1449 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1450
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1451 # Get total number of hydrogens...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1452 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1453 sub GetHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1454 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1455
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1456 return $This->GetNumOfHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1457 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1458
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1459 # Get total number of hydrogens...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1460 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1461 sub GetNumOfHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1462 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1463
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1464 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1465 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1466 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1467 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1468
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1469 return $This->GetNumOfImplicitHydrogens() + $This->GetNumOfExplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1470 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1471
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1472 # Valence corresponds to the number of electrons used by an atom in bonding:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1473 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1474 # Valence = ValenceElectrons - ValenceFreeElectrons = BondingElectrons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1475 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1476 # Single, double, triple bonds with bond orders of 1, 2 and 3 correspond to contribution of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1477 # 1, 2, and 3 bonding electrons. So Valence can be computed using:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1478 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1479 # Valence = SumOfBondOrders + NumOfMissingHydrogens + FormalCharge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1480 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1481 # where positive and negative values of FormalCharge increase and decrease the number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1482 # of bonding electrons respectively.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1483 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1484 # The current release of MayaChemTools supports the following three valence models, which
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1485 # are used during calculation of implicit hydrogens: MDLValenceModel, DaylightValenceModel,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1486 # InternalValenceModel or MayaChemToolsValenceModel.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1487 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1488 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1489 # . This doesn't always corresponds to explicit valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1490 # . Missing hydrogens are included in the valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1491 # . For neutral molecules, valence and sum of bond order are equal.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1492 # . For molecules containing only single bonds, SumOfBondOrders and NumOfBonds are equal.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1493 # . Free radical electrons lead to the decrease in valence. For atoms with explicit assignment
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1494 # of SpinMultiplicity property values corresponding to Singlet (two unparied electrons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1495 # corresponding to one spin state), Doublet (free radical; an unpaired electron corresponding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1496 # to two spin states), and Triplet (two unparied electrons corresponding to three spin states;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1497 # divalent carbon atoms (carbenes)), FreeRadicalElectrons are calculated as follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1498 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1499 # SpinMultiplicity: Doublet(2); FreeRadicalElectrons: 1 (one valence electron not available for bonding)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1500 # SpinMultiplicity: Singlet(1)/Triplet(3); FreeRadicalElectrons: 2 (two valence electrons not available for bonding)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1501 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1502 sub GetValence {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1503 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1504
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1505 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1506 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1507 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1508 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1509
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1510 # Is Valence property explicitly set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1511 if ($This->HasProperty('Valence')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1512 return $This->GetProperty('Valence');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1513 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1514 my($Valence);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1515
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1516 $Valence = $This->GetSumOfBondOrders() + $This->GetNumOfMissingHydrogens() + $This->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1517
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1518 return $Valence > 0 ? $Valence : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1519 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1520
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1521 # Get free non-bodning valence electrons left on atom after taking into account
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1522 # sum of bond orders, missing hydrogens and formal charged on the atom. Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1523 # radical electrons are included in the valence free electrons count by default.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1524 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1525 # Valence corresponds to number of electrons used by atom in bonding:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1526 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1527 # Valence = ValenceElectrons - ValenceFreeElectrons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1528 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1529 # Additionally, valence can also be calculated by:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1530 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1531 # Valence = SumOfBondOrders + NumOfMissingHydrogens + FormalCharge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1532 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1533 # Valence and SumOfBondOrders are equal for neutral molecules.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1534 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1535 # From two formulas for Valence described above, non-bonding free electrons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1536 # left can be computed by:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1537 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1538 # ValenceFreeElectrons = ValenceElectrons - Valence
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1539 # = ValenceElectrons - SumOfBondOrders -
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1540 # NumOfMissingHydrogens - FormalCharge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1541 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1542 # . Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1543 # . Missing hydrogens are excluded from the valence free electrons.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1544 # . Any free radical electrons are considered part of the valence free electrons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1545 # by default.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1546 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1547 # Examples:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1548 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1549 # o NH3: ValenceFreeElectrons = 5 - 3 = 5 - 3 - 0 - 0 = 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1550 # o NH2: ValenceFreeElectrons = 5 - 3 = 5 - 2 - 1 - 0 = 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1551 # o NH4+; ValenceFreeElectrons = 5 - 5 = 5 - 4 - 0 - 1 = 0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1552 # o NH3+; ValenceFreeElectrons = 5 - 5 = 5 - 3 - 1 - 1 = 0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1553 # o C(=O)O- : ValenceFreeElectrons on O- = 6 - 0 = 6 - 1 - 0 - (-1) = 6
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1554 # o C(=O)O- : ValenceFreeElectrons on =O = 6 - 2 = 6 - 2 - 0 - 0 = 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1555 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1556 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1557 sub GetValenceFreeElectrons {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1558 my($This, $ExcludeFreeRadicalElectrons) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1559
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1560 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1561 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1562 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1563 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1564
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1565 # Is ValenceFreeElectrons property explicitly set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1566 if ($This->HasProperty('ValenceFreeElectrons')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1567 return $This->GetProperty('ValenceFreeElectrons');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1568 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1569
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1570 if (!$This->{AtomicNumber}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1571 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1572 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1573
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1574 my($ValenceFreeElectrons);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1575
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1576 $ValenceFreeElectrons = $This->GetValenceElectrons() - $This->GetValence();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1577 if ($ExcludeFreeRadicalElectrons) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1578 $ValenceFreeElectrons -= $This->GetFreeRadicalElectrons();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1579 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1580
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1581 return $ValenceFreeElectrons > 0 ? $ValenceFreeElectrons : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1582 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1583
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1584 # Get potential total common valence for calculating the number of implicit hydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1585 # using the specified common valence model or default internal model for a molecule...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1586 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1587 sub GetPotentialTotalCommonValence {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1588 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1589
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1590 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1591 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1592 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1593 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1594 my($PotentialTotalValence, $ValenceModel);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1595
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1596 $PotentialTotalValence = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1597 $ValenceModel = $This->GetProperty('Molecule')->GetValenceModel();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1598
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1599 VALENCEMODEL: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1600 if ($ValenceModel =~ /^MDLValenceModel$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1601 $PotentialTotalValence = $This->_GetPotentialTotalCommonValenceUsingMDLValenceModel();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1602 last VALENCEMODEL;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1603 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1604 if ($ValenceModel =~ /^DaylightValenceModel$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1605 $PotentialTotalValence = $This->_GetPotentialTotalCommonValenceUsingDaylightValenceModel();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1606 last VALENCEMODEL;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1607 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1608 if ($ValenceModel !~ /^(InternalValenceModel|MayaChemToolsValenceModel)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1609 carp "Warning: ${ClassName}->GetPotentialTotalCommonValence: The current release of MayaChemTools doesn't support the specified valence model $ValenceModel. Supported valence models: MDLValenceModel, DaylightValenceModel, InternalValenceModel. Using internal valence model...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1610 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1611 # Use internal valence model as the default valence model...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1612 $PotentialTotalValence = $This->_GetPotentialTotalCommonValenceUsingInternalValenceModel();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1613 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1614
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1615 return $PotentialTotalValence;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1616 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1617
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1618 # Get potential total common valence using data for MDL valence model available in file,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1619 # lib/data/MDLValenceModelData.csv, distributed with the package...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1620 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1621 sub _GetPotentialTotalCommonValenceUsingMDLValenceModel {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1622 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1623
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1624 return $This->_GetPotentialTotalCommonValenceUsingValenceModelData(\%MDLValenceModelDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1625
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1626 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1627
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1628 # Get potential total common valence using data for Daylight valence model available in file,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1629 # lib/data/DaylightValenceModelData.csv, distributed with the release...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1630 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1631 sub _GetPotentialTotalCommonValenceUsingDaylightValenceModel {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1632 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1633
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1634 return $This->_GetPotentialTotalCommonValenceUsingValenceModelData(\%DaylightValenceModelDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1635 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1636
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1637 # Get potential total common valence using data for a specific valence model...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1638 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1639 sub _GetPotentialTotalCommonValenceUsingValenceModelData {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1640 my($This, $ValenceModelDataRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1641 my($AtomicNumber, $FormalCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1642
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1643 $AtomicNumber = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1644 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1645 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1646 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1647
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1648 $FormalCharge = $This->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1649
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1650 # Is any valence model data available for atomic number and formal charge?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1651 if (!exists $ValenceModelDataRef->{$AtomicNumber}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1652 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1653 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1654 if (!exists $ValenceModelDataRef->{$AtomicNumber}{$FormalCharge}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1655 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1656 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1657
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1658 my($PotentialTotalValence, $SumOfBondOrders, $CurrentEffectiveValence, $AvailableCommonValence);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1659
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1660 $SumOfBondOrders = $This->GetSumOfBondOrders();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1661 if (!defined $SumOfBondOrders) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1662 $SumOfBondOrders = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1663 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1664 $CurrentEffectiveValence = $SumOfBondOrders + $This->GetFreeRadicalElectrons();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1665
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1666 $PotentialTotalValence = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1667 VALENCE: for $AvailableCommonValence (@{$ValenceModelDataRef->{$AtomicNumber}{$FormalCharge}{CommonValences}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1668 if ($CurrentEffectiveValence <= $AvailableCommonValence) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1669 $PotentialTotalValence = $AvailableCommonValence;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1670 last VALENCE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1671 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1672 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1673
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1674 return $PotentialTotalValence;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1675 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1676
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1677 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1678 # For elements with one one common valence, potential total common valence used
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1679 # during the calculation for number of implicit hydrogens during InternalValenceMode
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1680 # corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1681 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1682 # CommonValence + FormalCharge - FreeRadicalElectrons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1683 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1684 # For elements with multiple common valences, each common valence is used to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1685 # calculate total potential common valence as shown above, and the first total potential
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1686 # common valence gerater than the sum of bond orderes is selected as the final total
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1687 # common valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1688 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1689 # Group numbers > 14 - Group numbers 15 (N), 16 (O), 17 (F), 18 (He)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1690 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1691 # Formal charge sign is not adjusted. Positive and negative values result in the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1692 # increase and decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1693 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1694 # Group 14 containing C, Si, Ge, Sn, Pb...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1695 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1696 # Formal charge sign is reversed for positive values. Both positive and negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1697 # values result in the decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1698 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1699 # Group 13 containing B, Al, Ga, In, Tl...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1700 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1701 # Formal charge sign is always reversed. Positive and negative values result in the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1702 # decrease and increase of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1703 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1704 # Groups 1 (H) through 12 (Zn)...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1705 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1706 # Formal charge sign is reversed for positive values. Both positive and negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1707 # values result in the decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1708 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1709 # Lanthanides and actinides...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1710 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1711 # Formal charge sign is reversed for positive values. Both positive and negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1712 # values result in the decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1713 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1714 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1715 # . CommonValence and HighestCommonValence available from PeriodicTable module
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1716 # are equivalent to most common and highest sum of bond orders for an element. For
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1717 # neutral atoms involved only in single bonds, it corresponds to highest number of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1718 # allowed bonds for the atom.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1719 # . FormalCharge sign is reversed for electropositive elements with positive formal charge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1720 # during common valence calculations. Electropositive elements, metals and transition elements,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1721 # have usually plus formal charge and it leads to decrease in common valence; the negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1722 # formal charge should result in the decrease of common valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1723 # . For carbon, both plus/minus formal charge cause decrease in common valence
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1724 # . For elements on the right of carbon in periodic table, electronegative elements, plus formal
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1725 # charge causes common valence to increase and minus formal charge cause it to decrease.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1726 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1727 sub _GetPotentialTotalCommonValenceUsingInternalValenceModel {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1728 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1729 my($AtomicNumber, $CommonValences);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1730
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1731 $AtomicNumber = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1732 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1733 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1734 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1735
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1736 $CommonValences = PeriodicTable::GetElementCommonValences($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1737 if (!$CommonValences) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1738 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1739 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1740
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1741 my($PotentialTotalValence, $AdjustedFormalCharge, $FreeRadicalElectrons, $SumOfBondOrders, $AvailableCommonValence, @AvailableCommonValences);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1742
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1743 $AdjustedFormalCharge = $This->_GetFormalChargeAdjustedForInternalValenceModel();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1744 $FreeRadicalElectrons = $This->GetFreeRadicalElectrons();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1745
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1746 $SumOfBondOrders = $This->GetSumOfBondOrders();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1747 if (!defined $SumOfBondOrders) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1748 $SumOfBondOrders = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1749 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1750
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1751 @AvailableCommonValences = split /\,/, $CommonValences;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1752
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1753 if (@AvailableCommonValences == 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1754 # Calculate potential total valence using the only available common valence...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1755 $PotentialTotalValence = $AvailableCommonValences[0] + $AdjustedFormalCharge - $FreeRadicalElectrons;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1756 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1757 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1758 # Calculate potential total valence using common valence from a list of available valences
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1759 # that makes it higher than sum of bond orders or using the highest common valence...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1760 VALENCE: for $AvailableCommonValence (@AvailableCommonValences) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1761 $PotentialTotalValence = $AvailableCommonValence + $AdjustedFormalCharge - $FreeRadicalElectrons;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1762
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1763 if ($PotentialTotalValence < 0 || $PotentialTotalValence >= $SumOfBondOrders) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1764 last VALENCE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1765 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1766 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1767 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1768
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1769 return $PotentialTotalValence > 0 ? $PotentialTotalValence : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1770 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1771
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1772 # Adjust sign of the formal charge for potential total common valence calculation
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1773 # used during internal valence model to figure out number of implicit hydrogens.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1774 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1775 sub _GetFormalChargeAdjustedForInternalValenceModel {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1776 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1777 my($FormalCharge, $GroupNumber, $SwitchSign);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1778
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1779 $FormalCharge = $This->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1780 if ($FormalCharge == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1781 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1782 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1783
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1784 $GroupNumber = $This->GetGroupNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1785 if (!defined $GroupNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1786 return $FormalCharge;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1787 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1788
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1789 # Group numbers > 14 - Group numbers 15 (N), 16 (O), 17 (F), 18 (He)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1790 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1791 # Formal charge sign is not adjusted. Positive and negative values result in the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1792 # increase and decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1793 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1794 # Group 14 containing C, Si, Ge, Sn, Pb...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1795 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1796 # Formal charge sign is reversed for positive values. Both positive and negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1797 # values result in the decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1798 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1799 # Group 13 containing B, Al, Ga, In, Tl...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1800 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1801 # Formal charge sign is always reversed. Positive and negative values result in the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1802 # decrease and increase of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1803 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1804 # Groups 1 (H) through 12 (Zn)...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1805 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1806 # Formal charge sign is reversed for positive values. Both positive and negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1807 # values result in the decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1808 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1809 # Lanthanides and actinides...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1810 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1811 # Formal charge sign is reversed for positive values. Both positive and negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1812 # values result in the decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1813 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1814
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1815 $SwitchSign = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1816 if (length $GroupNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1817 GROUPNUMBER: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1818 if ($GroupNumber > 14) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1819 # Groups on the right side of C group in the periodic table...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1820 $SwitchSign = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1821 last GROUPNUMBER;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1822 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1823 if ($GroupNumber == 14) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1824 # Group containing C, Si, Ge, Sn, Pb...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1825 $SwitchSign = ($FormalCharge > 0) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1826 last GROUPNUMBER;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1827 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1828 if ($GroupNumber == 13) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1829 # Group containing B, Al, Ga, In, Tl...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1830 $SwitchSign = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1831 last GROUPNUMBER;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1832 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1833 # Groups 1 (H) through 12 (Zn)...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1834 if ($GroupNumber >=1 && $GroupNumber <= 12) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1835 # Groups 1 (H) through 12 (Zn)...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1836 $SwitchSign = ($FormalCharge > 0) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1837 last GROUPNUMBER;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1838 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1839 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1840 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1841 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1842 # Lanthanides and actinides...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1843 $SwitchSign = ($FormalCharge > 0) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1844 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1845
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1846 if ($SwitchSign) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1847 $FormalCharge *= -1.0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1848 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1849
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1850 return $FormalCharge;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1851 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1852
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1853 # Get lowest common valence...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1854 sub GetLowestCommonValence {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1855 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1856
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1857 # Is LowestCommonValence property explicitly set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1858 if ($This->HasProperty('LowestCommonValence')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1859 return $This->GetProperty('LowestCommonValence');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1860 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1861 my($AtomicNumber, $LowestCommonValence);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1862
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1863 $AtomicNumber = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1864 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1865 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1866 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1867 # Any need to differentiate between internal and other valence models...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1868
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1869 # LowestCommonValence is not set for all elements...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1870 $LowestCommonValence = PeriodicTable::GetElementLowestCommonValence($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1871 if (!$LowestCommonValence) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1872 $LowestCommonValence = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1873 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1874
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1875 return $LowestCommonValence;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1876 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1877
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1878 # Get highest common valence...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1879 sub GetHighestCommonValence {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1880 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1881
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1882 # Is HighestCommonValence property explicitly set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1883 if ($This->HasProperty('HighestCommonValence')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1884 return $This->GetProperty('HighestCommonValence');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1885 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1886 my($AtomicNumber, $HighestCommonValence);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1887
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1888 $AtomicNumber = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1889 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1890 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1891 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1892
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1893 # Any need to differentiate between internal and other valence models...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1894
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1895 # HighestCommonValence is not set for all elements...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1896 $HighestCommonValence = PeriodicTable::GetElementHighestCommonValence($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1897 if (!$HighestCommonValence) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1898 $HighestCommonValence = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1899 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1900
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1901 return $HighestCommonValence;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1902 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1903
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1904 # Get valence electrons...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1905 sub GetValenceElectrons {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1906 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1907
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1908 # Is ValenceElectrons property explicitly set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1909 if ($This->HasProperty('ValenceElectrons')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1910 return $This->GetProperty('ValenceElectrons');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1911 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1912 my($AtomicNumber, $ValenceElectrons);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1913
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1914 $AtomicNumber = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1915 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1916 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1917 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1918
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1919 $ValenceElectrons = PeriodicTable::GetElementValenceElectrons($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1920
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1921 return $ValenceElectrons;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1922 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1923
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1924 # Add hydrogens to specified atom in molecule and return number of hydrogens added:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1925 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1926 # o HydrogensToAdd = ImplicitHydrogenCount - ExplicitHydrogenCount
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1927 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1928 # o XYZ are set to ZeroVector
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1929 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1930 sub AddHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1931 my($This, $HydrogenPositionsWarning) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1932
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1933 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1934 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1935 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1936 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1937 if (!defined $HydrogenPositionsWarning) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1938 $HydrogenPositionsWarning = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1939 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1940 if ($HydrogenPositionsWarning) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1941 carp "Warning: ${ClassName}->AddHydrogens: The current release of MayaChemTools doesn't assign any hydrogen positions...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1942 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1943
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1944 # Is it an element symbol?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1945 if (!$This->{AtomicNumber}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1946 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1947 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1948
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1949 my($Molecule, $HydrogensAdded, $HydrogensToAdd);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1950
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1951 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1952 $HydrogensAdded = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1953 $HydrogensToAdd = $This->GetNumOfMissingHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1954 if ($HydrogensToAdd <= 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1955 return $HydrogensAdded;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1956 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1957
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1958 my($Count, $Hydrogen);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1959
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1960 for $Count (1 .. $HydrogensToAdd) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1961 $HydrogensAdded++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1962
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1963 $Hydrogen = $Molecule->NewAtom('AtomSymbol' => 'H', 'XYZ' => [0, 0, 0]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1964 $Molecule->NewBond('Atoms' => [$This, $Hydrogen], 'BondOrder' => 1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1965 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1966
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1967 return $HydrogensAdded;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1968 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1969
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1970 # Delete hydrogens attached to atom in molecule and return total number of hydrogens deleted...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1971 sub DeleteHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1972 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1973
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1974 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1975 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1976 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1977 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1978
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1979 # Is it an element symbol?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1980 if (!$This->{AtomicNumber}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1981 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1982 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1983
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1984 my($Molecule, $Neighbor, $HydrogensDeleted, @Neighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1985
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1986 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1987 $HydrogensDeleted = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1988 @Neighbors = $This->GetNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1989
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1990 NEIGHBOR: for $Neighbor (@Neighbors) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1991 if (!$Neighbor->IsHydrogen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1992 next NEIGHBOR;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1993 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1994 $Molecule->_DeleteAtom($Neighbor);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1995 $HydrogensDeleted++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1996 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1997
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1998 return $HydrogensDeleted;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1999 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2001 # Copy atom and all its associated data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2002 sub Copy {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2003 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2004 my($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2005
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2006 $Atom = Storable::dclone($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2007
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2008 return $Atom;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2009 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2010
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2011 # Get atomic invariant value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2012 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2013 sub GetAtomicInvariantValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2014 my($This, $AtomicInvariant) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2015 my($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2016
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2017 $Value = "";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2018
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2019 ATOMICVARIANT: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2020 if ($AtomicInvariant =~ /^(AS|AtomSymbol|ElementSymbol)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2021 $Value = $This->GetAtomSymbol();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2022 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2023 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2024 if ($AtomicInvariant =~ /^(X|NumOfNonHydrogenAtomNeighbors|NumOfHeavyAtomNeighbors)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2025 $Value = $This->GetNumOfNonHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2026 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2027 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2028 if ($AtomicInvariant =~ /^(BO|SumOfBondOrdersToNonHydrogenAtoms|SumOfBondOrdersToHeavyAtoms)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2029 $Value = $This->GetSumOfBondOrdersToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2030 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2031 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2032 if ($AtomicInvariant =~ /^(LBO|LargestBondOrderToNonHydrogenAtoms|LargestBondOrderToHeavyAtoms)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2033 $Value = $This->GetLargestBondOrderToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2034 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2035 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2036 if ($AtomicInvariant =~ /^(H|NumOfImplicitAndExplicitHydrogens)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2037 $Value = $This->GetNumOfHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2038 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2039 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2040 if ($AtomicInvariant =~ /^(SB|NumOfSingleBondsToNonHydrogenAtoms|NumOfSingleBondsToHeavyAtoms)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2041 $Value = $This->GetNumOfSingleBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2042 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2043 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2044 if ($AtomicInvariant =~ /^(DB|NumOfDoubleBondsToNonHydrogenAtoms|NumOfDoubleBondsToHeavyAtoms)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2045 $Value = $This->GetNumOfDoubleBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2046 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2047 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2048 if ($AtomicInvariant =~ /^(TB|NumOfTripleBondsToNonHydrogenAtoms|NumOfTripleBondsToHeavyAtoms)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2049 $Value = $This->GetNumOfTripleBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2050 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2051 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2052 if ($AtomicInvariant =~ /^(AB|NumOfAromaticBondsToNonHydrogenAtoms|NumOfAromaticBondsToHeavyAtoms)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2053 $Value = $This->GetNumOfAromaticBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2054 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2055 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2056 if ($AtomicInvariant =~ /^(FC|FormalCharge)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2057 $Value = $This->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2058 $Value = defined $Value ? $Value : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2059 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2060 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2061 if ($AtomicInvariant =~ /^(T|TotalNumOfAtomNeighbors)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2062 $Value = $This->GetNumOfNonHydrogenAtomNeighbors() + $This->GetNumOfHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2063 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2064 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2065 if ($AtomicInvariant =~ /^(TSB|TotalNumOfSingleBonds)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2066 $Value = $This->GetNumOfSingleBondsToNonHydrogenAtoms() + $This->GetNumOfHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2067 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2068 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2069 if ($AtomicInvariant =~ /^(Ar|Aromatic)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2070 $Value = $This->IsAromatic() ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2071 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2072 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2073 if ($AtomicInvariant =~ /^(RA|RingAtom)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2074 $Value = $This->IsInRing() ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2075 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2076 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2077 if ($AtomicInvariant =~ /^(Str|Stereochemistry)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2078 $Value = $This->GetStereochemistry();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2079 $Value= (defined($Value) && ($Value =~ /^(R|S)$/i)) ? $Value : '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2080 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2081 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2082 if ($AtomicInvariant =~ /^(AN|AtomicNumber)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2083 $Value = $This->GetAtomicNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2084 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2085 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2086 if ($AtomicInvariant =~ /^(AM|AtomicMass)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2087 $Value = round($This->GetExactMass(), 4) + 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2088 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2089 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2090 if ($AtomicInvariant =~ /^(MN|MassNumber)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2091 $Value = $This->GetMassNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2092 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2093 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2094 if ($AtomicInvariant =~ /^(SM|SpinMultiplicity)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2095 $Value = $This->GetSpinMultiplicity();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2096 $Value = defined $Value ? $Value : '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2097 last ATOMICVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2098 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2099 $Value = "";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2100 carp "Warning: ${ClassName}->GetAtomicInvariantValue: Unknown atomic invariant $AtomicInvariant...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2101 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2102
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2103 return $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2104 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2105
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2106 # Get period number of the atom..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2107 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2108 sub GetPeriodNumber {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2109 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2110
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2111 # Is PeriodNumber property explicitly set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2112 if ($This->HasProperty('PeriodNumber')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2113 return $This->GetProperty('PeriodNumber');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2114 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2115 my($AtomicNumber, $PeriodNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2116
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2117 $AtomicNumber = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2118 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2119 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2120 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2121
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2122 $PeriodNumber = PeriodicTable::GetElementPeriodNumber($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2123
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2124 return $PeriodNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2125 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2126
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2127 # Get group number of the atom..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2128 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2129 sub GetGroupNumber {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2130 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2131
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2132 # Is GroupNumber property explicitly set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2133 if ($This->HasProperty('GroupNumber')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2134 return $This->GetProperty('GroupNumber');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2135 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2136 my($AtomicNumber, $GroupNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2137
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2138 $AtomicNumber = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2139 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2140 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2141 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2142
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2143 $GroupNumber = PeriodicTable::GetElementGroupNumber($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2144
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2145 return $GroupNumber;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2146 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2147
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2148 # Is it a specified topological pharmacophore atom type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2149 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2150 sub IsTopologicalPharmacophoreType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2151 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2152
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2153 return $This->_IsFunctionalClassType($Type);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2154 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2155
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2156 # Is it a specified functional class atom type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2157 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2158 sub IsFunctionalClassType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2159 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2160
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2161 return $This->_IsFunctionalClassType($Type);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2162 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2163
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2164 # Is it a specified functional/topological pharmacophore atom type?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2165 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2166 sub _IsFunctionalClassType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2167 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2168 my($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2169
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2170 $Value = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2171
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2172 TYPE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2173 if ($Type =~ /^(HBD|HydrogenBondDonor)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2174 $Value = $This->IsHydrogenBondDonor();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2175 last TYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2176 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2177 if ($Type =~ /^(HBA|HydrogenBondAcceptor)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2178 $Value = $This->IsHydrogenBondAcceptor();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2179 last TYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2180 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2181 if ($Type =~ /^(PI|PositivelyIonizable)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2182 $Value = $This->IsPositivelyIonizable();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2183 last TYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2184 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2185 if ($Type =~ /^(NI|NegativelyIonizable)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2186 $Value = $This->IsNegativelyIonizable();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2187 last TYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2188 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2189 if ($Type =~ /^(H|Hydrophobic)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2190 $Value = $This->IsHydrophobic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2191 last TYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2192 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2193 if ($Type =~ /^(Ar|Aromatic)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2194 $Value = $This->IsAromatic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2195 last TYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2196 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2197 if ($Type =~ /^(Hal|Halogen)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2198 $Value = $This->IsHalogen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2199 last TYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2200 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2201 if ($Type =~ /^(RA|RingAtom)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2202 $Value = $This->IsInRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2203 last TYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2204 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2205 if ($Type =~ /^(CA|ChainAtom)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2206 $Value = $This->IsNotInRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2207 last TYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2208 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2209 $Value = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2210 carp "Warning: ${ClassName}->_IsType: Unknown functional/pharmacohore type $Type...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2211 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2212 return $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2213 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2214
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2215 # Is it a Hydrogen atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2216 sub IsHydrogen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2217 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2218
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2219 return ($This->{AtomicNumber} == 1) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2220 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2221
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2222 # Is it a Carbon atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2223 sub IsCarbon {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2224 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2225
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2226 return ($This->{AtomicNumber} == 6) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2227 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2228
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2229 # Is it a Nitrogen atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2230 sub IsNitrogen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2231 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2232
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2233 return ($This->{AtomicNumber} == 7) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2234 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2235
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2236 # Is it a Oxygen atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2237 sub IsOxygen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2238 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2239
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2240 return ($This->{AtomicNumber} == 8) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2241 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2242
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2243 # Is it a Fluorine atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2244 sub IsFluorine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2245 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2246
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2247 return ($This->{AtomicNumber} == 9) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2248 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2249
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2250 # Is it a Silicon atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2251 sub IsSilicon {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2252 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2253
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2254 return ($This->{AtomicNumber} == 14) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2255 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2256
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2257 # Is it a Phosphorus atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2258 sub IsPhosphorus {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2259 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2260
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2261 return ($This->{AtomicNumber} == 15) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2262 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2263
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2264 # Is it a Sulphur atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2265 sub IsSulphur {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2266 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2267
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2268 return $This->IsSulfur();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2269 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2270
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2271 # Is it a Sulfur atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2272 sub IsSulfur {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2273 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2274
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2275 return ($This->{AtomicNumber} == 16) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2276 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2277
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2278 # Is it a Chlorine atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2279 sub IsChlorine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2280 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2281
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2282 return ($This->{AtomicNumber} == 17) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2283 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2284
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2285 # Is it a Arsenic atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2286 sub IsArsenic {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2287 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2288
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2289 return ($This->{AtomicNumber} == 33) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2290 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2291
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2292 # Is it a Selenium atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2293 sub IsSelenium {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2294 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2295
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2296 return ($This->{AtomicNumber} == 34) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2297 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2298
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2299 # Is it a Bromine atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2300 sub IsBromine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2301 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2302
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2303 return ($This->{AtomicNumber} == 35) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2304 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2305
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2306 # Is it a Tellurium atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2307 sub IsTellurium {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2308 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2309
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2310 return ($This->{AtomicNumber} == 52) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2311 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2312
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2313 # Is it a Iodine atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2314 sub IsIodine {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2315 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2316
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2317 return ($This->{AtomicNumber} == 53) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2318 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2319
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2320 # Is it a hetro atom? (N, O, F, P, S, Cl, Br, I)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2321 sub IsHeteroAtom {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2322 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2323
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2324 return ($This->{AtomicNumber} =~ /^(7|8|9|15|16|17|35|53)$/) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2325 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2326
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2327 # Is it a halogen atom? (F, Cl, Br, I)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2328 sub IsHalogen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2329 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2330
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2331 return ($This->{AtomicNumber} =~ /^(9|17|35|53)$/) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2332 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2333
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2334 # Is it classified as metallic?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2335 sub IsMetallic {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2336 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2337 my($Classification);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2338
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2339 $Classification = PeriodicTable::GetElementClassification($This->{AtomicNumber});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2340
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2341 return ($Classification =~ /^Metallic$/i) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2342 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2343
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2344 # Is it a non carbon or hydrogen atom? (C, H)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2345 sub IsNonCarbonOrHydrogen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2346 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2347
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2348 return ($This->{AtomicNumber} =~ /^(1|6)$/) ? 0 : 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2349 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2350
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2351 # Is it a polar atom? ( N, O, P, S)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2352 sub IsPolarAtom {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2353 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2354
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2355 return ($This->{AtomicNumber} =~ /^(7|8|15|16)$/) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2356 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2357
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2358 # Is it an isotope?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2359 sub IsIsotope {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2360 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2361
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2362 my($AtomicNumber) = $This->{AtomicNumber};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2363 if (!$AtomicNumber) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2364 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2365 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2366
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2367 if (!$This->HasProperty('MassNumber')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2368 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2369 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2370 my($MassNumber, $MostAbundantMassNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2371
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2372 $MassNumber = $This->GetProperty('MassNumber');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2373 $MostAbundantMassNumber = PeriodicTable::GetElementMostAbundantNaturalIsotopeMassNumber($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2374
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2375 return ($MassNumber == $MostAbundantMassNumber) ? 0 : 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2376 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2377
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2378 # Is it a terminal atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2379 sub IsTerminal {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2380 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2381
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2382 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2383 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2384 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2385 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2386
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2387 return ($This->GetNumOfNonHydrogenAtomNeighbors() <= 1) ? 1 : 0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2388
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2389 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2390
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2391 # Is aromatic property set for the atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2392 sub IsAromatic {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2393 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2394 my($Aromatic);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2395
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2396 $Aromatic = $This->GetAromatic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2397
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2398 return (defined($Aromatic) && $Aromatic) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2399 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2400
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2401 # Is this a hydrogen atom and attached to one of these atoms: N, O, P, S
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2402 sub IsPolarHydrogen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2403 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2404
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2405 if (!$This->IsHydrogen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2406 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2407 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2408
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2409 my(@Bonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2410 @Bonds = $This->GetBonds();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2411 if (@Bonds > 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2412 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2413 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2414
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2415 my($Bond, $BondedAtom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2416 ($Bond) = @Bonds;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2417 $BondedAtom = $Bond->GetBondedAtom($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2418
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2419 return $BondedAtom->IsPolarAtom() ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2420 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2421
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2422 # Is it a hydrogen bond donor atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2423 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2424 sub IsHBondDonor {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2425 my($This, $HydrogenBondsType) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2426
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2427 return $This->IsHydrogenBondDonor($HydrogenBondsType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2428 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2429
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2430 # The currrent release of MayaChemTools supports identification of two types of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2431 # hydrogen bond donor and acceptor atoms with these names:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2432 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2433 # HBondsType1 or HydrogenBondsType1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2434 # HBondsType2 or HydrogenBondsType2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2435 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2436 # The names of these hydrogen bond types are rather arbitrary. However, their
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2437 # definitions have specific meaning and are as follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2438 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2439 # HydrogenBondsType1 [ Ref 60-61, Ref 65-66 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2440 # . Donor: NH, NH2, NH3, OH - Any N and O with available H
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2441 # . Acceptor: N[!H], O - Any N without available H and any O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2442 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2443 # HydrogenBondsType2 [ Ref 91 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2444 # . Donor: NH, NH2, NH3, OH - Any N and O with availabe H
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2445 # . Acceptor: N, O - Any N and O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2446 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2447 # Note:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2448 # . HydrogenBondsType2 definition corresponds to Rule of 5.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2449 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2450
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2451 # Is it a hydrogen bond donor atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2452 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2453 # The currrent release of MayaChemTools supports identification of two types of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2454 sub IsHydrogenBondDonor {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2455 my($This, $HydrogenBondsType) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2456 my($Status);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2457
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2458 $HydrogenBondsType = defined $HydrogenBondsType ? $HydrogenBondsType : 'HBondsType1';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2459 $Status = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2460
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2461 HYDROGENBONDSTYPE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2462
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2463 if ($HydrogenBondsType =~ /^(HBondsType1|HydrogenBondsType1)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2464 $Status = $This->_IsHydrogenBondDonorOfType1();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2465 last HYDROGENBONDSTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2466 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2467
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2468 if ($HydrogenBondsType =~ /^(HBondsType2|HydrogenBondsType2)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2469 $Status = $This->_IsHydrogenBondDonorOfType2();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2470 last HYDROGENBONDSTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2471 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2472
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2473 $Status = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2474 carp "Warning: ${ClassName}->IsHydrogenBondDonor: The current release of MayaChemTools doesn't support specified value, $HydrogenBondsType, for HydrogenBondsType. Valid values: HBondsType1, HydrogenBondsType1, HBondsType2 HydrogenBondsType2 ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2475 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2476
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2477 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2478 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2479
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2480 # Is it a MayaChemTools HBondType1 hydrogen bond donor atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2481 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2482 sub _IsHydrogenBondDonorOfType1 {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2483 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2484
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2485 return $This->_IsHydrogenBondDonorOfType1OrType2();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2486 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2487
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2488 # Is it a MayaChemTools HBondType2 hydrogen bond donor atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2489 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2490 sub _IsHydrogenBondDonorOfType2 {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2491 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2492
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2493 return $This->_IsHydrogenBondDonorOfType1OrType2();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2494 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2495
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2496 # Is it a hydrogen bond donor atom of MayaChemTools Type1 or Type2?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2497 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2498 # HydrogenBondDonor definition [ Ref 60-61, Ref 65-66, Ref 91 ]: NH, NH2, OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2499 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2500 # In other words:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2501 # . NH, NH2 - Nitrogen atom with available hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2502 # . OH - Oxygen atom with avilable hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2503 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2504 sub _IsHydrogenBondDonorOfType1OrType2 {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2505 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2506
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2507 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2508 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2509 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2510 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2511
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2512 # Is it N or O?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2513 if ($This->{AtomicNumber} !~ /^(7|8)$/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2514 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2515 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2516
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2517 # Any explicitly attached hydrogens?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2518 if ($This->GetExplicitHydrogens()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2519 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2520 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2521
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2522 # Any missing hydrogens?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2523 return $This->GetNumOfMissingHydrogens() ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2524 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2525
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2526 # Is it a hydrogen bond acceptor atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2527 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2528 sub IsHBondAcceptor {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2529 my($This, $HydrogenBondsType) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2530
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2531 return $This->IsHydrogenBondAcceptor($HydrogenBondsType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2532 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2533
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2534 # Is it a hydrogen bond acceptor atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2535 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2536 sub IsHydrogenBondAcceptor {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2537 my($This, $HydrogenBondsType) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2538 my($Status);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2539
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2540 $HydrogenBondsType = defined $HydrogenBondsType ? $HydrogenBondsType : 'HBondsType1';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2541 $Status = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2542
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2543 HYDROGENBONDSTYPE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2544
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2545 if ($HydrogenBondsType =~ /^(HBondsType1|HydrogenBondsType1)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2546 $Status = $This->_IsHydrogenBondAcceptorOfType1();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2547 last HYDROGENBONDSTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2548 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2549
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2550 if ($HydrogenBondsType =~ /^(HBondsType2|HydrogenBondsType2)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2551 $Status = $This->_IsHydrogenBondAcceptorOfType2();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2552 last HYDROGENBONDSTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2553 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2554
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2555 $Status = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2556 carp "Warning: ${ClassName}->IsHydrogenBondAcceptor: The current release of MayaChemTools doesn't support specified value, $HydrogenBondsType, for HydrogenBondsType. Valid values: HBondsType1, HydrogenBondsType1, HBondsType2 HydrogenBondsType2 ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2557 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2558
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2559 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2560 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2561
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2562 # Is it a MayaChemTools HBondType1 hydrogen bond acceptor atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2563 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2564 # HydrogenBondAcceptor definition [ Ref 60-61, Ref 65-66 ]: N[!H], O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2565 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2566 # In other words:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2567 # . N[!H] - Nitrogen atom with no hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2568 # . O - Oxygen atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2569 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2570 sub _IsHydrogenBondAcceptorOfType1 {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2571 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2572
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2573 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2574 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2575 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2576 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2577
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2578 # Is it N or O?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2579 if ($This->{AtomicNumber} !~ /^(7|8)$/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2580 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2581 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2582
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2583 # Is it O?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2584 if ($This->{AtomicNumber} == 8 ) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2585 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2586 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2587
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2588 # Any explicitly attached hydrogens?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2589 if ($This->GetExplicitHydrogens()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2590 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2591 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2592
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2593 # Any missing hydrogens?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2594 return $This->GetNumOfMissingHydrogens() ? 0 : 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2595 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2596
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2597 # Is it a MayaChemTools HBondType2 hydrogen bond acceptor atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2598 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2599 # HydrogenBondAcceptor definition [ Ref 91 ]: N, O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2600 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2601 # In other words:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2602 # . Any Nitrogen or Oxygen atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2603 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2604 # Note:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2605 # . HydrogenBondsType2 definition corresponds to Rule of 5.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2606 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2607 sub _IsHydrogenBondAcceptorOfType2 {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2608 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2609
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2610 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2611 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2612 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2613 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2614
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2615 return ($This->{AtomicNumber} =~ /^(7|8)$/) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2616 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2617
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2618 # Is it a positively ionizable atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2619 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2620 # PositivelyIonizable defintion [ Ref 60-61, Ref 65-66 ]: +, NH2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2621 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2622 # In other words:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2623 # . Any atom with positve formal charge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2624 # . NH2 - Nitogen atom in amino group
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2625 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2626 sub IsPositivelyIonizable {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2627 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2628 my($FormalCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2629
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2630 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2631 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2632 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2633 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2634
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2635 # Any explicit positive formal charge?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2636 $FormalCharge = $This->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2637 if (defined($FormalCharge) && $FormalCharge > 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2638 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2639 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2640
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2641 # Is it N?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2642 if ($This->{AtomicNumber} != 7 ) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2643 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2644 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2645
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2646 return ($This->GetNumOfHydrogens() == 2) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2647 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2648
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2649 # Is it a negatively ionizable atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2650 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2651 # NegativelyIonizable definition [ Ref 60-61, Ref 65-66 ]: -, C(=O)OH, S(=O)OH, P(=O)OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2652 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2653 # In other words:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2654 # . Any atom with negative formal charge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2655 # . Carbon atom in C(=O)OH group
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2656 # . Phosphorous in P(=O)OH group
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2657 # . Sulfur atom in S(=O)OH group
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2658 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2659 sub IsNegativelyIonizable {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2660 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2661 my($FormalCharge);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2662
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2663 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2664 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2665 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2666 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2667
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2668 # Any explicit negative formal charge?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2669 $FormalCharge = $This->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2670 if (defined($FormalCharge) && $FormalCharge < 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2671 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2672 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2673
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2674 # Is it C, P or S?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2675 if ($This->{AtomicNumber} !~ /^(6|15|16)$/ ) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2676 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2677 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2678
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2679 # Collect oxygens connected to C, P or S with single or double bonds and not connected to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2680 # any other heavy atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2681 my($Neighbor, $NeighborOxygenBondOrder, $NumOfNeighborOxygensWithSingleBonds, $NumOfNeighborOxygensWithDoubleBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2682
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2683 $NumOfNeighborOxygensWithSingleBonds = 0; $NumOfNeighborOxygensWithDoubleBonds = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2684
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2685 NEIGHBOR: for $Neighbor ($This->GetNeighbors()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2686 # Is it an oxygen?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2687 if ($Neighbor->{AtomicNumber} != 8) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2688 next NEIGHBOR;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2689 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2690 # Is oxygent connected to only heavy atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2691 if ($Neighbor->GetNumOfHeavyAtomNeighbors() != 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2692 next NEIGHBOR;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2693 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2694 $NeighborOxygenBondOrder = $This->GetBondToAtom($Neighbor)->GetBondOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2695
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2696 if ($NeighborOxygenBondOrder == 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2697 $NumOfNeighborOxygensWithDoubleBonds++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2698 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2699 elsif ($NeighborOxygenBondOrder == 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2700 $NumOfNeighborOxygensWithSingleBonds++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2701 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2702 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2703 return ($NumOfNeighborOxygensWithDoubleBonds >= 1 && $NumOfNeighborOxygensWithSingleBonds >= 1) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2704 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2705
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2706 # Is it a liphophilic atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2707 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2708 # Lipophilic definition [ Ref 60-61, Ref 65-66 ]: C(C)(C)(C)(C), Cl, Br, I, S(C)(C)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2709 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2710 # In other words:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2711 # . C(C)(C)(C)(C) - Carbon atom connected to only other carbons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2712 # . Chlorine, Bromine or Iodine atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2713 # . S(C)(C) - Sulfur connected to two carbons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2714 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2715 sub IsLipophilic {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2716 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2717
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2718 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2719 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2720 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2721 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2722
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2723 # Is it Cl, Br, I?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2724 if ($This->{AtomicNumber} =~ /^(17|35|53)$/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2725 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2726 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2727
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2728 # Is it C, S?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2729 if ($This->{AtomicNumber} !~ /^(6|16)$/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2730 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2731 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2732
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2733 # Are all heavy atom neighbors Carbons?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2734 my($HeavyAtomNeighbor, @HeavyAtomNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2735 @HeavyAtomNeighbors = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2736 @HeavyAtomNeighbors = $This->GetHeavyAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2737
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2738 for $HeavyAtomNeighbor (@HeavyAtomNeighbors) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2739 if ($HeavyAtomNeighbor->{AtomicNumber} != 6) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2740 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2741 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2742 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2743
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2744 # Does sulfur has two carbon neighbors?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2745 if ($This->{AtomicNumber} == 16) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2746 if (@HeavyAtomNeighbors != 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2747 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2748 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2749 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2750 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2751 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2752
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2753 # Is it hydrophobic?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2754 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2755 sub IsHydrophobic {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2756 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2757
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2758 return $This->IsLipophilic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2759 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2760
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2761 # Is it a Nitrogen atom in Guadinium group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2762 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2763 sub IsGuadiniumNitrogen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2764 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2765
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2766 # Is it Nitrogen?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2767 if (!$This->IsNitrogen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2768 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2769 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2770
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2771 # Is it connected to a Guadinium Carbon?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2772 my($AtomNeighbor);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2773
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2774 for $AtomNeighbor ($This->GetNonHydrogenAtomNeighbors()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2775 if ($AtomNeighbor->IsGuadiniumCarbon()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2776 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2777 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2778 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2779
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2780 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2781 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2782
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2783 # Is it a Carbon atom in Guadinium group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2784 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2785 # Guadinium group definition:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2786 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2787 # R2N-C(=NR)-(NR2) or R2N-C(=NR2+)-(NR2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2788 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2789 # where:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2790 # . R = Hydrogens or group of atoms attached through Carbon
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2791 # . Only one of the three Nitrogens has a double bond to Carbon and has optional
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2792 # formal charge allowing it to be neutral or charged state
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2793 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2794 sub IsGuadiniumCarbon {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2795 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2796
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2797 # Is it Carbon?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2798 if (!$This->IsCarbon()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2799 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2800 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2801
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2802 # Match atom neighborhood...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2803 my($CentralAtomSpec, @NbrAtomSpecsRef, @NbrBondSpecsRef, @NbrOfNbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2804
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2805 $CentralAtomSpec = 'C.X3.BO4';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2806 @NbrAtomSpecsRef = ('N.FC0', 'N.FC0', 'N.FC0,N.FC+1');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2807 @NbrBondSpecsRef = ('-', '-', '=');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2808 @NbrOfNbrAtomSpecsRef = ('C,H', 'C,H', 'C,H');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2809
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2810 if ($This->DoesAtomNeighborhoodMatch($CentralAtomSpec, \@NbrAtomSpecsRef, \@NbrBondSpecsRef, \@NbrOfNbrAtomSpecsRef)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2811 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2812 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2813
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2814 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2815 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2816
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2817 # Is it a Nitrogen atom in Amide group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2818 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2819 sub IsAmideNitrogen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2820 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2821
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2822 # Is it Nitrogen?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2823 if (!$This->IsNitrogen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2824 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2825 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2826
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2827 # Is it connected to a Amide Carbon?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2828 my($AtomNeighbor);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2829
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2830 for $AtomNeighbor ($This->GetNonHydrogenAtomNeighbors()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2831 if ($AtomNeighbor->IsAmideCarbon()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2832 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2833 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2834 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2835
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2836 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2837 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2838
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2839 # Is it a Carbon atom in Amide group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2840 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2841 # Amide group definition: R-C(=O)-N(-R')-R''
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2842 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2843 # where:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2844 # . R = Hydrogen or groups of atoms attached through Carbon
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2845 # . R' = Hydrogens or groups of atoms attached through Carbon or hetro atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2846 # . R'' = Hydrogens or groups of atoms attached through Carbon or hetro atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2847 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2848 sub IsAmideCarbon {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2849 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2850
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2851 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2852 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2853 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2854 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2855
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2856 # Is it Carbon?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2857 if (!$This->IsCarbon()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2858 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2859 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2860
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2861 # Match atom neighborhood...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2862 my($CentralAtomSpec, @NbrAtomSpecsRef, @NbrBondSpecsRef, @NbrOfNbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2863
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2864 $CentralAtomSpec = 'C.X3.BO4,C.X2.BO3';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2865 @NbrAtomSpecsRef = ('C,H', 'O', 'N');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2866 @NbrBondSpecsRef = ('-', '=', '-');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2867 @NbrOfNbrAtomSpecsRef = ('C,H', 'C', 'C,H,N,O,S,P,F,Cl,Br,I');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2868
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2869 if ($This->DoesAtomNeighborhoodMatch($CentralAtomSpec, \@NbrAtomSpecsRef, \@NbrBondSpecsRef, \@NbrOfNbrAtomSpecsRef)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2870 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2871 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2872
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2873 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2874 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2875
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2876 # Is it a Oxygen atom in Carboxylate group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2877 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2878 sub IsCarboxylateOxygen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2879 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2880
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2881 return $This->_MatchCarboxylateAndOrCarboxylOxygen('Carboxylate');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2882 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2883
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2884 # Is it a Carbon atom in Carboxylate group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2885 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2886 # Carboxyl group definition: R-C(=O)-O-
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2887 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2888 sub IsCarboxylateCarbon {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2889 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2890
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2891 return $This->_MatchCarboxylateAndOrCarboxylCarbon('Carboxylate');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2892 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2893
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2894 # Is it a Oxygen atom in Carboxyl group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2895 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2896 sub IsCarboxylOxygen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2897 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2898
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2899 return $This->_MatchCarboxylateAndOrCarboxylOxygen('Carboxyl');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2900 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2901
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2902 # Is it a Carbon atom in Carboxyl group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2903 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2904 # Carboxyl group definition: R-C(=O)-OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2905 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2906 sub IsCarboxylCarbon {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2907 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2908
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2909 return $This->_MatchCarboxylateAndOrCarboxylCarbon('Carboxyl');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2910 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2911
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2912 # Match Carboxylate and/or Carboxyl oxygen...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2913 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2914 sub _MatchCarboxylateAndOrCarboxylOxygen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2915 my($This, $Mode) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2916
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2917 # Is it Oxygen?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2918 if (!$This->IsOxygen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2919 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2920 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2921
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2922 # Is it connected to a Carboxylate Carbon?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2923 my($AtomNeighbor);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2924
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2925 for $AtomNeighbor ($This->GetNonHydrogenAtomNeighbors()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2926 if ($AtomNeighbor->_MatchCarboxylateAndOrCarboxylCarbon($Mode)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2927 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2928 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2929 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2930
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2931 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2932 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2933
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2934 # Match Carboxylate and Carboxyl Carbon
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2935 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2936 # Carboxylate group definition: R-C(=O)-O-
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2937 # Carboxyl group definition: R-C(=O)-OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2938 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2939 # where:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2940 # . R = Hydrogens or groups of atoms attached through Carbon
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2941 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2942 sub _MatchCarboxylateAndOrCarboxylCarbon {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2943 my($This, $Mode) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2944
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2945 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2946 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2947 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2948 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2949
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2950 # Is it Carbon?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2951 if (!$This->IsCarbon()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2952 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2953 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2954
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2955 # Match atom neighborhood...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2956 my($CentralAtomSpec, @NbrAtomSpecsRef, @NbrBondSpecsRef, @NbrOfNbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2957
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2958 $CentralAtomSpec = 'C.X3.BO4,C.X2.BO3';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2959 MODE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2960 if ($Mode =~ /^Carboxylate$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2961 @NbrAtomSpecsRef = ('C,H', 'O', 'O.X1.FC-1');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2962 last MODE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2963 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2964 if ($Mode =~ /^Carboxyl$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2965 @NbrAtomSpecsRef = ('C,H', 'O', 'O.X1.FC0');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2966 last MODE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2967 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2968 if ($Mode =~ /^CarboxylateOrCarboxyl$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2969 @NbrAtomSpecsRef = ('C,H', 'O', 'O.X1.FC-1,O.X1.FC0');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2970 last MODE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2971 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2972 carp "Warning: ${ClassName}->_MatchCarboxylateAndCarboxylCarbon.: Unknown mode $Mode...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2973 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2974 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2975 @NbrBondSpecsRef = ('-', '=', '-');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2976 @NbrOfNbrAtomSpecsRef = ('C,H', 'C', 'C');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2977
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2978 if ($This->DoesAtomNeighborhoodMatch($CentralAtomSpec, \@NbrAtomSpecsRef, \@NbrBondSpecsRef, \@NbrOfNbrAtomSpecsRef)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2979 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2980 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2981
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2982 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2983 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2984
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2985 # Is it a Oxygen atom in Phosphate group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2986 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2987 sub IsPhosphateOxygen {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2988 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2989
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2990 # Is it Oxygen?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2991 if (!$This->IsOxygen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2992 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2993 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2994
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2995 # Is it connected to a Phosphate Phosphorus?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2996 my($AtomNeighbor);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2997
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2998 for $AtomNeighbor ($This->GetNonHydrogenAtomNeighbors()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2999 if ($AtomNeighbor->IsPhosphatePhosphorus()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3000 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3001 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3002 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3003
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3004 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3005 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3006
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3007 # Is it a Phosphorus atom in Phosphate group?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3008 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3009 # Phosphate group definition: AO-(O=)P(-OA)-OA
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3010 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3011 # where:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3012 # . A = Any Groups of atoms including hydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3013 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3014 sub IsPhosphatePhosphorus {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3015 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3016
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3017 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3018 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3019 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3020 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3021
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3022 # Is it Phosphorus?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3023 if (!$This->IsPhosphorus()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3024 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3025 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3026
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3027 # Match atom neighborhood...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3028 my($CentralAtomSpec, @NbrAtomSpecsRef, @NbrBondSpecsRef, @NbrOfNbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3029
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3030 $CentralAtomSpec = 'P.X4.BO5';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3031 @NbrAtomSpecsRef = ('O', 'O', 'O', 'O');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3032 @NbrBondSpecsRef = ('-', '=', '-', '-');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3033 @NbrOfNbrAtomSpecsRef = (undef, undef, undef, undef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3034
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3035 if ($This->DoesAtomNeighborhoodMatch($CentralAtomSpec, \@NbrAtomSpecsRef, \@NbrBondSpecsRef, \@NbrOfNbrAtomSpecsRef)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3036 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3037 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3038
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3039 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3040 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3041
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3042
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3043 # Match central atom and its neighborhood using specified atom and bonds specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3044 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3045 # Let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3046 # AS = Atom symbol corresponding to element symbol, atomic number (#n) or any
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3047 # atom (A)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3048 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3049 # X<n> = Number of non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3050 # T<n> = Total number of atom neighbors including implcit and explicit hydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3051 # BO<n> = Sum of bond orders to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3052 # LBO<n> = Largest bond order of non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3053 # SB<n> = Number of single bonds to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3054 # TSB<n> = Total number of single bonds to atom neighbors including implcit and explicit hydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3055 # DB<n> = Number of double bonds to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3056 # TB<n> = Number of triple bonds to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3057 # H<n> = Number of implicit and explicit hydrogens for atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3058 # Ar = Aromatic annotation indicating whether atom is aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3059 # RA or RA<n> = Ring atom annotation indicating whether atom is a ring
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3060 # TR<n> = Total number of rings containing atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3061 # FC<+n/-n> = Formal charge assigned to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3062 # MN<n> = Mass number indicating isotope other than most abundant isotope
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3063 # SM<n> = Spin multiplicity of atom. Possible values: 1 (singlet), 2 (doublet) or 3 (triplet)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3064 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3065 # Then:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3066 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3067 # Atom specification corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3068 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3069 # AS.X<n>.T<n>.BO<n>.LBO<n>.<SB><n>.TSB<n>.<DB><n>.<TB><n>.H<n>.Ar.RA<n>.TR<n>FC<+n/-n>.MN<n>.SM<n>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3070 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3071 # Except for AS which is a required atomic invariant in atom specification, all other atomic invariants are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3072 # optional. For an atom specification to match an atom, the values of all specified atomic invariants must
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3073 # match. Exclamation in from of atomic invariant can be used to negate its effect during the match.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3074 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3075 # A comma delimited atom specification string is used to match any one of the specifed atom specification.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3076 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3077 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3078 # . During atom specification match to an atom, the first atomic invariant is always assumed to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3079 # atom symbol.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3080 # . Atom match specfication is based on AtomicInvariantAtomTypes implemented in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3081 # AotmTypes::AtomicInvariantAtomType.pm module
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3082 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3083 # Examples:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3084 # . ('N', 'N', 'N')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3085 # . ('N.FC0', 'N.FC0', 'N,N.FC+1.H1')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3086 # . ('N.H2', 'N.H2', 'N.H1')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3087 # . ('C,N', '!N', '!H')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3088 # . ('C,N', 'N.Ar', 'N.R5')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3089 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3090 # Let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3091 # -|1|s|Single = Single bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3092 # =|2|d|Double = Double bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3093 # #|3|t|Triple = Triple bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3094 # :|1.5|a|Ar|Aromatic = Aromatic bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3095 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3096 # @|RB|Ring = Ring bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3097 # ~|*|Any = Any bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3098 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3099 # Then:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3100 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3101 # Bond specification corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3102 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3103 # -.:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3104 # =.@
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3105 # Double.Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3106 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3107 # For a bond specification to match bond between two atoms, the values of all specified bond symbols must
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3108 # match. Exclamation in from of bond symbol can be used to negate its effect during the match.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3109 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3110 # A comma delimited bond specification string is used to match any one of the specifed atom specification.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3111 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3112 sub DoesAtomNeighborhoodMatch {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3113 my($CentralAtom, $CentralAtomSpec, $NbrAtomSpecsRef, $NbrBondSpecsRef, $NbrOfNbrAtomSpecsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3114 my($NumOfNbrAtomSpecs, $NumOfNbrBondSpecs, $NumOfNbrOfNbrAtomSpecs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3115
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3116 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3117 if (!$CentralAtom->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3118 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3119 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3120
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3121 $NumOfNbrAtomSpecs = defined $NbrAtomSpecsRef ? scalar @{$NbrAtomSpecsRef} : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3122 $NumOfNbrBondSpecs = defined $NbrBondSpecsRef ? scalar @{$NbrBondSpecsRef} : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3123 $NumOfNbrOfNbrAtomSpecs = defined $NbrOfNbrAtomSpecsRef ? scalar @{$NbrOfNbrAtomSpecsRef} : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3124
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3125 # Validate number of specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3126 if ($NumOfNbrBondSpecs && ($NumOfNbrAtomSpecs != $NumOfNbrBondSpecs)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3127 carp "Warning: ${ClassName}->DoesAtomNeighborhoodMatch: Number of specified central atom, $NumOfNbrAtomSpecs, and bond, $NumOfNbrBondSpecs, specifications must be same; No neighborhood match performed ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3128 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3129 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3130
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3131 if ($NumOfNbrOfNbrAtomSpecs && ($NumOfNbrOfNbrAtomSpecs != $NumOfNbrAtomSpecs)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3132 carp "Warning: ${ClassName}->DoesAtomNeighborhoodMatch: Number of specified central atom, $NumOfNbrAtomSpecs, and neighbor of neighbor atoms specifications, $NumOfNbrOfNbrAtomSpecs, must be same; No neighborhood match performed ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3133 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3134 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3135
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3136 # Sort atom and bond specifications in terms of being most specific to least specific..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3137 ($NbrAtomSpecsRef, $NbrBondSpecsRef, $NbrOfNbrAtomSpecsRef) = $CentralAtom->_SortSpecificationsForAtomNeighborhoodMatch($NbrAtomSpecsRef, $NbrBondSpecsRef, $NbrOfNbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3138
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3139 # Does central atom specification match?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3140 if (!$CentralAtom->_DoesAtomSpecificationMatch($CentralAtomSpec)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3141 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3142 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3143
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3144 # No neighbors to match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3145 if (!$NumOfNbrAtomSpecs) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3146 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3147 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3148
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3149 # Match neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3150 my($NbrSpecsMatched, $NbrSpecCount, $NbrSpecMatchCount, %NbrSpecAlreadyMatchedMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3151
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3152 $NbrSpecCount = $NumOfNbrAtomSpecs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3153 $NbrSpecMatchCount = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3154
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3155 %NbrSpecAlreadyMatchedMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3156 ($NbrSpecsMatched, $NbrSpecMatchCount) = $CentralAtom->_MatchAtomNeighborhoodUsingAtomBondSpecs($NbrSpecCount, $NbrSpecMatchCount, \%NbrSpecAlreadyMatchedMap, $NbrAtomSpecsRef, $NbrBondSpecsRef, $NbrOfNbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3157
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3158 if ($NbrSpecsMatched) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3159 # It's match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3160 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3161 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3162
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3163 # Match central atom's missing hydrogens with any unmatched atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3164 # and bond specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3165 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3166 ($NbrSpecsMatched, $NbrSpecMatchCount) = $CentralAtom->_MatchAtomNeighborhoodUsingMissingHydrogens($NbrSpecCount, $NbrSpecMatchCount, \%NbrSpecAlreadyMatchedMap, $NbrAtomSpecsRef, $NbrBondSpecsRef, $NbrOfNbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3167
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3168 if ($NbrSpecsMatched) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3169 # It's match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3170 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3171 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3172
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3173 # No match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3174 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3175 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3176
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3177 # Match central atom neighborhood atom and bond specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3178 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3179 sub _MatchAtomNeighborhoodUsingAtomBondSpecs {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3180 my($CentralAtom, $NbrSpecCount, $NbrSpecMatchCount, $NbrSpecAlreadyMatchedRef, $NbrAtomSpecsRef, $NbrBondSpecsRef, $NbrOfNbrAtomSpecsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3181 my($Index, $NbrAtom, $NbrAtomSpec, $NbrBondSpec, $NbrOfNbrAtom, $NbrOfNbrAtomSpec, $MatchNbrOfNbrAtomSpecs, $NbrSpecsMatched);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3182
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3183 $MatchNbrOfNbrAtomSpecs = (defined $NbrOfNbrAtomSpecsRef && scalar @{$NbrOfNbrAtomSpecsRef}) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3184
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3185 $NbrSpecsMatched = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3186
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3187 # Match central atom's immediate neighbors atom and bond specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3188 NBRATOM: for $NbrAtom ($CentralAtom->GetNeighbors()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3189 NBRATOMSPEC: for $Index (0 .. ($NbrSpecCount - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3190 if (exists $NbrSpecAlreadyMatchedRef->{$Index}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3191 next NBRATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3192 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3193 $NbrAtomSpec = $NbrAtomSpecsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3194 $NbrBondSpec = $NbrBondSpecsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3195
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3196 $NbrOfNbrAtomSpec = $MatchNbrOfNbrAtomSpecs ? $NbrOfNbrAtomSpecsRef->[$Index] : undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3197
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3198 # Match neighbor atom specification...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3199 if (!$NbrAtom->_DoesAtomSpecificationMatch($NbrAtomSpec)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3200 next NBRATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3201 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3202
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3203 # Match central atom to neighbor atom bond specification...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3204 if (!$CentralAtom->_DoesBondSpecificationMatch($NbrAtom, $NbrBondSpec)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3205 next NBRATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3206 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3207
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3208 # Match any neighbor of neighbor atom specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3209 if (defined $NbrOfNbrAtomSpec) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3210 # Go over the neighbors of central atom skipping the central atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3211 for $NbrOfNbrAtom ($NbrAtom->GetNeighbors($CentralAtom)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3212 if (!$NbrOfNbrAtom->_DoesAtomSpecificationMatch($NbrOfNbrAtomSpec)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3213 next NBRATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3214 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3215 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3216 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3217
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3218 # It's a match for a neighbor atom specification...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3219 $NbrSpecAlreadyMatchedRef->{$Index} = $Index;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3220 $NbrSpecMatchCount++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3221
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3222 if ($NbrSpecMatchCount == $NbrSpecCount) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3223 # It's match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3224 $NbrSpecsMatched = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3225 last NBRATOM;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3226 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3227 # Match next neighbor atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3228 next NBRATOM;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3229 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3230 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3231 return ($NbrSpecsMatched, $NbrSpecMatchCount);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3232 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3233
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3234 # Match central atom's missing hydrogens with any unmatched atom and bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3235 # specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3236 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3237 sub _MatchAtomNeighborhoodUsingMissingHydrogens {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3238 my($CentralAtom, $NbrSpecCount, $NbrSpecMatchCount, $NbrSpecAlreadyMatchedRef, $NbrAtomSpecsRef, $NbrBondSpecsRef, $NbrOfNbrAtomSpecsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3239 my($Index, $NbrAtom, $NbrAtomSpec, $NbrBondSpec, $NumOfMissingHydrogens, $MissingHydrogensIndex, $NbrSpecsMatched, $AtomSpecMatched, $AtomSpec, $AtomSymbol);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3240
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3241 $NbrSpecsMatched = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3242
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3243 $NumOfMissingHydrogens = $CentralAtom->GetNumOfMissingHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3244 if (($NbrSpecCount - $NbrSpecMatchCount) > $NumOfMissingHydrogens) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3245 # It won't match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3246 return ($NbrSpecsMatched, $NbrSpecMatchCount);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3247 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3248
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3249 MISSINGHYDROGENNBR: for $MissingHydrogensIndex (0 .. ($NumOfMissingHydrogens - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3250 NBRATOMSPEC: for $Index (0 .. ($NbrSpecCount - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3251 if (exists $NbrSpecAlreadyMatchedRef->{$Index}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3252 next NBRATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3253 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3254 $NbrAtomSpec = $NbrAtomSpecsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3255 $NbrBondSpec = $NbrBondSpecsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3256
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3257 $NbrAtomSpec =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3258
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3259 # Match neighbor atom specification hydrogen atom symbol...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3260 $AtomSpecMatched = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3261 ATOMSPEC: for $AtomSpec (split /\,/, $NbrAtomSpec) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3262 ($AtomSymbol) = split /\./, $AtomSpec;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3263 if ($AtomSymbol =~ /^(H|A|\*)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3264 $AtomSpecMatched = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3265 last ATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3266 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3267 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3268 if (!$AtomSpecMatched) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3269 next NBRATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3270 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3271
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3272 # Match neighbor atom bond specification to singal bond...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3273 if (defined $NbrBondSpec) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3274 $NbrBondSpec =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3275 if ($NbrBondSpec !~ /^(-|1|s|Single|\~|\*|Any)/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3276 next NBRATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3277 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3278 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3279
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3280 # It's a match for a neighbor atom specification...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3281 $NbrSpecAlreadyMatchedRef->{$Index} = $Index;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3282 $NbrSpecMatchCount++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3283
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3284 if ($NbrSpecMatchCount == $NbrSpecCount) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3285 # It's match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3286 $NbrSpecsMatched = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3287 last MISSINGHYDROGENNBR;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3288 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3289 # Match next missing hydrogen neighbor...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3290 next MISSINGHYDROGENNBR;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3291 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3292 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3293
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3294 return ($NbrSpecsMatched, $NbrSpecMatchCount);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3295 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3296
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3297 # Sort atom and bond specifications base on neighbor atom specifications going
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3298 # from most to least specific atom specifications.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3299 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3300 # Atom specifications are sorted at the following two levels:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3301 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3302 # o By atom specification count with in each specification going from most specific
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3303 # to least specific, where count is determined by the number of "," in each
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3304 # specification. Wild card containing specifications are considered least specific
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3305 # and end up at the end of the sorted list.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3306 # o By atomic invariant count with in each sorted list going from most specific to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3307 # least specific, where count is determined by the number of "." in each atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3308 # specification.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3309 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3310 #A single atom specification,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3311 # without any commas in atom specification, is is considered most specific...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3312 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3313 sub _SortSpecificationsForAtomNeighborhoodMatch {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3314 my($This, $NbrAtomSpecsRef, $NbrBondSpecsRef, $NbrOfNbrAtomSpecsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3315 my($Index, $NeedToSort, $NumOfNbrAtomSpecs, $NbrAtomSpecCount, $NbrAtomSpecAtomicInvarintCount, $NbrAtomSpecToMatch, $NbrAtomSpec, $FirstAtomicInvariant, $WildCardInNbrAtomSpec, @NbrAtomSpecs, @NbrAtomSpecAtomicInvariants, @SortedNbrAtomSpecs, @SortedNbrBondSpecs, @SortedNbrOfNbrAtomSpecs, %NbrAtomSpecDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3316
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3317 $NumOfNbrAtomSpecs = defined $NbrAtomSpecsRef ? scalar @{$NbrAtomSpecsRef} : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3318
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3319 # Figure out whether sorting is necessary...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3320 $NeedToSort = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3321 if ($NumOfNbrAtomSpecs > 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3322 ATOMSPEC: for $NbrAtomSpecToMatch (@{$NbrAtomSpecsRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3323 if ($NbrAtomSpecToMatch =~ /(,|\.|A|\*)/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3324 $NeedToSort = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3325 last ATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3326 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3327 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3328 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3329 if (!$NeedToSort) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3330 # Nothing to do...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3331 return ($NbrAtomSpecsRef, $NbrBondSpecsRef, $NbrOfNbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3332 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3333
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3334 %NbrAtomSpecDataMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3335
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3336 for $Index (0 .. ($NumOfNbrAtomSpecs - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3337 $NbrAtomSpecToMatch = $NbrAtomSpecsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3338 $NbrAtomSpecToMatch =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3339
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3340 @NbrAtomSpecs = split /\,/, $NbrAtomSpecToMatch;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3341 $NbrAtomSpecCount = scalar @NbrAtomSpecs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3342
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3343 # Does neighbor specification contains a wild card in atom symbol specification?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3344 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3345 if ($NbrAtomSpecToMatch =~ /(A|\*)/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3346 $WildCardInNbrAtomSpec = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3347 NBRATOMSPEC: for $NbrAtomSpec (@NbrAtomSpecs) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3348 ($FirstAtomicInvariant) = split /\./, $NbrAtomSpec;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3349 if ($FirstAtomicInvariant =~ /^!/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3350 $FirstAtomicInvariant =~ s/^!//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3351 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3352 $WildCardInNbrAtomSpec = $This->_IsWildCardAtomSymbolAtomicInvariant($FirstAtomicInvariant);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3353 if ($WildCardInNbrAtomSpec) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3354 last NBRATOMSPEC;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3355 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3356 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3357 if ($WildCardInNbrAtomSpec) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3358 # Set NbrAtomSpecCount arbitrarily high to make the spec containing wild
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3359 # card last on the sorted list while maintaining its original order in the list...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3360 $NbrAtomSpecCount = 999;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3361 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3362 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3363
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3364 if (!exists $NbrAtomSpecDataMap{$NbrAtomSpecCount}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3365 %{$NbrAtomSpecDataMap{$NbrAtomSpecCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3366 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3367
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3368 # Use first NbrAtomSpec available in @NbrAtomSpecs to determine atomic invariant count
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3369 # with in each NbrAtomSpecToMatch, as @NbrAtomSpecs derived from $NbrAtomSpecToMatch
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3370 # simply corresponds to a list of possible matches...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3371 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3372 ($NbrAtomSpec) = @NbrAtomSpecs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3373 @NbrAtomSpecAtomicInvariants = split /\./, $NbrAtomSpec;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3374 $NbrAtomSpecAtomicInvarintCount = scalar @NbrAtomSpecAtomicInvariants;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3375
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3376 if (!exists $NbrAtomSpecDataMap{$NbrAtomSpecCount}{$NbrAtomSpecAtomicInvarintCount}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3377 @{$NbrAtomSpecDataMap{$NbrAtomSpecCount}{$NbrAtomSpecAtomicInvarintCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3378 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3379 push @{$NbrAtomSpecDataMap{$NbrAtomSpecCount}{$NbrAtomSpecAtomicInvarintCount}}, $Index;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3380
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3381 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3382
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3383 @SortedNbrAtomSpecs = (); @SortedNbrBondSpecs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3384 @SortedNbrOfNbrAtomSpecs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3385
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3386 for $NbrAtomSpecCount ( sort { $a <=> $b } keys %NbrAtomSpecDataMap) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3387 for $NbrAtomSpecAtomicInvarintCount ( sort { $b <=> $a } keys %{$NbrAtomSpecDataMap{$NbrAtomSpecCount}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3388 for $Index (@{$NbrAtomSpecDataMap{$NbrAtomSpecCount}{$NbrAtomSpecAtomicInvarintCount}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3389 push @SortedNbrAtomSpecs, $NbrAtomSpecsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3390 if (defined $NbrBondSpecsRef) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3391 push @SortedNbrBondSpecs, $NbrBondSpecsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3392 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3393 if (defined $NbrOfNbrAtomSpecsRef) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3394 push @SortedNbrOfNbrAtomSpecs, $NbrOfNbrAtomSpecsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3395 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3396 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3397 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3398 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3399
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3400 return (\@SortedNbrAtomSpecs, defined $NbrBondSpecsRef ? \@SortedNbrBondSpecs : undef, defined $NbrOfNbrAtomSpecsRef ? \@SortedNbrOfNbrAtomSpecs : undef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3401 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3402
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3403 # Check whether atom matches supported atom specification...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3404 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3405 sub _DoesAtomSpecificationMatch {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3406 my($This, $AtomSpecificationToMatch) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3407 my($AtomSpecification, $AtomicInvariant, $AtomSpecificationMatched, $AtomicInvariantMatched, $FirstMatch);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3408
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3409 # Anything to match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3410 if (!(defined($AtomSpecificationToMatch) && $AtomSpecificationToMatch)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3411 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3412 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3413
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3414 # Take out any spaces...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3415 $AtomSpecificationToMatch =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3416
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3417 # Match specified atom specifications. For multiple atom specifications in a comma delimited string,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3418 # only one atom specification needs to match for a successful match. It's up to the caller to make
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3419 # sure that the specificaton list is ordered from least to most specific atom specification...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3420 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3421 for $AtomSpecification (split /\,/, $AtomSpecificationToMatch) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3422 $AtomSpecificationMatched = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3423 $FirstMatch = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3424
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3425 # Match all atom symbol atomic invariants...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3426 ATOMICINVARIANT: for $AtomicInvariant (split /\./, $AtomSpecification) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3427 if ($FirstMatch) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3428 # Match atom symbol atomic invariant...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3429 $FirstMatch = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3430 $AtomicInvariantMatched = $This->_MatchAtomSymbolAtomicInvariant($AtomicInvariant);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3431 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3432 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3433 # Match non atom symbol atomic invariant...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3434 $AtomicInvariantMatched = $This->_MatchNonAtomSymbolAtomicInvariant($AtomicInvariant);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3435 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3436
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3437 if (!$AtomicInvariantMatched) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3438 # No need to match other atomic invariants...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3439 $AtomSpecificationMatched = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3440 last ATOMICINVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3441 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3442 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3443
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3444 if ($AtomSpecificationMatched) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3445 # No need to match other atom specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3446 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3447 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3448 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3449
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3450 # Nothing matched...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3451 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3452 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3453
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3454 # Check whether atom matches atom symbol atomic invariant...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3455 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3456 sub _MatchAtomSymbolAtomicInvariant {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3457 my($This, $AtomicInvariant) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3458 my($NegateMatch, $Status, $AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3459
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3460 $Status = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3461 $NegateMatch = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3462
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3463 # Does match needs to be negated?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3464 if ($AtomicInvariant =~ /^!/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3465 $NegateMatch = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3466 $AtomicInvariant =~ s/^!//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3467 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3468
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3469 ATOMICINVARIANT: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3470 # Any atom match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3471 if ($This->_IsWildCardAtomSymbolAtomicInvariant($AtomicInvariant)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3472 $Status = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3473 last ATOMICINVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3474 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3475
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3476 # Atomic number match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3477 if ($AtomicInvariant =~ /^#/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3478 $AtomicNumber = $AtomicInvariant; $AtomicNumber =~ s/^#//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3479 $Status = ($This->{AtomicNumber} == $AtomicNumber) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3480 last ATOMICINVARIANT;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3481 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3482
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3483 # Atom symbol match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3484 $Status = ($This->{AtomSymbol} =~ /^$AtomicInvariant$/i) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3485 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3486
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3487 if ($NegateMatch) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3488 $Status = $Status ? 0 : 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3489 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3490
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3491 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3492 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3493
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3494 # Is it a wild card atom symbol atomic invariant?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3495 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3496 sub _IsWildCardAtomSymbolAtomicInvariant {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3497 my($This, $AtomicInvariant) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3498
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3499 return ($AtomicInvariant =~ /^(A|\*)$/i) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3500 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3501
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3502 # Check whether atom matches non atom symbol atomic invariants...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3503 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3504 sub _MatchNonAtomSymbolAtomicInvariant {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3505 my($This, $AtomicInvariant) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3506 my($NegateMatch, $Status, $Name, $Value, $UnknownName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3507
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3508 ($Status, $NegateMatch, $UnknownName) = ('0') x 3;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3509
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3510 # Does match needs to be negated?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3511 if ($AtomicInvariant =~ /^!/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3512 $NegateMatch = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3513 $AtomicInvariant =~ s/^!//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3514 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3515
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3516 # Extract atomic invariant name and any value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3517 if ($AtomicInvariant =~ /[0-9\*]+/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3518 ($Name, $Value) = $AtomicInvariant =~ /^([a-zA-Z]+)([0-9\-\+\*\>\<\=]+)$/;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3519 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3520 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3521 ($Name, $Value) = ($AtomicInvariant, undef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3522 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3523
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3524 NAME: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3525 # Match number of non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3526 if ($Name =~ /^X$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3527 $Status = (defined($Value) && $This->GetNumOfNonHydrogenAtomNeighbors() == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3528 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3529 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3530
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3531 # Match total number of atom neighbors including missing hydrogens...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3532 if ($Name =~ /^T$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3533 $Status = (defined($Value) && ($This->GetNumOfNonHydrogenAtomNeighbors() + $This->GetNumOfHydrogens()) == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3534 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3535 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3536
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3537 # Match formal charge...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3538 if ($Name =~ /^FC$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3539 my $FormalCharge = $This->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3540 $Status = $This->_MatchNonAtomSymbolAtomicInvariantValue($FormalCharge, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3541 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3542 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3543
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3544 # Match aromatic annotation indicating whether atom is aromatic...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3545 if ($Name =~ /^Ar$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3546 $Status = $This->IsAromatic() ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3547 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3548 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3549
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3550 # Match number of implicit and explicit hydrogens...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3551 if ($Name =~ /^H$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3552 $Status = (defined($Value) && ($This->GetNumOfHydrogens() == $Value)) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3553 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3554 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3555
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3556 # Match ring atom annotation indicating whether atom is in ring...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3557 if ($Name =~ /^RA$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3558 $Status = defined($Value) ? $This->IsInRingOfSize($Value) : ($This->IsInRing() ? 1 : 0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3559 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3560 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3561
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3562 # Match number of rings for atom..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3563 if ($Name =~ /^TR$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3564 $Status = (defined($Value) && ($Value == $This->GetNumOfRings())) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3565 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3566 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3567
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3568 # Match sum of bond orders to non-hydrogen atom neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3569 if ($Name =~ /^BO$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3570 $Status = (defined($Value) && $This->GetSumOfBondOrdersToNonHydrogenAtoms() == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3571 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3572 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3573
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3574 # Match largest bond order of non-hydrogen atom neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3575 if ($Name =~ /^LBO$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3576 $Status = (defined($Value) && $This->GetLargestBondOrderToNonHydrogenAtoms() == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3577 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3578 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3579
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3580 # Match number of single bonds to non-hydrogen atom neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3581 if ($Name =~ /^SB$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3582 $Status = (defined($Value) && $This->GetNumOfSingleBondsToNonHydrogenAtoms() == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3583 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3584 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3585
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3586 # Match total number of single bonds to atom neighbors including missing and explicit hydrogens...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3587 if ($Name =~ /^TSB$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3588 $Status = (defined($Value) && ($This->GetNumOfSingleBondsToNonHydrogenAtoms() + $This->GetNumOfHydrogens()) == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3589 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3590 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3591
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3592 # Match number of double bonds to non-hydrogen atom neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3593 if ($Name =~ /^DB$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3594 $Status = (defined($Value) && $This->GetNumOfDoubleBondsToNonHydrogenAtoms() == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3595 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3596 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3597
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3598 # Match number of triple bonds to non-hydrogen atom neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3599 if ($Name =~ /^TB$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3600 $Status = (defined($Value) && $This->GetNumOfTripleBondsToNonHydrogenAtoms() == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3601 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3602 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3603
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3604 # Match number of aromatic bonds to non-hydrogen atom neighbors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3605 if ($Name =~ /^AB$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3606 $Status = (defined($Value) && $This->GetNumOfAromaticBondsToNonHydrogenAtoms() == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3607 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3608 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3609
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3610
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3611 # Match mass number indicating isotope other than most abundant isotope...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3612 if ($Name =~ /^MN$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3613 $Status = (defined($Value) && $This->GetMassNumber() == $Value) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3614 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3615 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3616
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3617 # Match spin multiplicity...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3618 if ($Name =~ /^SM$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3619 my $SpinMultiplicity = $This->GetSpinMultiplicity();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3620 if (!defined $SpinMultiplicity) { $SpinMultiplicity = 0; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3621 $Status = (defined($Value) && defined($SpinMultiplicity) && $Value == $SpinMultiplicity) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3622 last NAME;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3623 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3624
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3625 $UnknownName = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3626 carp "Warning: ${ClassName}->_MatchNonAtomSymbolAtomicInvariant: Unknown atomic invariant $AtomicInvariant...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3627 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3628
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3629 if (!$UnknownName) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3630 if ($NegateMatch) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3631 $Status = $Status ? 0 : 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3632 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3633 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3634
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3635 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3636 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3637
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3638 # Match atomic invariant value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3639 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3640 # Specified value format:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3641 # . +* : Any positive value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3642 # . -* : Any negative value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3643 # . >ValidNumber or >=ValidNumber
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3644 # . <ValidNumber or <=ValidNumber
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3645 # . Any valid number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3646 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3647 sub _MatchNonAtomSymbolAtomicInvariantValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3648 my($This, $TargetValue, $SpecifiedValue) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3649 my($Status);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3650
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3651 $Status = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3652
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3653 if (!(defined($TargetValue) && defined($SpecifiedValue))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3654 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3655 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3656
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3657 VALUE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3658 if ($SpecifiedValue =~ /^\+\*/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3659 $Status = ($TargetValue > 0) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3660 last VALUE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3661 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3662 if ($SpecifiedValue =~ /^\-\*/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3663 $Status = ($TargetValue < 0) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3664 last VALUE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3665 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3666 if ($SpecifiedValue =~ /^>/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3667 if ($SpecifiedValue =~ /^>=/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3668 $SpecifiedValue =~ s/^>=//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3669 $Status = ($SpecifiedValue >= $TargetValue) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3670 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3671 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3672 $SpecifiedValue =~ s/^>//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3673 $Status = ($SpecifiedValue > $TargetValue) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3674 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3675 last VALUE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3676 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3677 if ($SpecifiedValue =~ /^</) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3678 if ($SpecifiedValue =~ /^<=/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3679 $SpecifiedValue =~ s/^<=//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3680 $Status = ($SpecifiedValue <= $TargetValue) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3681 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3682 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3683 $SpecifiedValue =~ s/^<//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3684 $Status = ($SpecifiedValue < $TargetValue) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3685 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3686 last VALUE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3687 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3688 # Default is do perform an equality match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3689 $Status = ($SpecifiedValue == $TargetValue) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3690 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3691
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3692 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3693 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3694
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3695 # Check whether atoms match bond specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3696 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3697 sub _DoesBondSpecificationMatch {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3698 my($This, $BondedAtom, $BondSpecificationToMatch) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3699 my($BondSpecification, $BondSymbolSpecification, $BondSpecificationMatched);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3700
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3701 # Anything to match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3702 if (!(defined($BondSpecificationToMatch) && $BondSpecificationToMatch)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3703 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3704 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3705
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3706 # Take out any spaces...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3707 $BondSpecificationToMatch =~ s/ //g;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3708
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3709 # Match specified bond specifications. For multiple bond specifications in a comma delimited string,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3710 # only one bond specification needs to match for a successful match...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3711 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3712 for $BondSpecification (split /\,/, $BondSpecificationToMatch) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3713 $BondSpecificationMatched = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3714
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3715 # Match all specified bond symbol specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3716 BONDSYMBOL: for $BondSymbolSpecification (split /\./, $BondSpecification) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3717 if (!$This->_MatchBondSymbolSpecification($BondedAtom, $BondSymbolSpecification)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3718 # No need to match other bond symbol specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3719 $BondSpecificationMatched = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3720 last BONDSYMBOL;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3721 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3722 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3723 if ($BondSpecificationMatched) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3724 # No need to try matching other bond specifications...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3725 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3726 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3727 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3728
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3729 # Nothing matched...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3730 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3731 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3732
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3733 # Check whether atoms match bond symbol specification...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3734 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3735 sub _MatchBondSymbolSpecification {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3736 my($This, $BondedAtom, $BondSymbolSpecification) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3737 my($NegateMatch, $Status, $Bond, $BondSymbol, $UnknownBondSymbol);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3738
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3739 ($Status, $NegateMatch, $UnknownBondSymbol) = ('0') x 3;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3740
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3741 # Does match needs to be negated?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3742 if ($BondSymbolSpecification =~ /^!/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3743 $NegateMatch = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3744 $BondSymbolSpecification =~ s/^!//;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3745 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3746 $BondSymbol = $BondSymbolSpecification;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3747 $Bond = $This->GetBondToAtom($BondedAtom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3748
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3749 BONDSYMBOL: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3750 if ($BondSymbol =~ /^(-|1|s|Single)$/i) { $Status = $Bond->IsSingle() ? 1 : 0; last BONDSYMBOL; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3751 if ($BondSymbol =~ /^(=|2|d|Double)$/i) { $Status = $Bond->IsDouble() ? 1 : 0; last BONDSYMBOL; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3752 if ($BondSymbol =~ /^(#|3|t|Triple)$/i) { $Status = $Bond->IsTriple() ? 1 : 0; last BONDSYMBOL; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3753 if ($BondSymbol =~ /^(:|a|Ar|Aromatic)$/i) { $Status = $Bond->IsAromatic() ? 1 : 0; last BONDSYMBOL; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3754
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3755 if ($BondSymbol =~ /^(\@|RB|Ring)$/i) { $Status = $Bond->IsInRing() ? 1 : 0; last BONDSYMBOL; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3756
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3757 if ($BondSymbol =~ /^(\~|\*|Any)$/i) { $Status = 1; last BONDSYMBOL; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3758
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3759 $UnknownBondSymbol = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3760 carp "Warning: ${ClassName}->_MatchBondSpecification: Unknown bond specification $BondSymbolSpecification...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3761 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3762
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3763 if (!$UnknownBondSymbol) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3764 if ($NegateMatch) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3765 $Status = $Status ? 0 : 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3766 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3767 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3768
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3769 return $Status;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3770 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3771
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3772 # Is it a saturated atom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3773 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3774 sub IsSaturated {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3775 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3776
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3777 return !$This->IsUnsaturated();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3778 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3779
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3780 # Is it an unsaturated atom containing at least one non-single bond?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3781 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3782 sub IsUnsaturated {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3783 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3784 my($NumOfSingleBonds, $NumOfDoubleBonds, $NumOfTripleBonds, $NumOfAromaticBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3785
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3786 ($NumOfSingleBonds, $NumOfDoubleBonds, $NumOfTripleBonds, $NumOfAromaticBonds) = $This->GetNumOfBondTypesToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3787
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3788 return ($NumOfDoubleBonds || $NumOfTripleBonds || $NumOfAromaticBonds) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3789 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3790
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3791 # Is atom in a ring?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3792 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3793 sub IsInRing {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3794 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3795
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3796 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3797 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3798 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3799 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3800 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3801 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3802
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3803 return $Molecule->_IsAtomInRing($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3804 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3805
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3806 # Is atom not in a ring?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3807 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3808 sub IsNotInRing {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3809 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3810
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3811 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3812 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3813 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3814 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3815 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3816 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3817
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3818 return $Molecule->_IsAtomNotInRing($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3819 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3820
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3821 # Is atom only in one ring?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3822 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3823 sub IsOnlyInOneRing {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3824 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3825
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3826 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3827 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3828 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3829 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3830 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3831 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3832
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3833 return $Molecule->_IsAtomInOnlyOneRing($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3834 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3835
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3836 # Is atom in a ring of specific size?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3837 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3838 sub IsInRingOfSize {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3839 my($This, $RingSize) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3840
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3841 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3842 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3843 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3844 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3845 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3846 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3847
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3848 return $Molecule->_IsAtomInRingOfSize($This, $RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3849 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3850
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3851 # Get size of smallest ring containing the atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3852 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3853 sub GetSizeOfSmallestRing {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3854 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3855
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3856 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3857 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3858 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3859 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3860 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3861 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3862
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3863 return $Molecule->_GetSizeOfSmallestAtomRing($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3864 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3865
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3866 # Get size of largest ring containing the atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3867 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3868 sub GetSizeOfLargestRing {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3869 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3870
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3871 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3872 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3873 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3874 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3875 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3876 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3877
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3878 return $Molecule->_GetSizeOfLargestAtomRing($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3879 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3880
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3881 # Get number of rings containing the atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3882 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3883 sub GetNumOfRings {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3884 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3885
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3886 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3887 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3888 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3889 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3890 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3891 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3892
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3893 return $Molecule->_GetNumOfAtomRings($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3894 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3895
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3896 # Get number of rings with odd size containing the atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3897 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3898 sub GetNumOfRingsWithOddSize {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3899 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3900
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3901 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3902 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3903 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3904 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3905 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3906 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3907
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3908 return $Molecule->_GetNumOfAtomRingsWithOddSize($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3909 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3910
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3911 # Get number of rings with even size containing the atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3912 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3913 sub GetNumOfRingsWithEvenSize {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3914 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3915
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3916 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3917 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3918 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3919 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3920 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3921 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3922
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3923 return $Molecule->_GetNumOfAtomRingsWithEvenSize($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3924 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3925
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3926 # Get number of rings with specified size containing the atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3927 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3928 sub GetNumOfRingsWithSize {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3929 my($This, $RingSize) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3930
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3931 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3932 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3933 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3934 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3935 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3936 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3937
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3938 return $Molecule->_GetNumOfAtomRingsWithSize($This, $RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3939
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3940 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3941
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3942 # Get number of rings with size less than specified containing the atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3943 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3944 sub GetNumOfRingsWithSizeLessThan {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3945 my($This, $RingSize) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3946
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3947 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3948 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3949 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3950 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3951 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3952 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3953
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3954 return $Molecule->_GetNumOfAtomRingsWithSizeLessThan($This, $RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3955 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3956
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3957 # Get number of rings with size greater than specified size containing the atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3958 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3959 sub GetNumOfRingsWithSizeGreaterThan {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3960 my($This, $RingSize) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3961
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3962 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3963 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3964 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3965 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3966 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3967 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3968
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3969 return $Molecule->_GetNumOfAtomRingsWithSizeGreaterThan($This, $RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3970 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3971
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3972 # Get all rings an array of references to arrays containing ring atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3973 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3974 sub GetRings {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3975 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3976
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3977 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3978 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3979 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3980 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3981 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3982 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3983
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3984 return $Molecule->_GetAtomRings($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3985 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3986
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3987 # Get smallest ring as an array containing ring atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3988 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3989 sub GetSmallestRing {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3990 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3991
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3992 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3993 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3994 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3995 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3996 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3997 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3998
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3999 return $Molecule->_GetSmallestAtomRing($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4000 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4001
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4002 # Get largest ring as an array containing ring atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4003 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4004 sub GetLargestRing {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4005 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4006
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4007 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4008 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4009 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4010 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4011 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4012 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4013
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4014 return $Molecule->_GetLargestAtomRing($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4015 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4016
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4017 # Get odd size rings an array of references to arrays containing ring atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4018 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4019 sub GetRingsWithOddSize {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4020 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4021
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4022 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4023 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4024 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4025 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4026 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4027 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4028
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4029 return $Molecule->_GetAtomRingsWithOddSize($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4030 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4031
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4032 # Get even size rings an array of references to arrays containing ring atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4033 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4034 sub GetRingsWithEvenSize {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4035 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4036
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4037 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4038 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4039 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4040 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4041 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4042 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4043
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4044 return $Molecule->_GetAtomRingsWithEvenSize($This);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4045 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4046
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4047 # Get rings with specified size as an array of references to arrays containing ring atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4048 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4049 sub GetRingsWithSize {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4050 my($This, $RingSize) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4051
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4052 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4053 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4054 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4055 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4056 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4057 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4058
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4059 return $Molecule->_GetAtomRingsWithSize($This, $RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4060 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4061
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4062 # Get rings with size less than specfied size as an array of references to arrays containing ring atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4063 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4064 sub GetRingsWithSizeLessThan {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4065 my($This, $RingSize) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4066
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4067 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4068 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4069 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4070 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4071 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4072 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4073
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4074 return $Molecule->_GetAtomRingsWithSizeLessThan($This, $RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4075 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4076
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4077 # Get rings with size greater than specfied size as an array of references to arrays containing ring atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4078 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4079 sub GetRingsWithSizeGreaterThan {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4080 my($This, $RingSize) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4081
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4082 # Is this atom in a molecule?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4083 if (!$This->HasProperty('Molecule')) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4084 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4085 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4086 my($Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4087 $Molecule = $This->GetProperty('Molecule');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4088
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4089 return $Molecule->_GetAtomRingsWithSizeGreaterThan($This, $RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4090 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4091
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4092 # Get next object ID...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4093 sub _GetNewObjectID {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4094 $ObjectID++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4095 return $ObjectID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4096 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4097
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4098 # Return a string containing vertices, edges and other properties...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4099 sub StringifyAtom {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4100 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4101 my($AtomString, $ID, $Name, $AtomSymbol, $AtomicNumber, $XYZVector, $AtomicWeight, $ExactMass, $NumOfNeighbors, $NumOfBonds, $Valence, $MissingHydrogens, $TotalHydrogens, $ImplicitHydrogens, $ExplicitHydrogens, $FormalCharge, $Charge, $SpinMultiplicity, $FreeRadicalElectrons, $StereoCenter, $StereoCenterStatus, $StereoChemistry, $StereochemistryString, $RingAtom, $NumOfRings, $AromaticAtom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4102
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4103 $ID = $This->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4104 $Name = $This->GetName();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4105 $AtomSymbol = $This->GetAtomSymbol();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4106 $AtomicNumber = $This->GetAtomicNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4107 $XYZVector = $This->GetXYZVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4108
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4109 $AtomicWeight = $This->GetAtomicWeight();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4110 if (!defined $AtomicWeight) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4111 $AtomicWeight = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4112 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4113 $ExactMass = $This->GetExactMass();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4114 if (!defined $ExactMass) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4115 $ExactMass = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4116 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4117 $NumOfNeighbors = $This->GetNumOfNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4118 if (!defined $NumOfNeighbors) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4119 $NumOfNeighbors = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4120 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4121 $NumOfBonds = $This->GetNumOfBonds();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4122 if (!defined $NumOfBonds) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4123 $NumOfBonds = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4124 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4125 $Valence = $This->GetValence();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4126 if (!defined $Valence) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4127 $Valence = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4128 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4129
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4130 $MissingHydrogens = $This->GetNumOfMissingHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4131 if (!defined $MissingHydrogens) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4132 $MissingHydrogens = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4133 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4134 $TotalHydrogens = $This->GetNumOfHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4135 if (!defined $TotalHydrogens) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4136 $TotalHydrogens = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4137 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4138 $ImplicitHydrogens = $This->GetNumOfImplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4139 if (!defined $ImplicitHydrogens) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4140 $ImplicitHydrogens = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4141 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4142 $ExplicitHydrogens = $This->GetNumOfExplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4143 if (!defined $ExplicitHydrogens) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4144 $ExplicitHydrogens = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4145 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4146
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4147 $FormalCharge = $This->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4148 if (!defined $FormalCharge) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4149 $FormalCharge = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4150 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4151 $Charge = $This->GetCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4152 if (!defined $Charge) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4153 $Charge = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4154 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4155
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4156 $SpinMultiplicity = $This->GetSpinMultiplicity();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4157 if (!defined $SpinMultiplicity) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4158 $SpinMultiplicity = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4159 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4160 $FreeRadicalElectrons = $This->GetFreeRadicalElectrons();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4161 if (!defined $FreeRadicalElectrons) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4162 $FreeRadicalElectrons = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4163 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4164
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4165 $RingAtom = $This->IsInRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4166 if (defined $RingAtom) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4167 $RingAtom = $RingAtom ? 'Yes' : 'No';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4168 $NumOfRings = $This->GetNumOfRings();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4169 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4170 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4171 $RingAtom = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4172 $NumOfRings = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4173 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4174
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4175 $AromaticAtom = $This->GetAromatic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4176 if (defined $AromaticAtom) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4177 $AromaticAtom = $AromaticAtom ? 'Yes' : 'No';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4178 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4179 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4180 $AromaticAtom = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4181 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4182
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4183 $StereochemistryString = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4184 $StereoCenter = $This->GetStereoCenter();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4185 if (defined $StereoCenter) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4186 $StereoCenterStatus = $This->IsStereoCenter() ? 'Yes' : 'No';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4187 $StereoChemistry = $This->GetStereochemistry();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4188 if (!defined $StereoChemistry) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4189 $StereoChemistry = 'undefined';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4190 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4191 $StereochemistryString = "StereoCenter: $StereoCenterStatus; Stereochemistry: $StereoChemistry";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4192 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4193
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4194 $AtomString = "Atom: ID: $ID; Name: \"$Name\"; AtomSymbol: \"$AtomSymbol\"; AtomicNumber: $AtomicNumber; XYZ: $XYZVector; AtomicWeight: $AtomicWeight; ExactMass: $ExactMass; NumOfNeighbors: $NumOfNeighbors; NumOfBonds: $NumOfBonds; Valence: $Valence; MissingHydrogens: $MissingHydrogens; TotalHydrogens: $TotalHydrogens; ImplicitHydrogens: $ImplicitHydrogens; ExplicitHydrogens: $ExplicitHydrogens; FormalCharge: $FormalCharge; Charge: $Charge; SpinMultiplicity: $SpinMultiplicity; FreeRadicalElectrons: $FreeRadicalElectrons; RingAtom: $RingAtom; NumOfAtomRings: $NumOfRings; AromaticAtom: $AromaticAtom";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4195
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4196 if ($StereochemistryString) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4197 $AtomString .= "; $StereochemistryString";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4198 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4199
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4200 return $AtomString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4201 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4202
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4203 # Load appropriate atom data files from <MayaChemTools>/lib directory used by various
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4204 # object methods in the current class...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4205 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4206 sub _LoadAtomClassData {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4207 my($MayaChemToolsLibDir);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4208
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4209 $MayaChemToolsLibDir = GetMayaChemToolsLibDirName();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4210
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4211 _LoadAtomValenceModelData($MayaChemToolsLibDir);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4212
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4213 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4214
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4215 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4216 # Load data for supported valence models...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4217 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4218 sub _LoadAtomValenceModelData {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4219 my($MayaChemToolsLibDir) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4220 my($MDLValenceModelDataFile, $DaylightValenceModelDataFile);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4221
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4222 %MDLValenceModelDataMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4223 %DaylightValenceModelDataMap = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4224
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4225 $MDLValenceModelDataFile = $MayaChemToolsLibDir . "/data/MDLValenceModelData.csv";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4226 $DaylightValenceModelDataFile = $MayaChemToolsLibDir . "/data/DaylightValenceModelData.csv";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4227
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4228 if (! -e "$MDLValenceModelDataFile") {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4229 croak "Error: ${ClassName}::_LoadAtomValenceModelData: MayaChemTools package file, $MDLValenceModelDataFile, is missing: Possible installation problems...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4230 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4231
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4232 if (! -e "$DaylightValenceModelDataFile") {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4233 croak "Error: ${ClassName}::_LoadAtomValenceModelData: MayaChemTools package file, $DaylightValenceModelDataFile, is missing: Possible installation problems...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4234 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4235
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4236 _LoadValenceModelDataFile($MDLValenceModelDataFile, \%MDLValenceModelDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4237 _LoadValenceModelDataFile($DaylightValenceModelDataFile, \%DaylightValenceModelDataMap);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4238
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4239 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4240
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4241 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4242 # Load valence model data file...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4243 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4244 sub _LoadValenceModelDataFile {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4245 my($DataFile, $DataMapRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4246
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4247 # File format:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4248 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4249 # "AtomicNumber","ElementSymbol","FormalCharge","CommomValences"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4250 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4251 my($InDelim, $Line, $NumOfCols, @ColLabels, @LineWords);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4252
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4253 $InDelim = "\,";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4254 open DATAFILE, "$DataFile" or croak "Couldn't open $DataFile: $! ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4255
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4256 # Skip lines up to column labels...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4257 LINE: while ($Line = GetTextLine(\*DATAFILE)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4258 if ($Line !~ /^#/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4259 last LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4260 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4261 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4262 @ColLabels= quotewords($InDelim, 0, $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4263 $NumOfCols = @ColLabels;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4264
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4265 my($AtomicNumber, $ElementSymbol, $FormalCharge, $CommonValences);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4266
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4267 # Process element data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4268 LINE: while ($Line = GetTextLine(\*DATAFILE)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4269 if ($Line =~ /^#/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4270 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4271 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4272 @LineWords = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4273 @LineWords = quotewords($InDelim, 0, $Line);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4274 if (@LineWords != $NumOfCols) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4275 croak "Error: ${ClassName}::_LoadValenceModelDataFile: The number of data fields, @LineWords, in $DataFile must be $NumOfCols.\nLine: $Line...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4276 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4277
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4278 ($AtomicNumber, $ElementSymbol, $FormalCharge, $CommonValences) = @LineWords;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4279
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4280 if (exists $DataMapRef->{$AtomicNumber}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4281 # Additional data for an element...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4282 if (exists $DataMapRef->{$AtomicNumber}{$FormalCharge}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4283 # Duplicate data entries for an element...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4284 carp "Warning: ${ClassName}::_LoadValenceModelDataFile: Ignoring valence data for element with atomic number $AtomicNumber and formal charge $FormalCharge in data file $DataFile: It has already been loaded.\nLine: $Line...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4285 next LINE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4286 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4287 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4288 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4289 # Data for a new element...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4290 %{$DataMapRef->{$AtomicNumber}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4291 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4292
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4293 %{$DataMapRef->{$AtomicNumber}{$FormalCharge}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4294 $DataMapRef->{$AtomicNumber}{$FormalCharge}{ElementSymbol} = $ElementSymbol;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4295
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4296 @{$DataMapRef->{$AtomicNumber}{$FormalCharge}{CommonValences}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4297 @{$DataMapRef->{$AtomicNumber}{$FormalCharge}{CommonValences}} = sort { $a <=> $b } split /\,/, $CommonValences;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4298 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4299 close DATAFILE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4300 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4301
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4302 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4303
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4304 __END__
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4305
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4306 =head1 NAME
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4307
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4308 Atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4309
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4310 =head1 SYNOPSIS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4311
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4312 use Atom;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4313
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4314 =head1 DESCRIPTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4315
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4316 B<Atom> class provides the following methods:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4317
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4318 new, AddHydrogens, Copy, DeleteAtom, DeleteHydrogens, DoesAtomNeighborhoodMatch,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4319 GetAtomicInvariantValue, GetAtomicWeight, GetBondToAtom, GetBonds,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4320 GetBondsToHeavyAtoms, GetBondsToHydrogenAtoms, GetBondsToNonHydrogenAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4321 GetExactMass, GetExplicitHydrogens, GetFormalCharge, GetFreeRadicalElectrons,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4322 GetGroupNumber, GetHeavyAtomNeighbors, GetHeavyAtomNeighborsAtomInformation,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4323 GetHeavyAtomNeighborsBondformation, GetHighestCommonValence,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4324 GetHydrogenAtomNeighbors, GetHydrogens, GetImplicitHydrogens, GetLargestBondOrder,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4325 GetLargestBondOrderToHeavyAtoms, GetLargestBondOrderToNonHydrogenAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4326 GetLargestRing, GetLowestCommonValence, GetMassNumber, GetMissingHydrogens,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4327 GetNeighbors, GetNeighborsUsingAtomSpecification, GetNonHydrogenAtomNeighbors,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4328 GetNonHydrogenAtomNeighborsAtomInformation,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4329 GetNonHydrogenAtomNeighborsBondInformation, GetNonHydrogenNeighborOfHydrogenAtom,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4330 GetNumOfAromaticBondsToHeavyAtoms, GetNumOfAromaticBondsToNonHydrogenAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4331 GetNumOfBondTypesToHeavyAtoms, GetNumOfBondTypesToNonHydrogenAtoms, GetNumOfBonds,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4332 GetNumOfBondsToHeavyAtoms, GetNumOfBondsToHydrogenAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4333 GetNumOfBondsToNonHydrogenAtoms, GetNumOfDoubleBondsToHeavyAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4334 GetNumOfBondsAvailableForHeavyAtoms, GetNumOfBondsAvailableForNonHydrogenAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4335 GetNumOfDoubleBondsToNonHydrogenAtoms, GetNumOfExplicitHydrogens,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4336 GetNumOfHeavyAtomNeighbors, GetNumOfHydrogenAtomNeighbors, GetNumOfHydrogens,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4337 GetNumOfImplicitHydrogens, GetNumOfMissingHydrogens, GetNumOfNeighbors,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4338 GetNumOfNonHydrogenAtomNeighbors, GetNumOfRings, GetNumOfRingsWithEvenSize,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4339 GetNumOfRingsWithOddSize, GetNumOfRingsWithSize, GetNumOfRingsWithSizeGreaterThan,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4340 GetNumOfRingsWithSizeLessThan, GetNumOfSigmaAndPiBondsToHeavyAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4341 GetNumOfSigmaAndPiBondsToNonHydrogenAtoms, GetNumOfSingleBondsToHeavyAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4342 GetNumOfSingleBondsToNonHydrogenAtoms, GetNumOfTripleBondsToHeavyAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4343 GetNumOfTripleBondsToNonHydrogenAtoms, GetPeriodNumber,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4344 GetPotentialTotalCommonValence, GetRings, GetRingsWithEvenSize,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4345 GetRingsWithOddSize, GetRingsWithSize, GetRingsWithSizeGreaterThan,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4346 GetRingsWithSizeLessThan, GetSizeOfLargestRing, GetSizeOfSmallestRing,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4347 GetSmallestRing, GetSpinMultiplicity, GetSumOfBondOrders,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4348 GetSumOfBondOrdersToHeavyAtoms, GetSumOfBondOrdersToHydrogenAtoms,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4349 GetSumOfBondOrdersToNonHydrogenAtoms, GetValence, GetValenceElectrons,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4350 GetValenceFreeElectrons, GetX, GetXYZ, GetXYZVector, GetY, GetZ, IsAmideCarbon,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4351 IsAmideNitrogen, IsAromatic, IsArsenic, IsBondedToAtom, IsBromine, IsCarbon, IsCarboxylCarbon,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4352 IsCarboxylOxygen, IsCarboxylateCarbon, IsCarboxylateOxygen, IsChlorine,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4353 IsFluorine, IsFunctionalClassType, IsGuadiniumCarbon, IsGuadiniumNitrogen,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4354 IsHBondAcceptor, IsHBondDonor, IsHalogen, IsHeteroAtom, IsHydrogen,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4355 IsHydrogenBondAcceptor, IsHydrogenBondDonor, IsHydrophobic, IsInRing,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4356 IsInRingOfSize, IsIodine, IsIsotope, IsLipophilic, IsMetallic,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4357 IsNegativelyIonizable, IsNitrogen, IsNonCarbonOrHydrogen, IsNotInRing,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4358 IsOnlyInOneRing, IsOxygen, IsPhosphateOxygen, IsPhosphatePhosphorus, IsPhosphorus,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4359 IsPolarAtom, IsPolarHydrogen, IsPositivelyIonizable, IsSaturated, IsSelenium,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4360 IsSilicon, IsStereoCenter, IsSulfur, IsSulphur, IsTellurium, IsTerminal,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4361 IsTopologicalPharmacophoreType, IsUnsaturated, SetAtomSymbol, SetAtomicNumber,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4362 SetExplicitHydrogens, SetMassNumber, SetStereoCenter, SetStereochemistry,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4363 SetX, SetXYZ, SetY, SetZ, StringifyAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4364
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4365 B<Atom> class is derived from B<ObjectProperty> base class which provides methods not explicitly
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4366 defined in B<Atom> or B<ObjectProperty> class using Perl's AUTOLOAD functionality. These methods
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4367 are generated on-the-fly for a specified object property:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4368
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4369 Set<PropertyName>(<PropertyValue>);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4370 $PropertyValue = Get<PropertyName>();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4371 Delete<PropertyName>();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4372
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4373 =head2 METHODS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4374
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4375 =over 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4376
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4377 =item B<new>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4378
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4379 $NewAtom = new Atom([%PropertyNameAndValues]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4380
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4381 Using specified I<Atom> property names and values hash, B<new> method creates a new object
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4382 and returns a reference to newly created B<Atom> object. By default, following properties are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4383 initialized:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4384
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4385 ID = SequentialObjectID
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4386 Name = "Atom <SequentialObjectID>"
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4387 AtomSymbol = ""
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4388 AtomicNumber = 0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4389 XYZ = ZeroVector
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4390
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4391 Except for I<ID> property, all other default properties and other additional properties can
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4392 be set during invocation of this method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4393
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4394 Examples:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4395
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4396 $Atom = new Atom();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4397 $CarbonAtom = new Atom('AtomSymbol' => 'C', 'XYZ' => (0.0, 1.0,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4398 0.0));
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4399 $OxygenAtom = new Atom('AtomName' => 'Oxygen', AtomSymbol' => 'O',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4400 'XYZ' => (1.0, 1.0, 1.0));
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4401
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4402 =item B<AddHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4403
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4404 $NumOfHydrogensAdded = $Atom->AddHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4405
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4406 Adds hydrogens to an B<Atom> present in a B<Molecule> object and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4407 the number of added hydrogens. The current release of MayaChemTools doesn't
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4408 assign hydrogen positions.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4409
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4410 =item B<Copy>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4411
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4412 $AtomCopy = $Atom->Copy();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4413
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4414 Copy I<Atom> and its associated data using B<Storable::dclone> and return a new
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4415 B<Atom> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4416
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4417 =item B<DeleteAtom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4418
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4419 $Atom->DeleteAtom();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4420
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4421 Delete I<Atom> from a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4422
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4423 =item B<DoesAtomNeighborhoodMatch>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4424
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4425 $Status = $Atom->DoesAtomNeighborhoodMatch($CentralAtomSpec);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4426 $Status = $Atom->DoesAtomNeighborhoodMatch($CentralAtomSpec,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4427 $NbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4428 $Status = $Atom->DoesAtomNeighborhoodMatch($CentralAtomSpec,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4429 $NbrAtomSpecsRef, $AllowedNbrBondSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4430 $Status = $Atom->DoesAtomNeighborhoodMatch($CentralAtomSpec,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4431 $NbrAtomSpecsRef, $NbrBondSpecsRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4432 $AllowedNbrOfNbrAtomSpecsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4433
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4434 Returns 1 or 0 based on whether atom matches central atom and its neighborhood
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4435 using specified atom and bonds specifications. Neighborhood atom and bond specifications
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4436 are specified as array references containing neighbor atom and bond specifications.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4437
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4438 Let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4439
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4440 AS = Atom symbol corresponding to element symbol, atomic number (#n)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4441 or any atom (A)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4442
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4443 X<n> = Number of non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4444 attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4445 T<n> = Total number of atom neighbors including implicit and explicit
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4446 hydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4447 BO<n> = Sum of bond orders to non-hydrogen atom neighbors or heavy
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4448 atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4449 LBO<n> = Largest bond order of non-hydrogen atom neighbors or heavy
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4450 atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4451 SB<n> = Number of single bonds to non-hydrogen atom neighbors or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4452 heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4453 TSB<n> = Total number of single bonds to atom neighbors including implicit
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4454 and explicit hydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4455 DB<n> = Number of double bonds to non-hydrogen atom neighbors or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4456 heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4457 TB<n> = Number of triple bonds to non-hydrogen atom neighbors or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4458 heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4459 AB<n> = Number of aromatic bonds to non-hydrogen atom neighbors or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4460 heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4461 H<n> = Number of implicit and explicit hydrogens for atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4462 Ar = Aromatic annotation indicating whether atom is aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4463 RA or RA<n> = Ring atom annotation indicating whether atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4464 is a ring
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4465 TR<n> = Total number of rings containing atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4466 FC<+n/-n> = Formal charge assigned to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4467 MN<n> = Mass number indicating isotope other than most abundant isotope
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4468 SM<n> = Spin multiplicity of atom. Possible values: 1 (singlet),
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4469 2 (doublet) or 3 (triplet)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4470
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4471 Then, atom specification corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4472
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4473 AS.X<n>.T<n>.BO<n>.LBO<n>.<SB><n>.TSB<n>.<DB><n>.<TB><n>.AB<n>.H<n>.Ar.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4474 RA<n>.TR<n>FC<+n/-n>.MN<n>.SM<n>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4475
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4476 Except for AS which is a required atomic invariant in atom specification, all other atomic invariants are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4477 optional. For an atom specification to match an atom, the values of all specified atomic invariants must
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4478 match. Exclamation in from of atomic invariant can be used to negate its effect during the match.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4479
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4480 For I<FC> value matching, the following value operators are also supported:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4481
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4482 o +* : Any positive value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4483 o -* : Any negative value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4484 o > ValidNumber or >= ValidNumber
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4485 o < ValidNumber or <= ValidNumber
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4486
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4487 A comma delimited atom specification string is used to match any one of the specified atom specification.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4488
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4489 Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4490
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4491 o During atom specification match to an atom, the first atomic invariant is always assumed to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4492 atom symbol.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4493
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4494 Examples:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4495
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4496 o ('N', 'N', 'N')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4497 o ('N.FC0', 'N.FC0', 'N,N.FC+1.H1')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4498 o ('N.H2', 'N.H2', 'N.H1')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4499 o ('C,N', '!N', '!H')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4500 o ('C,N', 'N.Ar', 'N.R5')
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4501
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4502 Let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4503
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4504 -|1|s|Single = Single bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4505 =|2|d|Double = Double bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4506 #|3|t|Triple = Triple bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4507 :|1.5|a|Ar|Aromatic = Aromatic bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4508
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4509 @|RB|Ring = Ring bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4510 ~|*|Any = Any bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4511
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4512 Then, bond specification corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4513
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4514 -.:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4515 =.@
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4516 Double.Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4517
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4518 For a bond specification to match bond between two atoms, the values of all specified bond symbols must
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4519 match. Exclamation in from of bond symbol can be used to negate its effect during the match.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4520
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4521 A comma delimited bond specification string is used to match any one of the specified atom specification.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4522
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4523 Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4524
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4525 o During atom neighborhood match for central atom neighborhood atom and bond specifications,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4526 implicit or missing hydrogens are automatically checked for any matches to unmatched
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4527 specifications.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4528
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4529 Examples:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4530
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4531
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4532 Aromatic carbon in a 5 membered ring:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4533 $Atom->DoesAtomNeighborhoodMatch('C.Ar.RA5');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4534
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4535 AcetylenicCarbon: $Atom->DoesAtomNeighborhoodMatch('C.T2.TB1'); or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4536 $Atom->DoesAtomNeighborhoodMatch('C.T2.TB1',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4537 ['*', '*'], ['#', '-']);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4538
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4539 GuadiniumCarbon: $Atom->DoesAtomNeighborhoodMatch('C.X3.BO4',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4540 ['N.FC0', 'N.FC0', 'N.FC0,N.FC+1'],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4541 ['-', '-', '='],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4542 ['C,H', 'C,H', 'C,H']);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4543
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4544 AmideCarbon: $Atom->DoesAtomNeighborhoodMatch('C.X3.BO4,C.X2.BO3',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4545 ['C,H', 'O', 'N'],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4546 ['-', '=', '-'],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4547 ['C,H', 'C', 'C,H,N,O,S,P,F,Cl,Br,I']);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4548
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4549 CarboxylCarbon: $Atom->DoesAtomNeighborhoodMatch('C.X3.BO4,C.X2.BO3',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4550 ['C,H', 'O', 'O.X1.FC0'],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4551 ['-', '=', '-'],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4552 ['C,H', 'C', 'C']);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4553
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4554 CarboxylateCarbon: $Atom->DoesAtomNeighborhoodMatch('C.X3.BO4,C.X2.BO3',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4555 ['C,H', 'O', 'O.X1.FC-1'],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4556 ['-', '=', '-'],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4557 ['C,H', 'C', 'C']);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4558
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4559
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4560 =item B<DeleteHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4561
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4562 $NumOfHydrogensDeleted = $Atom->AddHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4563
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4564 Delete hydrogens from an B<Atom> present in a B<Molecule> object and returns
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4565 the number of deleted hydrogens.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4566
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4567 =item B<GetAtomicInvariantValue>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4568
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4569 $Value = $Atom->GetAtomicInvariantValue($AtomicInvariant);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4570
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4571 Returns atomic invariant value for a specified I<AtomicInvariant>. The current release
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4572 of MayaChemTools supports following abbreviations and descriptive names for
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4573 I<AtomicInvarints>:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4574
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4575 AS : Atom or element symbol
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4576 X : NumOfNonHydrogenAtomNeighbors or NumOfHeavyAtomNeighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4577 T : TotalNumOfAtomNeighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4578 BO : SumOfBondOrdersToNonHydrogenAtoms or SumOfBondOrdersToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4579 LBO : LargestBondOrderToNonHydrogenAtoms or LargestBondOrderToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4580 SB : NumOfSingleBondsToNonHydrogenAtoms or NumOfSingleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4581 TSB : TotalNumOfSingleBonds
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4582 DB : NumOfDoubleBondsToNonHydrogenAtoms or NumOfDoubleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4583 TB : NumOfTripleBondsToNonHydrogenAtoms or NumOfTripleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4584 AB : NumOfAromaticBondsToNonHydrogenAtoms or NumOfAromaticBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4585 H : NumOfImplicitAndExplicitHydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4586 Ar : Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4587 Str : Stereochemistry
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4588 RA : RingAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4589 FC : FormalCharge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4590 AN : AtomicNumber
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4591 AM : AtomicMass
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4592 MN : MassNumber
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4593 SM : SpinMultiplicity
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4594
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4595 =item B<GetAtomicWeight>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4596
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4597 $Value = $Aom->GetAtomicWeight();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4598
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4599 Returns atomic weight of an B<Atom> which corresponds to either explicity set I<AtomicWeight>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4600 atom property or atomic weight of the corresponding element in the periodic table available by
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4601 B<PeriodicTable> module.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4602
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4603 =item B<GetBondToAtom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4604
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4605 $Bond = $Atom->GetBondToAtom($OtherAtom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4606
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4607 Returns a B<Bond> object corresponding to bond between I<Atom> and I<OtherAtom> in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4608 a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4609
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4610 =item B<GetBonds>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4611
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4612 @Bonds = $Aoto->GetBonds();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4613
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4614 Returns an array of B<Bond> objects corresponding to all bonds from I<Atom> to other
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4615 bonded atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4616
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4617 =item B<GetBondsToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4618
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4619 @Bonds = $Atom->GetBondsToHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4620
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4621 Returns an array of B<Bond> objects corresponding to bonds from I<Atom> to other bonded
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4622 non-hydrogen atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4623
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4624 =item B<GetBondsToHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4625
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4626 @Bonds = $Atom->GetBondsToHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4627
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4628 Returns an array of B<Bond> objects corresponding to bonds from I<Atom> to any other
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4629 hydrogen atom in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4630
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4631 =item B<GetBondsToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4632
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4633 @Bonds = $Atom->GetBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4634
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4635 Returns an array of B<Bond> objects corresponding to bonds from I<Atom> to other bonded
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4636 non-hydrogen atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4637
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4638 =item B<GetExactMass>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4639
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4640 $ExactMass = $Atom->GetExactMass();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4641
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4642 Returns exact mass of an I<Atom> which correspond to one of these three values: explicity set
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4643 I<ExactMass> property; mass of natural isotope for an explicty set value of I<MassNumber>; most
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4644 abundant natural isotope mass for I<Atom> with valid atomic number value available by
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4645 B<PerodicTable> module.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4646
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4647 =item B<GetExplicitHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4648
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4649 $NumOfExplicitHydrogens = $Atom->GetExplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4650
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4651 Returns number of hydrogens explicity bonded to an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4652
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4653 =item B<GetFormalCharge>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4654
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4655 $FormalCharge = $Atom->GetFormalCharge();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4656
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4657 Returns formal charge of an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4658
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4659 =item B<GetFreeRadicalElectrons>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4660
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4661 $FreeRadicalElectrons = $Atom->GetFreeRadicalElectrons();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4662
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4663 Returns number of free radical electrons corresponding to to one of these
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4664 three values: I<FreeRadicalElectrons> property; I<SpinMultiplicity> property; value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4665 of 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4666
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4667 For atoms with explicit assignment of I<SpinMultiplicity> atom property values,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4668
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4669 Singlet - two unparied electrons corresponding to one spin state
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4670 Doublet - free radical; an unpaired electron corresponding to two
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4671 spin states
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4672 Triplet - two unparied electrons corresponding to three spin states
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4673 (divalent carbon atoms: carbenes)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4674
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4675 B<FreeRadicalElectrons> are calculated as follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4676
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4677 Doublet: 1 (one valence electron not available for bonding)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4678 Singlet: 2 (two valence electrons not available for bonding)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4679 Triplet: 2 (two valence electrons not available for bonding)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4681 =item B<GetGroupNumber>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4682
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4683 $GroupNumber = $Atom->GetGroupNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4684
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4685 Returns group number of an I<Atom> in a molecule with a valid atomic number.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4686
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4687 =item B<GetHeavyAtomNeighbors>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4688
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4689 $NumOfHeavyAtoms = $Atom->GetHeavyAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4690 @HeavyAtoms = $Atom->GetHeavyAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4691
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4692 Return number of heavy atoms or an array of B<Atom> objects corresponding to heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4693 bonded to an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4694
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4695 =item B<GetHeavyAtomNeighborsAtomInformation>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4696
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4697 ($NumOfAtomNeighbors, $AtomNeighborsRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4698 $NumOfAtomNeighborsType, $AtomNeighborsTypeMapRef) = $Atom->
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4699 GetHeavyAtomNeighborsAtomInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4700
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4701 Returns atoms information for all non-hydrogen atoms attached to an I<Atom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4702 in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4703
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4704 The following values are returned:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4705
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4706 o Number of non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4707 o A reference to an array containing atom objects corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4708 non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4709 o Number of different types of non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4710 o A reference to a hash containing atom symbol as key with value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4711 corresponding to its count for non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4712
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4713 =item B<GetHeavyAtomNeighborsBondformation>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4714
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4715 ($NumOfBonds, $BondTypeCountMapRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4716 $AtomsBondTypesCountMapRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4717 $AtomsBondTypeAtomsMap) = $Atom->
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4718 GetHeavyAtomNeighborsBondformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4719
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4720 Returns bonds information for all non-hydrogen atoms attached to an I<Atom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4721 in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4722
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4723 The following values are returned:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4724
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4725 o Number of bonds to non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4726 o A reference to an array containing bond objects corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4727 non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4728 o A reference to a hash containing bond type as key with value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4729 corresponding to its count for non-hydrogen atom neighbors. Bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4730 types are: Single, Double or Triple
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4731 o A reference to a hash containing atom symbol as key pointing to bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4732 type as second key with values corresponding to count of bond types for atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4733 symbol for non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4734 o A reference to a hash containing atom symbol as key pointing to bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4735 type as second key with values corresponding to atom objects array involved
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4736 in corresponding bond type for atom symbol for non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4737
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4738 =item B<GetHighestCommonValence>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4739
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4740 $HighestCommonValence = $Atom->GetHighestCommonValence();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4741
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4742 Returns highest common valence of an I<Atom> which corresponds to either explicity set
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4743 I<HighestCommonValence> atom property or highest common valence of the corresponding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4744 element in the periodic table available by B<PerodicTable> module.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4745
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4746 =item B<GetHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4747
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4748 $NumOfHydrogens = $Atom->GetHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4749
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4750 Returns total number of hydrogens for an I<Atom> in a molecule including both hydrogen atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4751 neighbors and implicit hydrogens.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4752
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4753 =item B<GetHydrogenAtomNeighbors>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4754
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4755 $NumOfHydrogenAtomNeighbors = $Atom->GetHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4756 @HydrogenAtomNeighbors = $Atom->GetHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4757
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4758 Return number of hydrogen atoms or an array of I<Atom> objects corresponding to hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4759 atoms bonded to an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4760
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4761 =item B<GetImplicitHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4762
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4763 $NumOfImplicitHydrogens = $Atom->GetImplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4764
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4765 Returns number of implicit hydrogens for an I<Atom> in a molecule. This value either
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4766 corresponds to explicitly set I<ImplicitHydrogens> atom property or calculated as the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4767 difference between the value of potential total valence and sum of bond orders to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4768 both hydrogen and non-hydrogen atom neighbors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4769
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4770 =item B<GetPotentialTotalCommonValence>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4771
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4772 $PotentialTotalValence = $Atom->GetPotentialTotalCommonValence();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4773
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4774 Returns potential total common valence of an I<Atom> in a molecule corresponding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4775 to a specific valence model set for the molecule using its B<SetValenceModel> method
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4776 or default internal valence model. It is used during the calculation of missing or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4777 implicit hydrogens.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4778
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4779 The current release of MayaChemTools supports three valence models: I<MDLValenceModel,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4780 DaylightValenceModel, InternalValenceModel or MayaChemToolsValenceModel>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4781
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4782 For I<MDLValenceModel> and I<DaylightValenceModel>, the following data files, distributed
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4783 with the package, are used to calculate potential total valence:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4784
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4785 lib/data/MDLValenceModelData.csv
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4786 lib/data/DaylightValenceModelData.csv
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4787
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4788 The calculation of potential total common valence for these two models is performed as
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4789 follows: Calculate current effective total valence of the I<Atom> by adding up the bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4790 order of its neighbors and number of free radical electrons; Find available common valence
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4791 for the I<Atom>, corresponding to any specified formal charge, higher than the effective
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4792 total valence, and return it as I<PotentialTotalValence>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4793
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4794 The calculation of potential total common valence For I<InternalValenceModel> or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4795 I<MayaChenToolsValenceModel> doesn't uses B<PeriodicTable> module to retrieve values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4796 for common valence, which in turn reads in PeriodicTableElements.csv file distributed with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4797 the package.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4798
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4799 For elements with one one common valence, potential total common valence corresponds
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4800 to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4801
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4802 CommonValence + FormalCharge - FreeRadicalElectrons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4803
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4804 For elements with multiple common valences, each common valence is used to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4805 calculate total potential common valence as shown above, and the first total potential
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4806 common valence greater than the sum of bond orders to all neighbors is selected as
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4807 the final total common valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4808
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4809 FormalCharge sign is reversed for electropositive elements with positive formal charge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4810 during common valence calculations. Electropositive elements, metals and transition elements,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4811 have usually plus formal charge and it leads to decrease in common valence; the negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4812 formal charge should result in the decrease of common valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4813
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4814 The sign of formal charge is adjusted as follows.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4815
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4816 Group numbers > 14 - Group numbers 15 (N), 16 (O), 17 (F), 18 (He):
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4817
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4818 Formal charge sign is not adjusted. Positive and negative values result in the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4819 increase and decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4820
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4821 Group 14 containing C, Si, Ge, Sn, Pb...:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4822
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4823 Formal charge sign is reversed for positive values. Both positive and negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4824 values result in the decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4825
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4826 Group 13 containing B, Al, Ga, In, Tl...:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4827
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4828 Formal charge sign is always reversed. Positive and negative values result in the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4829 decrease and increase of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4830
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4831 Groups 1 (H) through 12 (Zn)...:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4832
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4833 Formal charge sign is reversed for positive values. Both positive and negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4834 values result in the decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4835
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4836 Lanthanides and actinides:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4837
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4838 Formal charge sign is reversed for positive values. Both positive and negative
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4839 values result in the decrease of valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4840
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4841 =item B<GetLargestBondOrder>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4842
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4843 $LargestBO =$Atom->GetLargestBondOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4844
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4845 Returns largest bond order for an I<Atom> among the bonds to other atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4846
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4847 =item B<GetLargestBondOrderToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4848
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4849 $LargestBO =$Atom->GetLargestBondOrderToHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4850
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4851 Returns largest bond order for an I<Atom> among the bonds to other heavy atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4852
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4853 =item B<GetLargestBondOrderToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4854
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4855 $LargestBO =$Atom->GetLargestBondOrderToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4856
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4857 Returns largest bond order for an I<Atom> among the bonds to other non-hydrogen atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4858 in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4859
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4860 =item B<GetLargestRing>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4861
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4862 @RingAtoms = $Atom->GetLargestRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4863
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4864 Returns an array of ring I<Atom> objects corresponding to the largest ring containing I<Atom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4865 in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4866
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4867 =item B<GetLowestCommonValence>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4868
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4869 $LowestCommonValence = $Atom->GetLowestCommonValence();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4870
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4871 Returns lowest common valence of an I<Atom> which corresponds to either explicity set
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4872 I<LowestCommonValence> atom property or highest common valence of the corresponding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4873 element in the periodic table available by B<PerodicTable> module.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4874
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4875 =item B<GetMassNumber>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4876
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4877 $MassNumber = $Aom->GetMassNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4878
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4879 Returns atomic weight of an B<Atom> which corresponds to either explicity set I<MassNumber>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4880 atom property or mass number of the most abundant natural isotope of the corresponding element
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4881 in the periodic table available by B<PeriodicTable> module.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4882
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4883 =item B<GetMissingHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4884
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4885 $NumOfMissingHydrogens = $Atom->GetMissingHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4886
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4887 Returns number of missing hydrogens for an I<Atom> in a molecule. This value either
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4888 corresponds to explicitly set I<ImplicitHydrogens> atom property or calculated as the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4889 difference between the value of potential total valence and sum of bond orders to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4890 both hydrogen and non-hydrogen atom neighbors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4891
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4892 =item B<GetNeighbors>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4893
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4894 $NumOfNeighbors = $Atom->GetNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4895 @Neighbors = $Atom->GetNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4896
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4897 Returns number of neighbor atoms or an array of I<Atom> objects corresponding to all
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4898 atoms bonded to an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4899
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4900 =item B<GetNeighborsUsingAtomSpecification>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4901
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4902 @AtomNeighbors = $Atom->GetNeighborsUsingAtomSpecification($AtomSpec);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4903 $NumOfNeighbors = $Atom->GetNeighborsUsingAtomSpecification($AtomSpec);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4904
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4905 @AtomNeighbors = $Atom->GetNeighborsUsingAtomSpecification($AtomSpec,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4906 @ExcludeNeighbors);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4907
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4908 Returns number of neighbor atoms or an array of I<Atom> objects matching atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4909 specification corresponding to atom neighbors of an I<Atom> in a molecule. Optionally,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4910 I<Atom> neighbors can be excluded from the neighbors list using I<ExcludeNeighbors>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4911
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4912 Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4913
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4914 o AtomSpecification correspond to any valid AtomicInvariant based atomic specifications
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4915 as supported by DoesAtomNeighborhoodMatch method
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4916 o Multiple atom specifications can be used in a string delimited by comma
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4917
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4918 =item B<GetNonHydrogenAtomNeighbors>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4919
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4920 $NumOfNeighbors = $Atom->GetNonHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4921 @Neighbors = $Atom->GetNonHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4922
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4923 Returns number of non-hydrogen atoms or an array of B<Atom> objects corresponding to non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4924 atoms bonded to an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4925
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4926 =item B<GetNonHydrogenAtomNeighborsAtomInformation>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4927
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4928 ($NumOfAtomNeighbors, $AtomNeighborsRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4929 $NumOfAtomNeighborsType, $AtomNeighborsTypeMapRef) = $Atom->
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4930 GetNonHydrogenAtomNeighborsAtomInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4931
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4932 Returns atoms information for all non-hydrogen atoms attached to an I<Atom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4933 in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4934
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4935 The following values are returned:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4936
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4937 o Number of non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4938 o A reference to an array containing atom objects corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4939 non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4940 o Number of different types of non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4941 o A reference to a hash containing atom symbol as key with value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4942 corresponding to its count for non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4943
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4944
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4945 =item B<GetNonHydrogenAtomNeighborsBondInformation>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4946
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4947 ($NumOfBonds, $BondTypeCountMapRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4948 $AtomsBondTypesCountMapRef,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4949 $AtomsBondTypeAtomsMap) = $Atom->
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4950 GetNonHydrogenAtomNeighborsBondInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4951
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4952 Returns bonds information for all non-hydrogen atoms attached to an I<Atom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4953 in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4954
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4955 The following values are returned:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4956
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4957 o Number of bonds to non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4958 o A reference to an array containing bond objects corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4959 non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4960 o A reference to a hash containing bond type as key with value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4961 corresponding to its count for non-hydrogen atom neighbors. Bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4962 types are: Single, Double or Triple
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4963 o A reference to a hash containing atom symbol as key pointing to bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4964 type as second key with values corresponding to count of bond types for atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4965 symbol for non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4966 o A reference to a hash containing atom symbol as key pointing to bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4967 type as second key with values corresponding to atom objects array involved
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4968 in corresponding bond type for atom symbol for non-hydrogen atom neighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4969
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4970 =item B<GetNonHydrogenNeighborOfHydrogenAtom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4971
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4972 $Atom = $Atom->GetNonHydrogenNeighborOfHydrogenAtom();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4973
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4974 Returns non-hydrogen or heavy atom neighbor of a hydrogen atom in a molecule..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4975
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4976 =item B<GetNumOfAromaticBondsToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4977
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4978 $NumOfBonds = $Atom->GetNumOfAromaticBondsToHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4979
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4980 Returns number of aromatic bonds from an I<Atom> to other non-hydrogen or heavy atoms in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4981 a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4982
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4983 =item B<GetNumOfAromaticBondsToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4984
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4985 $NumOfBonds = $Atom->GetNumOfAromaticBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4986
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4987 Returns number of aromatic bonds from an I<Atom> to other non-hydrogen or heavy atoms in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4988 a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4989
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4990 =item B<GetNumOfBonds>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4991
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4992 $NumOfBonds = $Atom->GetNumOfBonds();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4993
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4994 Returns number of bonds from an I<Atom> to other atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4995
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4996 =item B<GetNumOfBondsAvailableForHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4997
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4998 $NumOfBonds = $Atom->GetNumOfBondsAvailableForHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4999
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5000 Get number of bonds available to form additional bonds with heavy atoms, excluding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5001 any implicit bonds to hydrogens set using I<ImplicitHydrogens> property.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5002
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5003 It's different from number of implicit or missing hydrogens, both of which are equivalent.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5004
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5005 For example, in a SMILES string, [nH] ring atom corresponds to an aromatic nitrogen.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5006 Although the hydrogen specified for n is treated internally as implicit hydrogen and shows
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5007 up in missing hydrogen count, it's not available to participate in double bonds to additional
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5008 heavy atoms.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5009
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5010 =item B<GetNumOfBondsAvailableForNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5011
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5012 $NumOfBonds = $Atom->GetNumOfBondsAvailableForNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5013
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5014 Get number of bonds available to form additional bonds with heavy atoms, excluding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5015 any implicit bonds to hydrogens set using ImplicitHydrogens property.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5016
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5017 =item B<GetNumOfBondsToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5018
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5019 $NumOfBondsToHeavyAtoms = $Atom->GetNumOfBondsToHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5020
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5021 Returns number of bonds from an I<Atom> to other heavy atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5022
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5023 =item B<GetNumOfBondsToHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5024
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5025 $NumOfBonds = $Atom->GetNumOfBondsToHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5026
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5027 Returns number of bonds from an I<Atom> to other hydrogen atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5028
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5029 =item B<GetNumOfBondsToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5030
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5031 $NumOfBonds = $Atom->GetNumOfBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5032
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5033 Returns number of bonds from an I<Atom> to other non-hydrogen atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5034
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5035 =item B<GetNumOfBondTypesToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5036
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5037 ($NumOfSingleBonds, $NumOfDoubleBonds,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5038 $NumOfTripleBonds, $NumOfAromaticBonds) = $Atom->
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5039 GetNumOfBondTypesToHeavyAtoms($CountAromaticBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5040
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5041 Get number of single, double, triple, and aromatic bonds from an I<Atom> to all other
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5042 non-hydrogen atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5043
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5044 Value of I<CountAtomaticBonds> parameter controls whether number of aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5045 bonds is returned; default is not to count aromatic bonds. During counting of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5046 aromatic bonds, the bond marked aromatic is not included in the count
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5047 of other bond types.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5048
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5049 =item B<GetNumOfBondTypesToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5050
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5051 ($NumOfSingleBonds, $NumOfDoubleBonds,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5052 $NumOfTripleBonds, $NumOfAromaticBonds) = $Atom->
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5053 GetNumOfBondTypesToNonHydrogenAtoms($CountAromaticBonds);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5054
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5055 Get number of single, double, triple, and aromatic bonds from an I<Atom> to all other
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5056 non-hydrogen atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5057
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5058 Value of I<CountAtomaticBonds> parameter controls whether number of aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5059 bonds is returned; default is not to count aromatic bonds. During counting of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5060 aromatic bonds, the bond marked aromatic is not included in the count
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5061 of other bond types.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5062
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5063 =item B<GetNumOfDoubleBondsToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5064
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5065 $NumOfDoubleBonds = $Atom->GetNumOfDoubleBondsToHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5066
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5067 Returns number of double bonds from an I<Atom> to other heavy atoms or non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5068 atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5069
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5070 =item B<GetNumOfDoubleBondsToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5071
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5072 $NumOfDoubleBonds =$Atom->GetNumOfDoubleBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5073
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5074 Returns number of double bonds from an I<Atom> to other heavy atoms or non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5075 atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5076
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5077 =item B<GetNumOfHeavyAtomNeighbors>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5078
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5079 $NumOfNeighbors = $Atom->GetNumOfHeavyAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5080
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5081 Returns number heavy atom neighbors for an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5082
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5083 =item B<GetNumOfHydrogenAtomNeighbors>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5084
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5085 $NumOfNeighbors = $Atom->GetNumOfHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5086
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5087 Returns number hydrogens atom neighbors for an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5088
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5089 =item B<GetNumOfMissingHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5090
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5091 $NumOfMissingHydrogens = $Atom->GetNumOfMissingHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5092
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5093 Returns number of implicit hydrogens for an I<Atom> in a molecule. This value either
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5094 corresponds to explicitly set I<ImplicitHydrogens> atom property or calculated as the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5095 difference between the value of potential total valence and sum of bond orders to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5096 both hydrogen and non-hydrogen atom neighbors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5097
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5098 =item B<GetNumOfExplicitHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5099
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5100 $NumOfExplicitHydrogens = $Atom->GetNumOfExplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5101
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5102 Returns number hydrogens atom neighbors for an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5103
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5104 =item B<GetNumOfHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5105
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5106 $NumOfHydrogens = $Atom->GetNumOfHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5107
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5108 Returns total number of hydrogens for an I<Atom> in a molecule including both hydrogen atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5109 neighbors and implicit hydrogens.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5110
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5111 =item B<GetNumOfImplicitHydrogens>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5112
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5113 $NumOfImplicitHydrogens = $Atom->GetNumOfImplicitHydrogens();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5114
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5115 Returns number of implicit hydrogens for an I<Atom> in a molecule. This value either
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5116 corresponds to explicitly set I<ImplicitHydrogens> atom property or calculated as the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5117 difference between the value of potential total valence and sum of bond orders to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5118 both hydrogen and non-hydrogen atom neighbors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5119
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5120 =item B<GetNumOfNeighbors>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5121
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5122 $NumOfNeighbors = $Atom->GetNumOfNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5123
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5124 Returns number atom neighbors for an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5125
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5126 =item B<GetNumOfNonHydrogenAtomNeighbors>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5127
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5128 $NumNeighbors = $This->GetNumOfNonHydrogenAtomNeighbors();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5129
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5130 Returns number non-hydrogens atom neighbors for an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5131
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5132 =item B<GetNumOfRings>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5133
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5134 $NumOfRings = $Atom->GetNumOfRings();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5135
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5136 Returns number of rings containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5137
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5138 =item B<GetNumOfRingsWithEvenSize>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5139
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5140 $NumOfRings = $Atom->GetNumOfRingsWithEvenSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5141
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5142 Returns number of rings with even size containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5143
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5144 =item B<GetNumOfRingsWithOddSize>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5145
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5146 $NumOfRings = $Atom->GetNumOfRingsWithOddSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5147
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5148 Returns number of rings with odd size containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5149
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5150 =item B<GetNumOfRingsWithSize>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5151
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5152 $NumOfRings = $Atom->GetNumOfRingsWithSize($RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5153
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5154 Returns number of rings with specific I<RingSize> containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5155
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5156 =item B<GetNumOfRingsWithSizeGreaterThan>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5157
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5158 $NumOfRings = $Atom->GetNumOfRingsWithSizeGreaterThan($RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5159
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5160 Returns number of rings with size greater than specific I<RingSize> containing I<Atom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5161 in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5162
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5163 =item B<GetNumOfRingsWithSizeLessThan>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5164
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5165 $NumOfRings = $Atom->GetNumOfRingsWithSizeLessThan($RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5166
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5167 Returns number of rings with size less than specific I<RingSize> containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5168
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5169 =item B<GetNumOfSigmaAndPiBondsToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5170
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5171 ($NumOfSigmaBonds, $NumOfPiBonds) = $Atom->
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5172 GetNumOfSigmaAndPiBondsToHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5173
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5174 Get number of sigma and pi bonds from an I<Atom> to all other non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5175 atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5176
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5177 Sigma and pi bonds are counted using the following methodology: a single bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5178 correspond to one sigma bond; a double bond contributes one to sigma bond count
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5179 and one to pi bond count; a triple bond contributes one to sigma bond count and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5180 two to pi bond count.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5181
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5182
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5183 =item B<GetNumOfSigmaAndPiBondsToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5184
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5185 ($NumOfSigmaBonds, $NumOfPiBonds) = $Atom->
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5186 GetNumOfSigmaAndPiBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5187
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5188 Get number of sigma and pi bonds from an I<Atom> to all other non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5189 atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5190
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5191 Sigma and pi bonds are counted using the following methodology: a single bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5192 correspond to one sigma bond; a double bond contributes one to sigma bond count
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5193 and one to pi bond count; a triple bond contributes one to sigma bond count and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5194 two to pi bond count.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5195
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5196 =item B<GetNumOfSingleBondsToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5197
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5198 $NumOfSingleBonds =$Atom->GetNumOfSingleBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5199
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5200 Returns number of single bonds from an I<Atom> to other heavy atoms or non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5201 atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5202
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5203 =item B<GetNumOfSingleBondsToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5204
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5205 $NumOfSingleBonds = $Atom->GetNumOfSingleBondsToHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5206
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5207 Returns number of single bonds from an I<Atom> to other heavy atoms or non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5208 atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5209
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5210 =item B<GetNumOfTripleBondsToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5211
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5212 $NumOfTripleBonds =$Atom->GetNumOfTripleBondsToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5213
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5214 Returns number of triple bonds from an I<Atom> to other heavy atoms or non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5215 atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5216
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5217 =item B<GetNumOfTripleBondsToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5218
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5219 $NumOfTripleBonds = $Atom->GetNumOfTripleBondsToHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5220
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5221 Returns number of triple bonds from an I<Atom> to other heavy atoms or non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5222 atoms in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5223
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5224 =item B<GetPeriodNumber>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5225
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5226 $PeriodNumber = $Atom->GetPeriodNumber();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5227
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5228 Returns periodic table period number for an I<Atom> in a molecule with a valid atomic number .
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5229
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5230 =item B<GetRings>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5231
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5232 @Rings = $Aotm->GetRings();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5233
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5234 Returns an array of references to arrays containing ring atoms corressponding to all rings containing
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5235 I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5236
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5237 =item B<GetRingsWithEvenSize>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5238
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5239 @Rings = $Aotm->GetRingsWithEvenSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5240
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5241 Returns an array of references to arrays containing ring atoms corressponding to all rings with even size
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5242 containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5243
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5244 =item B<GetRingsWithOddSize>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5245
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5246 @Rings = $Aotm->GetRingsWithOddSize();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5247
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5248 Returns an array of references to arrays containing ring atoms corressponding to all rings with odd size
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5249 containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5250
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5251 =item B<GetRingsWithSize>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5252
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5253 @Rings = $Aotm->GetRingsWithSize($RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5254
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5255 Returns an array of references to arrays containing ring atoms corressponding to all rings with specific
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5256 I<RingSize >containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5257
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5258 =item B<GetRingsWithSizeGreaterThan>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5259
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5260 @Rings = $Aotm->GetRingsWithSizeGreaterThan($RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5261
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5262 Returns an array of references to arrays containing ring atoms corressponding to all rings with size
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5263 greater than specific I<RingSize >containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5264
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5265 =item B<GetRingsWithSizeLessThan>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5266
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5267 @Rings = $Aotm->GetRingsWithSizeLessThan($RingSize);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5268
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5269 Returns an array of references to arrays containing ring atoms corressponding to all rings with size
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5270 less than specific I<RingSize >containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5271
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5272 =item B<GetSizeOfLargestRing>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5273
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5274 $Size = $Atom->GetSizeOfLargestRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5275
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5276 Returns size of the largest ring containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5277
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5278 =item B<GetSizeOfSmallestRing>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5279
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5280 $Size = $Atom->GetSizeOfSmallestRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5281
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5282 Returns size of the smallest ring containing I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5283
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5284 =item B<GetSmallestRing>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5285
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5286 @RingAtoms = $Atom->GetSmallestRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5287
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5288 Returns an array of ring I<Atom> objects corresponding to the largest ring containing I<Atom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5289 in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5290
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5291 =item B<GetSpinMultiplicity>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5292
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5293 $SpinMultiplicity = $Atom->GetSpinMultiplicity();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5294
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5295 Returns spin multiplicity of an I<Atom> corresponding to one of these three
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5296 values: explicitly set B<SpinMultiplicity> property value; calculated from
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5297 B<FreeRadicalElectrons> property; value of 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5298
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5299 The B<SpinMultiplicity> is calculate from I<FreeRadicalElectrons> property as
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5300 follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5301
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5302 FreeRadicalElectrons: 1; SpinMultiplicity: 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5303 FreeRadicalElectrons: 2; SpinMultiplicity: 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5304 FreeRadicalElectrons: other; SpinMultiplicity: 0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5305
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5306 =item B<GetSumOfBondOrders>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5307
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5308 $SumBondOrders = $Atom->GetSumOfBondOrders();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5309
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5310 Returns sum of bond orders corresponding to all atoms bonded to an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5311
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5312 =item B<GetSumOfBondOrdersToHeavyAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5313
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5314 $SumBondOrders = $Atom->GetSumOfBondOrdersToHeavyAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5315
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5316 Returns sum of bond orders corresponding to all heavy atoms bonded to an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5317
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5318 =item B<GetSumOfBondOrdersToHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5319
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5320 $SumBondOrders = $Atom->GetSumOfBondOrdersToHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5321
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5322 Returns sum of bond orders corresponding to all hydrogen atoms bonded to an I<Atom> in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5323
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5324 =item B<GetSumOfBondOrdersToNonHydrogenAtoms>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5325
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5326 $SumBondOrders = $Atom->GetSumOfBondOrdersToNonHydrogenAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5327
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5328 Returns sum of bond orders corresponding to all non-hydrogen atoms bonded to an I<Atom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5329 in a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5330
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5331 =item B<GetValence>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5332
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5333 $Valence = $Atom->GetValence();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5334
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5335 Returns valence of an I<Atom> in a molecule. Valence corresponds to number of electrons used
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5336 by an atom in bonding:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5337
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5338 Valence = ValenceElectrons - ValenceFreeElectrons = BondingElectrons
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5339
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5340 Single, double and triple bonds with bond orders of 1, 2, and 3 correspond to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5341 contribution of 1, 2, and 3 bonding electrons. So:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5342
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5343 Valence = SumOfBondOrders + NumOfMissingHydrogens + FormalCharge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5344
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5345 where positive and negative values of FormalCharge increase and decrease the number of bonding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5346 electrons, respectively.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5347
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5348 The current release of MayaChemTools supports the following three valence models, which
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5349 are used during calculation of implicit hydrogens: MDLValenceModel, DaylightValenceModel,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5350 InternalValenceModel or MayaChemToolsValenceModel.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5351
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5352 Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5353
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5354 . Missing hydrogens are included in the valence.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5355 . For neutral molecules, valence and sum of bond orders are equal.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5356 . For molecules containing only single bonds, SumOfBondOrders and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5357 NumOfBonds are equal.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5358 . Free radical electrons lead to the decrease in valence. For atoms with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5359 explicit assignment of SpinMultiplicity property values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5360 Singlet (two unparied electrons corresponding to one spin state), Doublet
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5361 (free radical; an unpaired electron corresponding to two spin states),
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5362 and Triplet (two unparied electrons corresponding to three spin states;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5363 divalent carbon atoms (carbenes)), FreeRadicalElectrons are calculated as follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5364
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5365 SpinMultiplicity: Doublet(2); FreeRadicalElectrons: 1 (one valence
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5366 electron not available for bonding)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5367 SpinMultiplicity: Singlet(1)/Triplet(3); FreeRadicalElectrons: 2 (two
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5368 valence electrons not available for bonding)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5369
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5370 =item B<GetValenceElectrons>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5371
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5372 $ValenceElectrons = $Atom->GetValenceElectrons();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5373
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5374 Returns valence electrons for an B<Atom> which corresponds to either explicity set I<ValenceElectrons>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5375 atom property or valence electrons for the corresponding element in the periodic table available by
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5376 B<PeriodicTable> module.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5377
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5378 =item B<GetValenceFreeElectrons>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5379
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5380 $ValenceFreeElectrons = $Atom->GetValenceFreeElectrons();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5381 $ValenceFreeElectrons = $Atom->GetValenceFreeElectrons(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5382 $ExcludeFreeRadicalElectrons);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5383
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5384 Returns valence frees electrons for an B<Atom> in a molecule. It corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5385
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5386 ValenceElectrons - Valence
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5387 or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5388 ValenceElectrons - NumOfMissingHydrogens - SumOfBondOrders - FormalCharge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5389
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5390 Free radical electrons are included in the valence free electrons count by default.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5391
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5392 Examples:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5393
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5394 NH3: ValenceFreeElectrons = 5 - 3 = 5 - 3 - 0 - 0 = 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5395 NH2: ValenceFreeElectrons = 5 - 3 = 5 - 2 - 1 - 0 = 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5396 NH4+; ValenceFreeElectrons = 5 - 5 = 5 - 4 - 0 - 1 = 0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5397 NH3+; ValenceFreeElectrons = 5 - 5 = 5 - 3 - 1 - 1 = 0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5398 C(=O)O- : ValenceFreeElectrons on O- = 6 - 0 = 6 - 1 - 0 - (-1) = 6
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5399 C(=O)O- : ValenceFreeElectrons on =O = 6 - 2 = 6 - 2 - 0 - 0 = 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5400
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5401 =item B<GetX>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5402
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5403 $X = $Atom->GetX();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5404
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5405 Returns value of X-coordinate for an I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5407 =item B<GetXYZ>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5408
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5409 @XYZ = $Atom->GetXYZ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5410 $XYZRef = $Atom->GetXYZ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5411
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5412 Returns an array or a reference to an array containing values for I<Atom> coordinates.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5413
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5414 =item B<GetXYZVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5415
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5416 $XYZVector = $Atom->GetXYZVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5417
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5418 Returns a I<Vector> object containing values for I<Atom> coordinates
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5419
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5420 =item B<GetY>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5421
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5422 $Y = $Atom->GetY();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5423
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5424 Returns value of Y-coordinate for an I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5425
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5426 =item B<GetZ>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5427
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5428 $Z = $Atom->GetZ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5429
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5430 Returns value of Z-coordinate for an I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5431
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5432 =item B<IsAmideCarbon>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5433
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5434 $Status = $Atom->IsAmideCarbon();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5435
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5436 Returns 1 or 0 based on whether it's amide carbon I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5437
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5438 An amide group is defineds as:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5439
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5440 R-C(=O)-N(-R')-R''
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5441
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5442 where:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5443
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5444 o R = Hydrogen or groups of atoms attached through carbon
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5445 o R' = Hydrogens or groups of atoms attached through carbon or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5446 hetro atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5447 o R'' = Hydrogens or groups of atoms attached through carbon or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5448 hetro atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5449
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5450 =item B<IsAmideNitrogen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5451
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5452 $Status = $Atom->IsAmideNitrogen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5453
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5454 Returns 1 or 0 based on whether it's amide nitrogen I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5455
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5456 =item B<IsAromatic>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5457
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5458 $Status = $Atom->IsAromatic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5459
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5460 Returns 1 or 0 based on whether it's an aromatic I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5461
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5462 =item B<IsArsenic>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5463
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5464 $Status = $Atom->IsArsenic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5465
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5466 Returns 1 or 0 based on whether it's an arsenic I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5467
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5468 =item B<IsBondedToAtom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5469
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5470 $Status = $Atom->IsBondedToAtom($OtherAtom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5471
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5472 Returns 1 or 0 based on whether I<Atom> is bonded to I<OtherAtom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5473
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5474 =item B<IsBromine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5475
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5476 $Status = $Atom->IsBromine();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5477
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5478 Returns 1 or 0 based on whether it's a bromine I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5479
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5480 =item B<IsCarbon>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5481
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5482 $Status = $Atom->IsCarbon();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5483
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5484 Returns 1 or 0 based on whether it's a carbon I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5485
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5486 =item B<IsCarboxylCarbon>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5487
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5488 $Status = $Atom->IsCarboxylCarbon();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5489
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5490 Returns 1 or 0 based on whether it's a carboxyl carbon atom in carboxyl group:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5491 R-C(=O)-OH.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5492
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5493 =item B<IsCarboxylOxygen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5494
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5495 $Status = $Atom->IsCarboxylOxygen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5496
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5497 Returns 1 or 0 based on whether it's a carboxyl oxygen atom in carboxyl group:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5498 R-C(=O)-OH.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5499
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5500 =item B<IsCarboxylateCarbon>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5501
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5502 $Status = $Atom->IsCarboxylateCarbon();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5503
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5504 Returns 1 or 0 based on whether it's a carboxylate carbon atom in carboxyl group:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5505 R-C(=O)-O-.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5506
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5507 =item B<IsCarboxylateOxygen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5508
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5509 $Status = $Atom->IsCarboxylateOxygen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5510
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5511 Returns 1 or 0 based on whether it's a carboxylate oxygen atom in carboxyl group:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5512 R-C(=O)-O-.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5513
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5514 =item B<IsChlorine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5515
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5516 $Status = $Atom->IsChlorine();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5517
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5518 Returns 1 or 0 based on whether it's a chlorine I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5519
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5520 =item B<IsFluorine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5521
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5522 $Status = $Atom->IsFluorine();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5523
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5524 Returns 1 or 0 based on whether it's a fluorine I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5525
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5526 =item B<IsFunctionalClassType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5527
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5528 $Status =$Atom->IsFunctionalClassType($Type);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5529
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5530 Returns 1 or 0 based on whether it's a specified functional class I<Type>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5531
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5532 The current release of MayaChemTools supports following abbreviations and descriptive
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5533 names for I<FunctionalClassType>:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5534
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5535 HBD: HydrogenBondDonor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5536 HBA: HydrogenBondAcceptor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5537 PI : PositivelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5538 NI : NegativelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5539 Ar : Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5540 Hal : Halogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5541 H : Hydrophobic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5542 RA : RingAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5543 CA : ChainAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5544
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5545 The following definitions are used to determine functional class types: [ Ref 60-61, Ref 65-66 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5546
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5547 HydrogenBondDonor: NH, NH2, OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5548 HydrogenBondAcceptor: N[!H], O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5549 PositivelyIonizable: +, NH2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5550 NegativelyIonizable: -, C(=O)OH, S(=O)OH, P(=O)OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5551
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5552 =item B<IsGuadiniumCarbon>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5553
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5554 $Status = $Atom->IsGuadiniumCarbon();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5555
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5556 Returns 1 or 0 based on whether it's a guadinium carbon in guadinium group by
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5557 checking its neighbors for a nitrogen in guadinium group.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5558
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5559 =item B<IsGuadiniumNitrogen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5560
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5561 $Status = $Atom->IsGuadiniumNitrogen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5562
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5563 Returns 1 or 0 based on whether it's a guadinium nitrogen in guadinium group.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5564
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5565 A guadinium group is defined as:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5566
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5567 R2N-C(=NR)-(NR2) or R2N-C(=NR2+)-(NR2)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5568
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5569 where:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5570
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5571 o R = Hydrogens or group of atoms attached through carbon
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5572 o Only one of the three nitrogens has a double bond to carbon
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5573 and has optional formal charge allowing it to be neutral or charged state
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5574
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5575 =item B<IsHBondAcceptor>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5576
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5577 $Status =$Atom->IsHBondAcceptor();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5578 $Status =$Atom->IsHBondAcceptor($HydrogenBondsType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5579
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5580 Returns 1 or 0 based on whether it's a hydrogen bond acceptor I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5581
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5582 =item B<IsHBondDonor>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5583
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5584 $Status =$Atom->IsHBondDonor();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5585 $Status =$Atom->IsHBondDonor($HydrogenBondsType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5586
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5587 Returns 1 or 0 based on whether it's a hydrogen bond donor I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5588
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5589 =item B<IsHydrogenBondAcceptor>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5590
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5591 $Status =$Atom->IsHydrogenBondAcceptor();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5592 $Status =$Atom->IsHydrogenBondAcceptor($HydrogenBondsType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5593
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5594 Returns 1 or 0 based on whether it's a hydrogen bond acceptor I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5595
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5596 =item B<IsHydrogenBondDonor>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5597
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5598 $Status =$Atom->IsHydrogenBondDonor();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5599 $Status =$Atom->IsHydrogenBondDonor($HydrogenBondsType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5600
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5601 Returns 1 or 0 based on whether it's a hydrogen bond donor I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5602
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5603 The current release of MayaChemTools supports identification of two types of hydrogen bond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5604 donor and acceptor atoms with these names:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5605
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5606 HBondsType1 or HydrogenBondsType1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5607 HBondsType2 or HydrogenBondsType2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5608
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5609 The names of these hydrogen bond types are rather arbitrary. However, their definitions have
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5610 specific meaning and are as follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5611
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5612 HydrogenBondsType1 [ Ref 60-61, Ref 65-66 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5613
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5614 Donor: NH, NH2, OH - Any N and O with available H
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5615 Acceptor: N[!H], O - Any N without available H and any O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5616
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5617 HydrogenBondsType2 [ Ref 91 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5618
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5619 Donor: NH, NH2, OH - N and O with available H
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5620 Acceptor: N, O - And N and O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5621
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5622 By default, I<HydrogenBondsType1> is used to calculate number hydrogen bond donor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5623 and acceptor atoms. I<HydrogenBondsType2> corresponds to B<RuleOf5> definition
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5624 of hydrogen bond donors and acceptors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5625
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5626 =item B<IsHalogen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5627
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5628 $Status =$Atom->IsHalogen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5629
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5630 Returns 1 or 0 based on whether it's a halogen I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5631
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5632 =item B<IsHeteroAtom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5633
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5634 $Status = $Atom->IsHeteroAtom();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5635
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5636 Returns 0 or 1 based on whether it's a hetro I<Atom>. Following atoms are considered hetro atoms:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5637 B<N, O, F, P, S, Cl, Br, I>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5638
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5639 =item B<IsHydrogen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5640
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5641 $Status = $Atom->IsHydrogen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5642
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5643 Returns 1 or 0 based on whether it's a hydrogen I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5644
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5645 =item B<IsHydrophobic>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5646
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5647 $Status =$Atom->IsHydrophobic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5648
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5649 Returns 1 or 0 based on whether it's a hydrophobic I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5650
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5651 =item B<IsInRing>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5652
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5653 $Status = $Atom->IsInRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5654
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5655 Returns 1 or 0 based on whether I<Atom> is present in a ring.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5656
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5657 =item B<IsInRingOfSize>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5658
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5659 $Status = $Atom->IsInRingOfSize($Size);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5660
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5661 Returns 1 or 0 based on whether I<Atom> is present in a ring of specific I<Size>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5662
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5663 =item B<IsIodine>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5664
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5665 $Status = $Atom->IsIodine();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5666
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5667 Returns 1 or 0 based on whether it's an iodine I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5668
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5669 =item B<IsIsotope>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5670
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5671 $Status =$Atom->IsIsotope();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5672
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5673 Returns 1 or 0 based on whether it's an isotope I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5674
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5675 =item B<IsLipophilic>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5676
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5677 $Status =$Atom->IsLipophilic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5678
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5679 Returns 1 or 0 based on whether it's a lipophilic I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5681 =item B<IsMetallic>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5682
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5683 $Status = $Atom->IsMetallic();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5684
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5685 Returns 1 or 0 based on whether it's a metallic I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5686
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5687 =item B<IsNegativelyIonizable>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5688
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5689 $Status =$Atom->IsNegativelyIonizable();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5690
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5691 Returns 1 or 0 based on whether it's a negatively ionizable atom I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5692
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5693 =item B<IsNitrogen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5694
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5695 $Status = $Atom->IsNitrogen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5696
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5697 Returns 1 or 0 based on whether it's a nitrogen I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5698
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5699 =item B<IsNonCarbonOrHydrogen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5700
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5701 $Status =$Atom->IsNonCarbonOrHydrogen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5702
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5703 Returns 1 or 0 based on whether it's not a carbon or hydrogen I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5704
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5705 =item B<IsNotInRing>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5706
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5707 $Status = $Atom->IsNotInRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5708
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5709 Returns 1 or 0 based on whether I<Atom> is not present in a ring.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5710
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5711 =item B<IsOnlyInOneRing>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5712
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5713 $Status = $Atom->IsOnlyInOneRing();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5714
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5715 Returns 1 or 0 based on whether I<Atom> is only present in one ring.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5716
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5717 =item B<IsOxygen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5718
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5719 $Status = $Atom->IsOxygen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5720
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5721 Returns 0 or 1 based on whether it's an oxygen I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5722
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5723 =item B<IsPhosphorus>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5724
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5725 $Status = $Atom->IsPhosphorus();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5726
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5727 Returns 0 or 1 based on whether it's a phosphorus I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5728
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5729 =item B<IsPhosphateOxygen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5730
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5731 $Status = $Atom->IsPhosphateOxygen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5732
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5733 Returns 1 or 0 based on whether it's a phosphate oxygen in phosphate group.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5734
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5735 A phosphate group is defined as:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5736
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5737 AO-(O=)P(-OA)-OA
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5738
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5739 Where:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5740
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5741 A - Any group of atoms including hydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5742
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5743 =item B<IsPhosphatePhosphorus>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5744
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5745 $Status = $Atom->IsPhosphatePhosphorus();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5746
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5747 Returns 1 or 0 based on whether it's a phosphate phosphorus in phosphate group.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5748
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5749 =item B<IsPolarAtom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5750
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5751 $Status = $Atom->IsPolarAtom();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5752
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5753 Returns 0 or 1 based on whether it's a polar I<Atom>. Following atoms are considered polar atoms:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5754 B<N, O, P, S>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5755
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5756 =item B<IsPolarHydrogen>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5757
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5758 $Status = $Atom->IsPolarHydrogen();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5759
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5760 Returns 0 or 1 based on whether it's a hydrogen I<Atom> bonded to a polar atom.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5761
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5762 =item B<IsPositivelyIonizable>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5763
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5764 $Status =$Atom->IsPositivelyIonizable();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5765
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5766 Returns 1 or 0 based on whether it's a positively ionizable I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5767
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5768 =item B<IsSaturated>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5769
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5770 $Status = $Atom->IsSaturated();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5771
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5772 Returns 1 or 0 based on whether it's a saturated I<Atom>. An atom attached
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5773 to other atoms with only single bonds is considered a saturated atom.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5774
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5775 =item B<IsSelenium>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5776
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5777 $Status = $Atom->IsSelenium();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5778
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5779 Returns 0 or 1 based on whether it's a selenium I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5780
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5781 =item B<IsStereoCenter>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5782
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5783 $Status = $Atom->IsStereoCenter();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5784
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5785 Returns 0 or 1 based on whether it's marked as a stero center I<Atom> by explicit setting
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5786 of I<StereoCenter> atom propert to value of I<1>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5787
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5788 =item B<IsSilicon>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5789
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5790 $Status = $Atom->IsSilicon();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5791
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5792 Returns 0 or 1 based on whether it's a silicon I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5793
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5794 =item B<IsSulfur>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5795
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5796 $Status = $Atom->IsSulfur();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5797
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5798 Returns 0 or 1 based on whether it's a sulfur I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5799
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5800 =item B<IsSulphur>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5801
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5802 $Status = $Atom->IsSulphur();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5803
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5804 Returns 0 or 1 based on whether it's a sulfur I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5805
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5806 =item B<IsTellurium>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5807
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5808 $Status = $Atom->IsTellurium();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5809
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5810 Returns 0 or 1 based on whether it's a tellurium I<Atom>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5811
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5812 =item B<IsTerminal>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5813
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5814 $Status = $Atom->IsTerminal();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5815
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5816 Returns 0 or 1 based on whether it's a terminal I<Atom> attached to no
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5817 more than one non-hydrogen atom.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5818
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5819 =item B<IsUnsaturated>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5820
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5821 $Status = $Atom->IsUnsaturated();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5822
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5823 Returns 1 or 0 based on whether it's as unsaturated I<Atom>. An atom attached
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5824 to other atoms with at least one non-single bond is considered an unsaturated atom.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5825
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5826 =item B<IsTopologicalPharmacophoreType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5827
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5828 $Status =$Atom->IsTopologicalPharmacophoreType();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5829
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5830 Returns 1 or 0 based on whether it's any of the supportyed topological pharmacophore
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5831 I<Atom> type. See I<IsFunctionalClassType> for a list of supported types.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5832
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5833 =item B<SetAtomSymbol>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5834
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5835 $Atom->SetAtomSymbol($AtomicSymbol);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5836
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5837 Sets atom symbol for I<Atom> and returns I<Atom> object. The appropriate atomic number is also
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5838 set automatically.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5839
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5840 =item B<SetAtomicNumber>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5841
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5842 $Atom->SetAtomicNumber($AtomicNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5843
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5844 Sets atomic number for I<Atom> and returns I<Atom> object. The appropriate atom symbol is also
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5845 set automatically.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5846
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5847 =item B<SetMassNumber>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5848
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5849 $Atom->SetMassNumber($MassNumber);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5850
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5851 Sets mass number for I<Atom> and returns I<Atom> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5852
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5853 =item B<SetStereoCenter>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5854
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5855 $Atom->SetStereoCenter($StereoCenter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5856
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5857 Sets stereo center for I<Atom> and returns I<Atom> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5858
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5859 =item B<SetStereochemistry>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5860
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5861 $Atom->SetStereochemistry($Stereochemistry);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5862
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5863 Sets stereo chemistry for I<Atom> and returns I<Atom> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5864
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5865 =item B<SetX>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5866
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5867 $Atom->SetX($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5868
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5869 Sets X-coordinate value for I<Atom> and returns I<Atom> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5870
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5871 =item B<SetXYZ>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5872
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5873 $Atom->SetXYZ(@XYZValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5874 $Atom->SetXYZ($XYZValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5875 $Atom->SetXYZ($XYZVector);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5876
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5877 Sets I<Atom> coordinates using an array, reference to an array or a I<Vector> object and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5878 returns I<Atom> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5879
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5880 =item B<SetY>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5881
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5882 $Atom->SetY($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5883
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5884 Sets Y-coordinate value for I<Atom> and returns I<Atom> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5885
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5886 =item B<SetZ>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5887
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5888 $Atom->SetZ($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5889
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5890 Sets Z-coordinate value for I<Atom> and returns I<Atom> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5891
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5892 =item B<StringifyAtom>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5893
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5894 $AtomString = $Atom->StringifyAtom();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5895
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5896 Returns a string containing information about I<Atom> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5897
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5898 =back
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5899
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5900 =head1 AUTHOR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5901
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5902 Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5903
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5904 =head1 SEE ALSO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5905
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5906 Bond.pm, Molecule.pm, MoleculeFileIO.pm
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5907
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5908 =head1 COPYRIGHT
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5909
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5910 Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5911
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5912 This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5913
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5914 MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5915 the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5916 Software Foundation; either version 3 of the License, or (at your option)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5917 any later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5918
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5919 =cut