annotate mayachemtool/mayachemtools/lib/Atom.pm @ 0:68300206e90d draft default tip

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