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

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 09:23:18 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1 package Fingerprints::ExtendedConnectivityFingerprints;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: ExtendedConnectivityFingerprints.pm,v $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:48:54 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.39 $
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
6 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
8 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
10 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
12 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
17 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
22 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
27 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
28
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
32 use TextUtil ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
33 use MathUtil ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
34 use Fingerprints::Fingerprints;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
35 use Molecule;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
36 use AtomTypes::AtomicInvariantsAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
37 use AtomTypes::FunctionalClassAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
38 use AtomTypes::DREIDINGAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
39 use AtomTypes::EStateAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
40 use AtomTypes::MMFF94AtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
41 use AtomTypes::SLogPAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
42 use AtomTypes::SYBYLAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
43 use AtomTypes::TPSAAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
44 use AtomTypes::UFFAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
45
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
46 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
47
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
48 @ISA = qw(Fingerprints::Fingerprints Exporter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
49 @EXPORT = qw();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
50 @EXPORT_OK = qw();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
51
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
52 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
53
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
54 # Setup class variables...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
55 my($ClassName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
56 _InitializeClass();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
57
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
58 # Overload Perl functions...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
59 use overload '""' => 'StringifyExtendedConnectivityFingerprints';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
60
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
61 # Class constructor...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
62 sub new {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
63 my($Class, %NamesAndValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
64
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
65 # Initialize object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
66 my $This = $Class->SUPER::new();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
67 bless $This, ref($Class) || $Class;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
68 $This->_InitializeExtendedConnectivityFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
69
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
70 $This->_InitializeExtendedConnectivityFingerprintsProperties(%NamesAndValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
71
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
72 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
73 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
74
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
75 # Initialize object data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
76 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
77 sub _InitializeExtendedConnectivityFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
78 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
79
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
80 # Type of fingerprint to generate:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
81 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
82 # ExtendedConnectivity - Set of integer identifiers corresponding to structurally unique features
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
83 # ExtendedConnectivityCount - Set of integer identifiers corresponding to structurally unique features and their count
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
84 # ExtendedConnectivityBits - A bit vector indicating presence/absence of structurally unique features
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
85 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
86 $This->{Type} = 'ExtendedConnectivity';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
87
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
88 # Atomic neighborhoods radius for extended connectivity...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
89 $This->{NeighborhoodRadius} = 2;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
90
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
91 # Size of bit bector to use during generation of ExtendedConnectivityBits fingerprints...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
92 $This->{Size} = 1024;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
93
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
94 # Min and max size of bit bector to use during generation of ExtendedConnectivityBits fingerprints...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
95 $This->{MinSize} = 32;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
96 $This->{MaxSize} = 2**32;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
97
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
98 # Type of atom attributes to use for initial identifier assignment to non-hydrogen atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
99 # during the calculation of extended connectivity fingerprints [ Ref 48, Ref 52 ]...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
100 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
101 # Currently supported values are: AtomicInvariantsAtomTypes, FunctionalClassAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
102 # DREIDINGAtomTypes, EStateAtomTypes, MMFF94AtomTypes, SLogPAtomTypes, SYBYLAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
103 # TPSAAtomTypes, UFFAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
104 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
105 $This->{AtomIdentifierType} = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
106
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
107 # Random number generator to use during generation of fingerprints bit-vector
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
108 # string: Perl CORE::rand or MayaChemTools MathUtil::random function.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
109 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
110 # The random number generator implemented in MayaChemTools is a variant of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
111 # linear congruential generator (LCG) as described by Miller et al. [ Ref 120 ].
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
112 # It is also referred to as Lehmer random number generator or Park-Miller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
113 # random number generator.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
114 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
115 # Unlike Perl's core random number generator function rand, the random number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
116 # generator implemented in MayaChemTools, MathUtil::random, generates consistent
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
117 # random values across different platformsfor a specific random seed and leads
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
118 # to generation of portable fingerprints bit-vector strings.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
119 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
120 $This->{UsePerlCoreRandom} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
121
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
122 # Atom neighorhoods up to specified neighborhood radius...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
123 %{$This->{AtomNeighborhoods}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
124
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
125 # Atom identifiers at different neighborhoods up to specified neighborhood radius...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
126 %{$This->{AtomIdentifiers}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
127
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
128 # Structurally unique atom identifiers at different neighborhoods up to specified neighborhood radius...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
129 %{$This->{UniqueAtomIdentifiers}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
130 %{$This->{UniqueAtomIdentifiersCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
131
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
132 # Unique atom identifiers at different neighborhoods up to specified neighborhood radius...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
133 %{$This->{StructurallyUniqueAtomIdentifiers}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
134 %{$This->{StructurallyUniqueAtomIdentifiersCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
135
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
136 # Structure feature information at different neighborhoods up to specified neighborhood
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
137 # radius used during removal of atom indentifiers which are structually equivalent...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
138 %{$This->{StructureFeatures}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
139 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
140
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
141 # Initialize class ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
142 sub _InitializeClass {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
143 #Class name...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
144 $ClassName = __PACKAGE__;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
145 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
146
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
147 # Initialize object properties....
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
148 sub _InitializeExtendedConnectivityFingerprintsProperties {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
149 my($This, %NamesAndValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
150
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
151 my($Name, $Value, $MethodName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
152 while (($Name, $Value) = each %NamesAndValues) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
153 $MethodName = "Set${Name}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
154 $This->$MethodName($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
155 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
156
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
157 # Make sure molecule object was specified...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
158 if (!exists $NamesAndValues{Molecule}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
159 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying molecule...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
160 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
161
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
162 # Make sure AtomIdentifierType was specified...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
163 if (!exists $NamesAndValues{AtomIdentifierType}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
164 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying AtomIdentifierType...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
165 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
166
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
167 # Make sure it's power of 2...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
168 if (exists $NamesAndValues{Size}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
169 if (!TextUtil::IsNumberPowerOfNumber($NamesAndValues{Size}, 2)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
170 croak "Error: ${ClassName}->New: Specified size value, $NamesAndValues{Size}, must be power of 2...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
171 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
172 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
173
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
174 if ($This->{Type} =~ /^ExtendedConnectivity$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
175 $This->_InitializeExtendedConnectivityFingerprintsVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
176 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
177 elsif ($This->{Type} =~ /^ExtendedConnectivityCount$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
178 $This->_InitializeExtendedConnectivityCountFingerprintsVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
179 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
180 elsif ($This->{Type} =~ /^ExtendedConnectivityBits$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
181 $This->_InitializeExtendedConnectivityBitsFingerprintsBitVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
182 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
183 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
184 croak "Error: ${ClassName}->_InitializeExtendedConnectivityFingerprintsProperties: Unknown ExtendedConnectivity fingerprints type: $This->{Type}; Supported fingerprints types: ExtendedConnectivity, ExtendedConnectivityCount or ExtendedConnectivityBits...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
185 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
186
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
187 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
188 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
189
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
190 # Initialize extended connectivity fingerprints vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
191 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
192 sub _InitializeExtendedConnectivityFingerprintsVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
193 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
194
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
195 # Type of vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
196 $This->{VectorType} = 'FingerprintsVector';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
197
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
198 # Type of FingerprintsVector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
199 $This->{FingerprintsVectorType} = 'AlphaNumericalValues';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
200
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
201 $This->_InitializeFingerprintsVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
202
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
203 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
204 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
205
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
206 # Initialize extended connectivity count fingerprints vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
207 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
208 sub _InitializeExtendedConnectivityCountFingerprintsVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
209 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
210
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
211 # Type of vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
212 $This->{VectorType} = 'FingerprintsVector';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
213
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
214 # Type of FingerprintsVector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
215 $This->{FingerprintsVectorType} = 'NumericalValues';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
216
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
217 $This->_InitializeFingerprintsVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
218
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
219 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
220 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
221
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
222 # Initialize extended connectivity bit fingerprints vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
223 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
224 sub _InitializeExtendedConnectivityBitsFingerprintsBitVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
225 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
226
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
227 # Type of vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
228 $This->{VectorType} = 'FingerprintsBitVector';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
229
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
230 $This->_InitializeFingerprintsBitVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
231
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
232 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
233 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
234
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
235 # Set type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
236 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
237 sub SetType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
238 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
239
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
240 if ($Type =~ /^ExtendedConnectivity$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
241 $This->{Type} = 'ExtendedConnectivity';;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
242 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
243 elsif ($Type =~ /^ExtendedConnectivityCount$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
244 $This->{Type} = 'ExtendedConnectivityCount';;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
245 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
246 elsif ($Type =~ /^ExtendedConnectivityBits$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
247 $This->{Type} = 'ExtendedConnectivityBits';;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
248 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
249 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
250 croak "Error: ${ClassName}->SetType: Unknown ExtendedConnectivity fingerprints type: $This->{Type}; Supported fingerprints types: ExtendedConnectivity, ExtendedConnectivityCount or ExtendedConnectivityBits...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
251 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
252 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
253 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
254
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
255 # Disable vector type change...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
256 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
257 sub SetVectorType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
258 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
259
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
260 croak "Error: ${ClassName}->SetVectorType: Can't change vector type...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
261
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
262 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
263 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
264
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
265 # Disable vector type change...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
266 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
267 sub SetFingerprintsVectorType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
268 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
269
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
270 croak "Error: ${ClassName}->SetFingerprintsVectorType: Can't change fingerprints vector type...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
271
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
272 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
273 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
274
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
275 # Set intial atom identifier type..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
276 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
277 sub SetAtomIdentifierType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
278 my($This, $IdentifierType) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
279
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
280 if ($IdentifierType !~ /^(AtomicInvariantsAtomTypes|FunctionalClassAtomTypes|DREIDINGAtomTypes|EStateAtomTypes|MMFF94AtomTypes|SLogPAtomTypes|SYBYLAtomTypes|TPSAAtomTypes|UFFAtomTypes)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
281 croak "Error: ${ClassName}->SetAtomIdentifierType: Specified value, $IdentifierType, for AtomIdentifierType is not vaild. Supported types in current release of MayaChemTools: AtomicInvariantsAtomTypes, FunctionalClassAtomTypes, DREIDINGAtomTypes, EStateAtomTypes, MMFF94AtomTypes, SLogPAtomTypes, SYBYLAtomTypes, TPSAAtomTypes and UFFAtomTypes.";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
282 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
283
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
284 if ($This->{AtomIdentifierType}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
285 croak "Error: ${ClassName}->SetAtomIdentifierType: Can't change intial atom identifier type: It's already set...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
286 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
287
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
288 $This->{AtomIdentifierType} = $IdentifierType;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
289
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
290 # Initialize identifier type information...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
291 $This->_InitializeAtomIdentifierTypeInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
292
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
293 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
294 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
295
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
296 # Set atom neighborhood radius...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
297 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
298 sub SetNeighborhoodRadius {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
299 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
300
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
301 if (!TextUtil::IsInteger($Value)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
302 croak "Error: ${ClassName}->SetNeighborhoodRadius: NeighborhoodRadius value, $Value, is not valid: It must be an integer...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
303 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
304
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
305 if ($Value < 0 ) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
306 croak "Error: ${ClassName}->SetNeighborhoodRadius: NeighborhoodRadius value, $Value, is not valid: It must be >= 0...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
307 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
308 $This->{NeighborhoodRadius} = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
309
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
310 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
311 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
312
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
313 # Generate fingerprints description...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
314 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
315 sub GetDescription {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
316 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
317
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
318 # Is description explicity set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
319 if (exists $This->{Description}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
320 return $This->{Description};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
321 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
322
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
323 # Generate fingerprints description...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
324
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
325 return "$This->{Type}:$This->{AtomIdentifierType}:Radius$This->{NeighborhoodRadius}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
326 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
327
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
328 # Generate fingerprints...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
329 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
330 # Methodology:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
331 # . Assign initial atom identfiers to all non-hydrogen atoms in the molecule
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
332 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
333 # . Remove duplicates from the initial identifiers and add them to list corresponding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
334 # to molecule fingerprint
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
335 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
336 # . For NeighborhoodRadius value of 0, just return the molecule fingerprint list
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
337 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
338 # . For each NeighborhoodRadius level
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
339 # . For each non-hydrogen CentralAtom at this NeighborhoodRadius level
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
340 # . For each non-hydrogen SuccessorNeighborAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
341 # . Collect (BondOrder AtomIdentifier) pair of values corresponding to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
342 # (CentralAtom SuccessorNeighborAtom) and add it to a list
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
343 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
344 # . Sort list containing (BondOrder AtomIdentifier) pairs first by BondOrder followed
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
345 # by AtomIdendifiers to make these values graph invariant
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
346 # . Generate a hash code for the values in the list
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
347 # . Assign hash code as new atom identifier at the current NeighborhoodRadius level
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
348 # . Save all atoms and bonds corresponding to the substructure involved in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
349 # generating the hash code to be used for identifying structural duplicate hash code
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
350 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
351 # . Add the new identifier to the molecule fingerprint list making sure it's not a duplicate
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
352 # identifier
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
353 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
354 # Hash code atom identifier deduplication:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
355 # . Track/remove the identifier generated at higher neighborhood radius level
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
356 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
357 # Structural atom identifier deduplication:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
358 # . For equivalent atoms and bonds corresponding to substructure at a NeighborhoodRadius level,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
359 # track/remove the atom identifier with largest value
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
360 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
361 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
362 sub GenerateFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
363 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
364
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
365 # Cache appropriate molecule data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
366 $This->_SetupMoleculeDataCache();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
367
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
368 # Assign intial atom identifers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
369 if (!$This->_AssignInitialAtomIdentifiers()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
370 carp "Warning: ${ClassName}->GenerateFingerprints: $This->{AtomIdentifierType} fingerprints generation didn't succeed: Couldn't assign valid $This->{AtomIdentifierType} to all atoms...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
371 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
372 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
373
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
374 # Identify atom neighborhoods up to specified radius...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
375 $This->_GetAtomNeighborhoods();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
376
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
377 # Assign atom identifiers to central atoms considering atom neighborhoods at each
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
378 # radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
379 $This->_AssignAtomIdentifiersToAtomNeighborhoods();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
380
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
381 # Remove duplicates identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
382 $This->_RemoveDuplicateAtomIdentifiers();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
383
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
384 # Set final fingerprints...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
385 $This->_SetFinalFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
386
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
387 # Clear cached molecule data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
388 $This->_ClearMoleculeDataCache();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
389
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
390 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
391 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
392
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
393 # Assign appropriate initial atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
394 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
395 # Generation of initial identifier for a specific atom involves:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
396 # . Values of the specified atom attributes are appended in a specific order to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
397 # generate an initial atom identifier string
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
398 # . A 32 bit unsigned integer hash key, using TextUtil::HashCode function, is
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
399 # generated for the atom indentifier and assigned to the atom as initial
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
400 # atom identifier.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
401 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
402 sub _AssignInitialAtomIdentifiers {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
403 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
404 my($Atom, $AtomID, $Radius, $SpecifiedAtomTypes, $IgnoreHydrogens, $AtomType, $InitialAtomTypeString, $InitialAtomIdentifier);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
405
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
406 # Initialize atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
407 $This->_InitializeAtomIdentifiers();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
408
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
409 # Set up atom types...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
410 $IgnoreHydrogens = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
411 $SpecifiedAtomTypes = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
412
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
413 IDENTIFIERTYPE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
414 if ($This->{AtomIdentifierType} =~ /^AtomicInvariantsAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
415 $SpecifiedAtomTypes = new AtomTypes::AtomicInvariantsAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens, 'AtomicInvariantsToUse' => $This->{AtomicInvariantsToUse});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
416 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
417 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
418
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
419 if ($This->{AtomIdentifierType} =~ /^FunctionalClassAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
420 $SpecifiedAtomTypes = new AtomTypes::FunctionalClassAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens, 'FunctionalClassesToUse' => $This->{FunctionalClassesToUse});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
421 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
422 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
423
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
424 if ($This->{AtomIdentifierType} =~ /^DREIDINGAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
425 $SpecifiedAtomTypes = new AtomTypes::DREIDINGAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
426 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
427 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
428
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
429 if ($This->{AtomIdentifierType} =~ /^EStateAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
430 $SpecifiedAtomTypes = new AtomTypes::EStateAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
431 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
432 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
433
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
434 if ($This->{AtomIdentifierType} =~ /^MMFF94AtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
435 $SpecifiedAtomTypes = new AtomTypes::MMFF94AtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
436 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
437 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
438
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
439 if ($This->{AtomIdentifierType} =~ /^SLogPAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
440 $SpecifiedAtomTypes = new AtomTypes::SLogPAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
441 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
442 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
443
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
444 if ($This->{AtomIdentifierType} =~ /^SYBYLAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
445 $SpecifiedAtomTypes = new AtomTypes::SYBYLAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
446 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
447 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
448
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
449 if ($This->{AtomIdentifierType} =~ /^TPSAAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
450 $SpecifiedAtomTypes = new AtomTypes::TPSAAtomTypes('Molecule' => $This->{Molecule}, 'IgnorePhosphorus' => 0, 'IgnoreSulfur' => 0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
451 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
452 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
453
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
454 if ($This->{AtomIdentifierType} =~ /^UFFAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
455 $SpecifiedAtomTypes = new AtomTypes::UFFAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
456 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
457 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
458
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
459 croak "Error: ${ClassName}->_AssignInitialAtomIdentifiers: Couldn't assign intial atom identifiers: InitialAtomIdentifierType $This->{AtomIdentifierType} is not supported...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
460 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
461
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
462 # Assign atom types...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
463 $SpecifiedAtomTypes->AssignAtomTypes();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
464
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
465 # Make sure atom types assignment is successful...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
466 if (!$SpecifiedAtomTypes->IsAtomTypesAssignmentSuccessful()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
467 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
468 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
469
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
470 # Assign atom identifiers at radius 0...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
471 $Radius = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
472 for $Atom (@{$This->{Atoms}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
473 $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
474
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
475 $AtomType = $SpecifiedAtomTypes->GetAtomType($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
476 $InitialAtomTypeString = $AtomType ? $AtomType : 'None';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
477
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
478 $InitialAtomIdentifier = TextUtil::HashCode($InitialAtomTypeString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
479 $This->{AtomIdentifiers}{$Radius}{$AtomID} = $InitialAtomIdentifier;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
480 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
481
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
482 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
483 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
484
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
485 # Initialize atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
486 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
487 sub _InitializeAtomIdentifiers {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
488 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
489 my($Radius, $CurrentRadius);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
490
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
491 $Radius = $This->{NeighborhoodRadius};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
492
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
493 %{$This->{AtomIdentifiers}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
494 for $CurrentRadius (0 .. $Radius) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
495 # Atom idenfiers key and value correspond to AtomID and AtomIdentifier
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
496 %{$This->{AtomIdentifiers}{$CurrentRadius}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
497
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
498 # Unique and strcuturally unique idenfiers key and value correspond to AtomIdentifier and AtomID
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
499 %{$This->{UniqueAtomIdentifiers}{$CurrentRadius}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
500 %{$This->{UniqueAtomIdentifiersCount}{$CurrentRadius}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
501
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
502 %{$This->{StructurallyUniqueAtomIdentifiers}{$CurrentRadius}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
503 %{$This->{StructurallyUniqueAtomIdentifiersCount}{$CurrentRadius}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
504 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
505
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
506 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
507
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
508 # Collect atom neighborhoods upto specified neighborhood radius...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
509 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
510 sub _GetAtomNeighborhoods {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
511 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
512 my($Atom, $AtomID, $Radius, $CurrentRadius, $Molecule);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
513
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
514 %{$This->{AtomNeighborhoods}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
515
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
516 $Radius = $This->{NeighborhoodRadius};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
517 if ($Radius < 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
518 # At radius level 0, it's just the atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
519 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
520 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
521
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
522 # Initialize neighborhood at different radii...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
523 for $CurrentRadius (0 .. $Radius) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
524 %{$This->{AtomNeighborhoods}{$CurrentRadius}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
525 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
526
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
527 $Molecule = $This->GetMolecule();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
528
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
529 # Collect available atom neighborhoods at different at different neighborhood level for each atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
530 my($AtomsNeighborhoodWithSuccessorAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
531
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
532 for $Atom (@{$This->{Atoms}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
533 $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
534 $CurrentRadius = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
535 for $AtomsNeighborhoodWithSuccessorAtomsRef ($Molecule->GetAtomNeighborhoodsWithSuccessorAtomsAndRadiusUpto($Atom, $Radius)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
536 $This->{AtomNeighborhoods}{$CurrentRadius}{$AtomID} = $AtomsNeighborhoodWithSuccessorAtomsRef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
537 $CurrentRadius++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
538 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
539 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
540 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
541 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
542
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
543 # Assign atom identifiers to central atom at each neighborhood radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
544 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
545 sub _AssignAtomIdentifiersToAtomNeighborhoods {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
546 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
547 my($Radius, $NextRadius, $Atom, $AtomID, $NeighborhoodAtom, $SuccessorAtom, $SuccessorAtomID, $NeighborhoodAtomSuccessorAtomsRef, $NeighborhoodAtomsWithSuccessorAtomsRef, $Bond, $BondOrder, $SuccessorAtomCount);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
548
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
549 if ($This->{NeighborhoodRadius} < 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
550 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
551 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
552
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
553 # Go over the atom neighborhoods at each radius upto specified radius and assign atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
554 # indentifiers using their connected successor atoms and their identifiers.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
555 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
556 # For a neighborhood atom at a specified radius, the successor connected atoms correpond
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
557 # to next radius level and the last set of neighorhood atoms don't have any successor connected
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
558 # atoms. Additionally, radius level 0 just correspond to initial atom identifiers.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
559 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
560 # So in order to process atom neighborhood upto specified radius level, the last atom neighborhood
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
561 # doesn't need to be processed: it gets processed at previous radius level as successor connected
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
562 # atoms.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
563 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
564 RADIUS: for $Radius (0 .. ($This->{NeighborhoodRadius} - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
565 ATOM: for $Atom (@{$This->{Atoms}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
566 $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
567
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
568 # Are there any available atom neighborhoods at this radius?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
569 if (!exists $This->{AtomNeighborhoods}{$Radius}{$AtomID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
570 next ATOM;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
571 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
572 $NextRadius = $Radius + 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
573
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
574 # Go over neighborhood atoms and their successor connected atoms at this radius and collect
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
575 # (BondOrder AtomIdentifier) values for bonded atom pairs. Additionally, keep track of atom and bonds
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
576 # for the neighorhoods to remove identifieres generated from structurally duplicate features.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
577 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
578 my(%BondOrdersAndAtomIdentifiers);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
579
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
580 %BondOrdersAndAtomIdentifiers = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
581 $SuccessorAtomCount = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
582
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
583 NEIGHBORHOODS: for $NeighborhoodAtomsWithSuccessorAtomsRef (@{$This->{AtomNeighborhoods}{$Radius}{$AtomID}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
584 ($NeighborhoodAtom, $NeighborhoodAtomSuccessorAtomsRef) = @{$NeighborhoodAtomsWithSuccessorAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
585
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
586 # Any connected successors for the NeighborhoodAtom?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
587 if (!@{$NeighborhoodAtomSuccessorAtomsRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
588 next NEIGHBORHOODS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
589 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
590 SUCCESSORATOM: for $SuccessorAtom (@{$NeighborhoodAtomSuccessorAtomsRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
591 if ($SuccessorAtom->IsHydrogen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
592 # Skip successor hydrogen atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
593 next SUCCESSORATOM;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
594 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
595 $SuccessorAtomID = $SuccessorAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
596 $SuccessorAtomCount++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
597
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
598 $Bond = $NeighborhoodAtom->GetBondToAtom($SuccessorAtom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
599 $BondOrder = $Bond->IsAromatic() ? "1.5" : $Bond->GetBondOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
600
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
601 if (!exists $BondOrdersAndAtomIdentifiers{$BondOrder}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
602 @{$BondOrdersAndAtomIdentifiers{$BondOrder}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
603 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
604 push @{$BondOrdersAndAtomIdentifiers{$BondOrder}}, $This->{AtomIdentifiers}{$Radius}{$SuccessorAtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
605 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
606 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
607 if (!$SuccessorAtomCount) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
608 next ATOM;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
609 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
610 # Assign a new atom identifier at the NextRadius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
611 $This->_AssignAtomIdentifierToAtomNeighborhood($AtomID, $Radius, \%BondOrdersAndAtomIdentifiers);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
612 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
613 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
614 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
615 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
616
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
617 # Generate and assign atom indentifier for AtomID using atom neighborhood at next radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
618 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
619 sub _AssignAtomIdentifierToAtomNeighborhood {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
620 my($This, $AtomID, $Radius, $BondOrdersAndAtomIdentifiersRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
621 my($NextRadius, $AtomIdentifier, $SuccessorAtomIdentifier, $BondOrder, $AtomIdentifierString, @AtomIndentifiersInfo);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
622
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
623 $NextRadius = $Radius + 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
624
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
625 @AtomIndentifiersInfo = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
626
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
627 $AtomIdentifier = $This->{AtomIdentifiers}{$Radius}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
628 push @AtomIndentifiersInfo, ($NextRadius, $AtomIdentifier);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
629
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
630 # Sort out successor atom bond order and identifier pairs by bond order followed by atom identifiers
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
631 # in order to make the final atom identifier graph invariant...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
632 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
633 for $BondOrder (sort { $a <=> $b } keys %{$BondOrdersAndAtomIdentifiersRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
634 for $SuccessorAtomIdentifier (sort { $a <=> $b } @{$BondOrdersAndAtomIdentifiersRef->{$BondOrder}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
635 push @AtomIndentifiersInfo, ($BondOrder, $SuccessorAtomIdentifier);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
636 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
637 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
638 $AtomIdentifierString = join("", @AtomIndentifiersInfo);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
639 $AtomIdentifier = TextUtil::HashCode($AtomIdentifierString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
640
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
641 # Assign atom identifier to the atom at next radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
642 $This->{AtomIdentifiers}{$NextRadius}{$AtomID} = $AtomIdentifier;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
643
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
644 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
645 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
646
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
647 # Remove duplicates atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
648 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
649 sub _RemoveDuplicateAtomIdentifiers {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
650 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
651
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
652 $This->_RemoveDuplicateIdentifiersByValue();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
653 $This->_RemoveStructurallyDuplicateIdenfiers();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
654
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
655 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
656 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
657
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
658 # Remove duplicate identifiers at each radius level by just using their value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
659 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
660 sub _RemoveDuplicateIdentifiersByValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
661 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
662 my($Radius, $Atom, $AtomID, $AtomIdentifier);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
663
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
664 for $Radius (0 .. $This->{NeighborhoodRadius}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
665 ATOM: for $Atom (@{$This->{Atoms}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
666 $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
667 if (!exists $This->{AtomIdentifiers}{$Radius}{$AtomID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
668 next ATOM;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
669 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
670 $AtomIdentifier = $This->{AtomIdentifiers}{$Radius}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
671 if (exists $This->{UniqueAtomIdentifiers}{$Radius}{$AtomIdentifier}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
672 # It's a duplicate atom idenfier at this radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
673 $This->{UniqueAtomIdentifiersCount}{$Radius}{$AtomIdentifier} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
674 next ATOM;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
675 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
676 $This->{UniqueAtomIdentifiers}{$Radius}{$AtomIdentifier} = $AtomID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
677 $This->{UniqueAtomIdentifiersCount}{$Radius}{$AtomIdentifier} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
678 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
679 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
680 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
681 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
682
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
683 # Remove structurally duplicate identifiers at each radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
684 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
685 # Methodology:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
686 # . For unquie atom identifiers at each radius level, assign complete structure features
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
687 # in terms all the bonds involved to generate that identifier
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
688 # . Use the complete structure features to remover atom identifiers which are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
689 # structurally equivalent which can also be at earlier radii levels
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
690 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
691 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
692 sub _RemoveStructurallyDuplicateIdenfiers {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
693 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
694 my($Radius, $AtomID, $AtomIdentifier, $SimilarAtomIdentifierRadius, $SimilarAtomIdentifier);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
695
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
696 # Setup structure features...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
697 $This->_SetupStructureFeaturesForAtomIDsInvolvedInUniqueIdentifiers();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
698
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
699 # Identify structurally unqiue identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
700 for $Radius (0 .. $This->{NeighborhoodRadius}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
701 ATOMIDENTIFIER: for $AtomIdentifier (sort { $a <=> $b } keys %{$This->{UniqueAtomIdentifiers}{$Radius}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
702 $AtomID = $This->{UniqueAtomIdentifiers}{$Radius}{$AtomIdentifier};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
703
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
704 ($SimilarAtomIdentifierRadius, $SimilarAtomIdentifier) = $This->_FindStructurallySimilarAtomIdentifier($Radius, $AtomID, $AtomIdentifier);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
705 if ($SimilarAtomIdentifier) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
706 # Current atom identifier is similar to an earlier structurally unique atom identifier...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
707 $This->{StructurallyUniqueAtomIdentifiersCount}{$SimilarAtomIdentifierRadius}{$SimilarAtomIdentifier} += $This->{UniqueAtomIdentifiersCount}{$Radius}{$AtomIdentifier};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
708 next ATOMIDENTIFIER;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
709 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
710 $This->{StructurallyUniqueAtomIdentifiers}{$Radius}{$AtomIdentifier} = $AtomID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
711
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
712 # Set structurally unique atom identifier count to the unique atom identifiers count...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
713 $This->{StructurallyUniqueAtomIdentifiersCount}{$Radius}{$AtomIdentifier} = $This->{UniqueAtomIdentifiersCount}{$Radius}{$AtomIdentifier};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
714 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
715 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
716 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
717 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
718
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
719 # Set final fingerpritns vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
720 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
721 sub _SetFinalFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
722 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
723
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
724 # Mark successful generation of fingerprints...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
725 $This->{FingerprintsGenerated} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
726
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
727 if ($This->{Type} =~ /^ExtendedConnectivity$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
728 $This->_SetFinalExtendedConnectivityFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
729 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
730 elsif ($This->{Type} =~ /^ExtendedConnectivityCount$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
731 $This->_SetFinalExtendedConnectivityCountFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
732 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
733 elsif ($This->{Type} =~ /^ExtendedConnectivityBits$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
734 $This->_SetFinalExtendedConnectivityBitsFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
735 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
736
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
737 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
738 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
739
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
740 # Set final extended connectivity fingerpritns vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
741 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
742 sub _SetFinalExtendedConnectivityFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
743 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
744 my($Radius, $AtomIdentifier, @AtomIdentifiers);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
745
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
746 @AtomIdentifiers = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
747
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
748 for $Radius (0 .. $This->{NeighborhoodRadius}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
749 for $AtomIdentifier (sort { $a <=> $b } keys %{$This->{StructurallyUniqueAtomIdentifiers}{$Radius}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
750 push @AtomIdentifiers, $AtomIdentifier;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
751 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
752 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
753 # Add atom identifiers to fingerprint vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
754 $This->{FingerprintsVector}->AddValues(\@AtomIdentifiers);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
755
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
756 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
757 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
758
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
759 # Set final extended connectivity count fingerpritns vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
760 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
761 sub _SetFinalExtendedConnectivityCountFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
762 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
763 my($Radius, $AtomIdentifier, $AtomIdentifierCount, @AtomIdentifiers, @AtomIdentifiersCount);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
764
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
765 @AtomIdentifiers = (); @AtomIdentifiersCount = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
766
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
767 for $Radius (0 .. $This->{NeighborhoodRadius}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
768 for $AtomIdentifier (sort { $a <=> $b } keys %{$This->{StructurallyUniqueAtomIdentifiers}{$Radius}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
769 $AtomIdentifierCount = $This->{StructurallyUniqueAtomIdentifiersCount}{$Radius}{$AtomIdentifier};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
770 push @AtomIdentifiers, $AtomIdentifier;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
771 push @AtomIdentifiersCount, $AtomIdentifierCount;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
772 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
773 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
774 # Add atom identifiers to fingerprint vector as value IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
775 $This->{FingerprintsVector}->AddValueIDs(\@AtomIdentifiers);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
776
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
777 # Add atom identifiers to count to fingerprint vector as values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
778 $This->{FingerprintsVector}->AddValues(\@AtomIdentifiersCount);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
779
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
780 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
781 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
782
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
783 # Set final extended connectivity bits fingerpritns vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
784 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
785 sub _SetFinalExtendedConnectivityBitsFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
786 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
787 my($Radius, $AtomIdentifier, $FingerprintsBitVector, $Size, $SkipBitPosCheck, $AtomIdentifierBitPos, $SetBitNum);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
788
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
789 $FingerprintsBitVector = $This->{FingerprintsBitVector};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
790
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
791 $Size = $This->{Size};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
792
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
793 $SkipBitPosCheck = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
794
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
795 for $Radius (0 .. $This->{NeighborhoodRadius}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
796 for $AtomIdentifier (keys %{$This->{StructurallyUniqueAtomIdentifiers}{$Radius}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
797 # Set random number seed...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
798 if ($This->{UsePerlCoreRandom}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
799 CORE::srand($AtomIdentifier);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
800 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
801 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
802 MathUtil::srandom($AtomIdentifier);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
803 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
804
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
805 # Set bit position...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
806 $AtomIdentifierBitPos = $This->{UsePerlCoreRandom} ? int(CORE::rand($Size)) : int(MathUtil::random($Size));
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
807 $FingerprintsBitVector->SetBit($AtomIdentifierBitPos, $SkipBitPosCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
808 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
809 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
810 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
811 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
812
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
813
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
814 # Identify structurally unique identifiers by comparing structure features involved in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
815 # generating identifiear by comparing it agains all the previous structurally unique
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
816 # identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
817 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
818 sub _FindStructurallySimilarAtomIdentifier {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
819 my($This, $SpecifiedRadius, $SpecifiedAtomID, $SpecifiedAtomIdentifier) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
820 my($Radius, $AtomID, $AtomIdentifier, $FeatureAtomCount, $FeatureAtomIDsRef, $SpecifiedFeatureAtomID, $SpecifiedFeatureAtomCount, $SpecifiedFeatureAtomIDsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
821
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
822 if ($SpecifiedRadius == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
823 # After duplicate removal by value, all identifier at radius level 0 would be structurally unique...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
824 return (undef, undef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
825 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
826
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
827 $SpecifiedFeatureAtomCount = $This->{StructureFeatures}{AtomCount}{$SpecifiedRadius}{$SpecifiedAtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
828 $SpecifiedFeatureAtomIDsRef = $This->{StructureFeatures}{AtomIDs}{$SpecifiedRadius}{$SpecifiedAtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
829
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
830 # No need to compare features at radius 0...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
831 for $Radius (1 .. $SpecifiedRadius) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
832 ATOMIDENTIFIER: for $AtomIdentifier (keys %{$This->{StructurallyUniqueAtomIdentifiers}{$Radius}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
833 $AtomID = $This->{StructurallyUniqueAtomIdentifiers}{$Radius}{$AtomIdentifier};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
834
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
835 $FeatureAtomCount = $This->{StructureFeatures}{AtomCount}{$Radius}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
836 $FeatureAtomIDsRef = $This->{StructureFeatures}{AtomIDs}{$Radius}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
837
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
838 if ($SpecifiedFeatureAtomCount != $FeatureAtomCount) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
839 # Couldn't be structurally equivalent...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
840 next ATOMIDENTIFIER;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
841 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
842 for $SpecifiedFeatureAtomID (keys % {$SpecifiedFeatureAtomIDsRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
843 if (! exists $FeatureAtomIDsRef->{$SpecifiedFeatureAtomID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
844 # For structural equivalency, all atom in specified feature must also be present in a previously
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
845 # identified structurally unique structure feature...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
846 next ATOMIDENTIFIER;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
847 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
848 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
849 # Found structurally equivalent feature...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
850 return ($Radius, $AtomIdentifier);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
851 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
852 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
853 return (undef, undef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
854 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
855
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
856 # Setup structure features for atom IDs involved in unique atom identifiers at all
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
857 # radii level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
858 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
859 sub _SetupStructureFeaturesForAtomIDsInvolvedInUniqueIdentifiers {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
860 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
861 my($Radius, $PreviousRadius, $Atom, $AtomID, $AtomIdentifier, $NeighborhoodAtomID, $NeighborhoodAtomsWithSuccessorAtomsRef, $NeighborhoodAtom, $NeighborhoodAtomSuccessorAtomsRef, %AtomIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
862
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
863 $This->_InitializeStructureFeatures();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
864
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
865 # Collect atom IDs involved in unique atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
866 %AtomIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
867 for $Radius (0 .. $This->{NeighborhoodRadius}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
868 for $AtomIdentifier (keys %{$This->{UniqueAtomIdentifiers}{$Radius}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
869 $AtomID = $This->{UniqueAtomIdentifiers}{$Radius}{$AtomIdentifier};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
870 $AtomIDs{$AtomID} = $AtomID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
871 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
872 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
873
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
874 # Setup structure features...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
875 for $Radius (0 .. $This->{NeighborhoodRadius}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
876 for $AtomID (keys %AtomIDs) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
877 my($StructureFeatureAtomCount, %StructureFeatureAtomIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
878
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
879 $StructureFeatureAtomCount = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
880 %StructureFeatureAtomIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
881
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
882 # Get partial structure features for the atom at previous radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
883 $PreviousRadius = $Radius - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
884 if ($PreviousRadius >= 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
885 $StructureFeatureAtomCount += $This->{StructureFeatures}{AtomCount}{$PreviousRadius}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
886 %StructureFeatureAtomIDs = %{$This->{StructureFeatures}{AtomIDs}{$PreviousRadius}{$AtomID}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
887 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
888
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
889 # Get all neighborhood atom at this radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
890 if (exists($This->{AtomNeighborhoods}{$Radius}) && exists($This->{AtomNeighborhoods}{$Radius}{$AtomID})) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
891 NEIGHBORHOODS: for $NeighborhoodAtomsWithSuccessorAtomsRef (@{$This->{AtomNeighborhoods}{$Radius}{$AtomID}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
892 ($NeighborhoodAtom, $NeighborhoodAtomSuccessorAtomsRef) = @{$NeighborhoodAtomsWithSuccessorAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
893 if ($NeighborhoodAtom->IsHydrogen()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
894 next NEIGHBORHOODS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
895 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
896 $NeighborhoodAtomID = $NeighborhoodAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
897 $StructureFeatureAtomCount++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
898 $StructureFeatureAtomIDs{$NeighborhoodAtomID} = $NeighborhoodAtomID;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
899 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
900 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
901
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
902 # Assign structure features to atom at this radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
903 $This->{StructureFeatures}{AtomCount}{$Radius}{$AtomID} = $StructureFeatureAtomCount;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
904 $This->{StructureFeatures}{AtomIDs}{$Radius}{$AtomID} = \%StructureFeatureAtomIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
905 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
906 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
907 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
908 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
909
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
910 # Intialize structure features at each radius level...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
911 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
912 sub _InitializeStructureFeatures {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
913 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
914 my($Radius, $CurrentRadius, $Atom, $AtomID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
915
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
916 # Initialize all structure features...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
917
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
918 %{$This->{StructureFeatures}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
919 %{$This->{StructureFeatures}{AtomCount}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
920 %{$This->{StructureFeatures}{AtomIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
921
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
922 $Radius = $This->{NeighborhoodRadius};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
923 for $CurrentRadius (0 .. $Radius) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
924 # Structure features for at specific radii accessed using atom IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
925 %{$This->{StructureFeatures}{AtomCount}{$CurrentRadius}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
926 %{$This->{StructureFeatures}{AtomIDs}{$CurrentRadius}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
927 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
928 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
929 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
930
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
931 # Cache appropriate molecule data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
932 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
933 sub _SetupMoleculeDataCache {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
934 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
935
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
936 # Get all non-hydrogen atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
937 my($NegateAtomCheckMethod);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
938 $NegateAtomCheckMethod = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
939 @{$This->{Atoms}} = $This->GetMolecule()->GetAtoms("IsHydrogen", $NegateAtomCheckMethod);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
940
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
941 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
942 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
943
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
944 # Clear cached molecule data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
945 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
946 sub _ClearMoleculeDataCache {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
947 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
948
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
949 @{$This->{Atoms}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
950
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
951 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
952 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
953
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
954 # Initialize atom indentifier type information...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
955 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
956 # Current supported values:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
957 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
958 # AtomicInvariantsAtomTypes, FunctionalClassAtomTypes, DREIDINGAtomTypes, EStateAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
959 # MMFF94AtomTypes, SLogPAtomTypes, SYBYLAtomTypes, TPSAAtomTypes, UFFAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
960 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
961 sub _InitializeAtomIdentifierTypeInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
962 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
963
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
964 IDENTIFIERTYPE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
965 if ($This->{AtomIdentifierType} =~ /^AtomicInvariantsAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
966 $This->_InitializeAtomicInvariantsAtomTypesInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
967 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
968 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
969 if ($This->{AtomIdentifierType} =~ /^FunctionalClassAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
970 $This->_InitializeFunctionalClassAtomTypesInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
971 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
972 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
973 if ($This->{AtomIdentifierType} =~ /^(DREIDINGAtomTypes|EStateAtomTypes|MMFF94AtomTypes|SLogPAtomTypes|SYBYLAtomTypes|TPSAAtomTypes|UFFAtomTypes)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
974 # Nothing to do for now...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
975 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
976 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
977 carp "Warning: ${ClassName}->_InitializeAtomIdentifierTypeInformation: Unknown atom indentifier type $This->{AtomIdentifierType}...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
978 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
979 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
980 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
981
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
982 # Initialize atomic invariants atom types, generated by AtomTypes::AtomicInvariantsAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
983 # class, to use for generating initial atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
984 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
985 # Let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
986 # AS = Atom symbol corresponding to element symbol
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
987 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
988 # X<n> = Number of non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
989 # BO<n> = Sum of bond orders to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
990 # LBO<n> = Largest bond order of non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
991 # SB<n> = Number of single bonds to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
992 # DB<n> = Number of double bonds to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
993 # TB<n> = Number of triple bonds to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
994 # H<n> = Number of implicit and explicit hydrogens for atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
995 # Ar = Aromatic annotation indicating whether atom is aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
996 # RA = Ring atom annotation indicating whether atom is a ring
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
997 # FC<+n/-n> = Formal charge assigned to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
998 # MN<n> = Mass number indicating isotope other than most abundant isotope
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
999 # SM<n> = Spin multiplicity of atom. Possible values: 1 (singlet), 2 (doublet) or 3 (triplet)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1000 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1001 # Then:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1002 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1003 # Atom type generated by AtomTypes::AtomicInvariantsAtomTypes class corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1004 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1005 # AS.X<n>.BO<n>.LBO<n>.<SB><n>.<DB><n>.<TB><n>.H<n>.Ar.RA.FC<+n/-n>.MN<n>.SM<n>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1006 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1007 # Except for AS which is a required atomic invariant in atom types, all other atomic invariants are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1008 # optional.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1009 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1010 # Default atomic invariants used for generating inital atom identifiers are [ Ref 24 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1011 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1012 # AS, X<n>, BO<n>, H<n>, FC<+n/-n>, MN<n>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1013 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1014 # In addition to usage of abbreviations for specifying atomic invariants, the following descriptive words
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1015 # are also allowed:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1016 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1017 # X : NumOfNonHydrogenAtomNeighbors or NumOfHeavyAtomNeighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1018 # BO : SumOfBondOrdersToNonHydrogenAtoms or SumOfBondOrdersToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1019 # LBO : LargestBondOrderToNonHydrogenAtoms or LargestBondOrderToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1020 # SB : NumOfSingleBondsToNonHydrogenAtoms or NumOfSingleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1021 # DB : NumOfDoubleBondsToNonHydrogenAtoms or NumOfDoubleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1022 # TB : NumOfTripleBondsToNonHydrogenAtoms or NumOfTripleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1023 # H : NumOfImplicitAndExplicitHydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1024 # Ar : Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1025 # RA : RingAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1026 # FC : FormalCharge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1027 # MN : MassNumber
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1028 # SM : SpinMultiplicity
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1029 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1030 sub _InitializeAtomicInvariantsAtomTypesInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1031 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1032
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1033 # Default atomic invariants to use for generating initial atom identifiers are: AS, X, BO, LBO, H, FC
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1034 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1035 @{$This->{AtomicInvariantsToUse}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1036 @{$This->{AtomicInvariantsToUse}} = ('AS', 'X', 'BO', 'H', 'FC', 'MN');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1037
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1038 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1039 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1040
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1041 # Initialize functional class atom types, generated by AtomTypes::FunctionalClassAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1042 # class, to use for generating initial atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1043 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1044 # Let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1045 # HBD: HydrogenBondDonor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1046 # HBA: HydrogenBondAcceptor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1047 # PI : PositivelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1048 # NI : NegativelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1049 # Ar : Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1050 # Hal : Halogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1051 # H : Hydrophobic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1052 # RA : RingAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1053 # CA : ChainAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1054 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1055 # Then:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1056 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1057 # Functiononal class atom type specification for an atom corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1058 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1059 # Ar.CA.H.HBA.HBD.Hal.NI.PI.RA
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1060 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1061 # Default functional classes used are: HBD, HBA, PI, NI, Ar, Hal
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1062 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1063 # FunctionalAtomTypes are assigned using the following definitions [ Ref 60-61, Ref 65-66 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1064 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1065 # HydrogenBondDonor: NH, NH2, OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1066 # HydrogenBondAcceptor: N[!H], O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1067 # PositivelyIonizable: +, NH2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1068 # NegativelyIonizable: -, C(=O)OH, S(=O)OH, P(=O)OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1069 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1070 sub _InitializeFunctionalClassAtomTypesInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1071 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1072
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1073 # Default functional class atom typess to use for generating initial atom identifiers
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1074 # are: HBD, HBA, PI, NI, Ar, Hal
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1075 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1076 @{$This->{FunctionalClassesToUse}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1077 @{$This->{FunctionalClassesToUse}} = ('HBD', 'HBA', 'PI', 'NI', 'Ar', 'Hal');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1078
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1079 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1080 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1081
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1082 # Set atomic invariants to use for generation of intial atom indentifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1083 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1084 sub SetAtomicInvariantsToUse {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1085 my($This, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1086 my($FirstValue, $TypeOfFirstValue, $AtomicInvariant, $SpecifiedAtomicInvariant, @SpecifiedAtomicInvariants, @AtomicInvariantsToUse);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1087
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1088 if (!@Values) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1089 carp "Warning: ${ClassName}->SetAtomicInvariantsToUse: No values specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1090 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1091 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1092
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1093 if ($This->{AtomIdentifierType} !~ /^AtomicInvariantsAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1094 carp "Warning: ${ClassName}->SetFunctionalAtomTypesToUse: AtomicInvariantsToUse can't be set for InitialAtomIdentifierType of $This->{AtomIdentifierType}...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1095 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1096 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1097
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1098 $FirstValue = $Values[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1099 $TypeOfFirstValue = ref $FirstValue;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1100
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1101 @SpecifiedAtomicInvariants = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1102 @AtomicInvariantsToUse = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1103
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1104 if ($TypeOfFirstValue =~ /^ARRAY/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1105 push @SpecifiedAtomicInvariants, @{$FirstValue};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1106 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1107 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1108 push @SpecifiedAtomicInvariants, @Values;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1109 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1110
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1111 # Make sure specified AtomicInvariants are valid...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1112 for $SpecifiedAtomicInvariant (@SpecifiedAtomicInvariants) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1113 if (!AtomTypes::AtomicInvariantsAtomTypes::IsAtomicInvariantAvailable($SpecifiedAtomicInvariant)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1114 croak "Error: ${ClassName}->SetAtomicInvariantsToUse: Specified atomic invariant, $SpecifiedAtomicInvariant, is not supported...\n ";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1115 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1116 $AtomicInvariant = $SpecifiedAtomicInvariant;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1117 push @AtomicInvariantsToUse, $AtomicInvariant;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1118 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1119
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1120 # Set atomic invariants to use...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1121 @{$This->{AtomicInvariantsToUse}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1122 push @{$This->{AtomicInvariantsToUse}}, @AtomicInvariantsToUse;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1123
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1124 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1125 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1126
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1127 # Set functional classes to use for generation of intial atom indentifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1128 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1129 sub SetFunctionalClassesToUse {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1130 my($This, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1131 my($FirstValue, $TypeOfFirstValue, $FunctionalClass, $SpecifiedFunctionalClass, @SpecifiedFunctionalClasses, @FunctionalClassesToUse);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1132
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1133 if (!@Values) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1134 carp "Warning: ${ClassName}->SetFunctionalClassesToUse: No values specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1135 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1136 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1137
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1138 if ($This->{AtomIdentifierType} !~ /^FunctionalClassAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1139 carp "Warning: ${ClassName}->SetFunctionalClassesToUse: FunctionalClassesToUse can't be set for InitialAtomIdentifierType of $This->{AtomIdentifierType}...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1140 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1141 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1142
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1143 $FirstValue = $Values[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1144 $TypeOfFirstValue = ref $FirstValue;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1145
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1146 @SpecifiedFunctionalClasses = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1147 @FunctionalClassesToUse = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1148
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1149 if ($TypeOfFirstValue =~ /^ARRAY/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1150 push @SpecifiedFunctionalClasses, @{$FirstValue};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1151 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1152 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1153 push @SpecifiedFunctionalClasses, @Values;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1154 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1155
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1156 # Make sure specified FunctionalClasses are valid...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1157 for $SpecifiedFunctionalClass (@SpecifiedFunctionalClasses) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1158 if (!AtomTypes::FunctionalClassAtomTypes::IsFunctionalClassAvailable($SpecifiedFunctionalClass)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1159 croak "Error: ${ClassName}->SetFunctionalClassesToUse: Specified functional class, $SpecifiedFunctionalClass, is not supported...\n ";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1160 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1161 push @FunctionalClassesToUse, $SpecifiedFunctionalClass;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1162 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1163
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1164 # Set functional classes to use...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1165 @{$This->{FunctionalClassesToUse}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1166 push @{$This->{FunctionalClassesToUse}}, @FunctionalClassesToUse;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1167
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1168 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1169 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1170
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1171 # Return a string containg data for ExtendedConnectivityFingerprints object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1172 sub StringifyExtendedConnectivityFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1173 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1174 my($ExtendedConnectivityFingerprintsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1175
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1176 $ExtendedConnectivityFingerprintsString = "InitialAtomIdentifierType: $This->{AtomIdentifierType}; NeighborhoodRadius: $This->{NeighborhoodRadius}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1177
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1178 if ($This->{AtomIdentifierType} =~ /^AtomicInvariantsAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1179 my($AtomicInvariant, @AtomicInvariants, @AtomicInvariantsOrder, %AvailableAtomicInvariants);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1180
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1181 @AtomicInvariantsOrder = AtomTypes::AtomicInvariantsAtomTypes::GetAtomicInvariantsOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1182 %AvailableAtomicInvariants = AtomTypes::AtomicInvariantsAtomTypes::GetAvailableAtomicInvariants();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1183
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1184 for $AtomicInvariant (@AtomicInvariantsOrder) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1185 push @AtomicInvariants, "$AtomicInvariant: $AvailableAtomicInvariants{$AtomicInvariant}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1186 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1187
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1188 $ExtendedConnectivityFingerprintsString .= "; AtomicInvariantsToUse: <" . TextUtil::JoinWords(\@{$This->{AtomicInvariantsToUse}}, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1189 $ExtendedConnectivityFingerprintsString .= "; AtomicInvariantsOrder: <" . TextUtil::JoinWords(\@AtomicInvariantsOrder, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1190 $ExtendedConnectivityFingerprintsString .= "; AvailableAtomicInvariants: <" . TextUtil::JoinWords(\@AtomicInvariants, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1191 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1192 elsif ($This->{AtomIdentifierType} =~ /^FunctionalClassAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1193 my($FunctionalClass, @FunctionalClasses, @FunctionalClassesOrder, %AvailableFunctionalClasses);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1194
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1195 @FunctionalClassesOrder = AtomTypes::FunctionalClassAtomTypes::GetFunctionalClassesOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1196 %AvailableFunctionalClasses = AtomTypes::FunctionalClassAtomTypes::GetAvailableFunctionalClasses();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1197
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1198 for $FunctionalClass (@FunctionalClassesOrder) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1199 push @FunctionalClasses, "$FunctionalClass: $AvailableFunctionalClasses{$FunctionalClass}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1200 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1201
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1202 $ExtendedConnectivityFingerprintsString .= "; FunctionalClassesToUse: <" . TextUtil::JoinWords(\@{$This->{FunctionalClassesToUse}}, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1203 $ExtendedConnectivityFingerprintsString .= "; FunctionalClassesOrder: <" . TextUtil::JoinWords(\@FunctionalClassesOrder, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1204 $ExtendedConnectivityFingerprintsString .= "; AvailableFunctionalClasses: <" . TextUtil::JoinWords(\@FunctionalClasses, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1205 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1206
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1207 if ($This->{Type} =~ /^ExtendedConnectivityBits$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1208 # Size...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1209 $ExtendedConnectivityFingerprintsString .= "; Size: $This->{Size}; MinSize: $This->{MinSize}; MaxSize: $This->{MaxSize}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1210
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1211 # Fingerprint bit density and num of bits set...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1212 my($NumOfSetBits, $BitDensity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1213 $NumOfSetBits = $This->{FingerprintsBitVector}->GetNumOfSetBits();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1214 $BitDensity = $This->{FingerprintsBitVector}->GetFingerprintsBitDensity();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1215 $ExtendedConnectivityFingerprintsString .= "; NumOfOnBits: $NumOfSetBits; BitDensity: $BitDensity";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1216
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1217 $ExtendedConnectivityFingerprintsString .= "; FingerprintsBitVector: < $This->{FingerprintsBitVector} >";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1218 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1219 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1220 # Number of identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1221 $ExtendedConnectivityFingerprintsString .= "; NumOfIdentifiers: " . $This->{FingerprintsVector}->GetNumOfValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1222
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1223 # FingerprintsVector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1224 $ExtendedConnectivityFingerprintsString .= "; FingerprintsVector: < $This->{FingerprintsVector} >";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1225 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1226
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1227 return $ExtendedConnectivityFingerprintsString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1228 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1229
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1230 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1231
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1232 __END__
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1233
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1234 =head1 NAME
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1235
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1236 ExtendedConnectivityFingerprints
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1237
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1238 =head1 SYNOPSIS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1239
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1240 use Fingerprints::ExtendedConnectivityFingerprints;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1241
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1242 use Fingerprints::ExtendedConnectivityFingerprints qw(:all);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1243
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1244 =head1 DESCRIPTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1245
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1246 ExtendedConnectivityFingerprints [ Ref 48, Ref 52 ] class provides the following methods:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1247
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1248 new, GenerateFingerprints, GetDescription, SetAtomIdentifierType,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1249 SetAtomicInvariantsToUse, SetFunctionalClassesToUse, SetNeighborhoodRadius,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1250 StringifyExtendedConnectivityFingerprints
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1251
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1252 B<ExtendedConnectivityFingerprints> is derived from B<Fingerprints> class which in turn
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1253 is derived from B<ObjectProperty> base class that provides methods not explicitly defined
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1254 in B<ExtendedConnectivityFingerprints>, B<Fingerprints> or B<ObjectProperty> classes using Perl's
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1255 AUTOLOAD functionality. These methods are generated on-the-fly for a specified object property:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1256
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1257 Set<PropertyName>(<PropertyValue>);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1258 $PropertyValue = Get<PropertyName>();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1259 Delete<PropertyName>();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1260
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1261 The current release of MayaChemTools supports generation of B<ExtendedConnectivityFingerprints>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1262 corresponding to following B<AtomtomIdentifierTypes>:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1263
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1264 AtomicInvariantsAtomTypes, DREIDINGAtomTypes, EStateAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1265 FunctionalClassAtomTypes, MMFF94AtomTypes, SLogPAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1266 SYBYLAtomTypes, TPSAAtomTypes, UFFAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1267
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1268 Based on the values specified for B<AtomIdentifierType>, B<AtomicInvariantsToUse>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1269 and B<FunctionalClassesToUse>, initial atom types are assigned to all non-hydrogen atoms in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1270 a molecule and these atom types strings are converted into initial atom identifier integers using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1271 B<TextUtil::HashCode> function. The duplicate atom identifiers are removed.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1272
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1273 For B<NeighborhoodRadius> value of I<0>, the initial set of unique atom identifiers comprises
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1274 the molecule fingerprints. Otherwise, atom neighborhoods are generated for each non-hydrogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1275 atom up-to specified B<NeighborhoodRadius> value. For each non-hydrogen central atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1276 at a specific radius, its neighbors at next radius level along with their bond orders and previously
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1277 calculated atom identifiers are collected which in turn are used to generate a new integer
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1278 atom identifier; the bond orders and atom identifier pairs list is first sorted by bond order
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1279 followed by atom identifiers to make these values graph invariant.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1280
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1281 After integer atom identifiers have been generated for all non-hydrogen atoms at all specified
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1282 neighborhood radii, the duplicate integer atom identifiers corresponding to same hash code
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1283 value generated using B<TextUtil::HashCode> are tracked by keeping the atom identifiers at
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1284 lower radius. Additionally, all structurally duplicate integer atom identifiers at each specified
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1285 radius are also tracked by identifying equivalent atom and bonds corresponding to substructures
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1286 used for generating atom identifier and keeping integer atom identifier with lowest value.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1287
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1288 For I<ExtendedConnnectivity> value of fingerprints B<Type>, the duplicate identifiers are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1289 removed from the list and the unique atom identifiers constitute the extended connectivity
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1290 fingerprints of a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1291
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1292 For I<ExtendedConnnectivityCount> value of fingerprints B<Type>, the occurrence of each
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1293 unique atom identifiers appears is counted and the unique atom identifiers along with their
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1294 count constitute the extended connectivity fingerprints of a molecule.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1295
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1296 For I<ExtendedConnectivityBits> value of fingerprints B<-m, --mode>, the unique atom identifiers
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1297 are used as a random number seed to generate a random integer value between 0 and B<--Size> which
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1298 in turn is used to set corresponding bits in the fingerprint bit-vector string.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1299
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1300 The current release of MayaChemTools generates the following types of extended connectivity
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1301 fingerprints vector strings:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1302
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1303 FingerprintsVector;ExtendedConnectivity:AtomicInvariantsAtomTypes:Radi
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1304 us2;60;AlphaNumericalValues;ValuesString;73555770 333564680 352413391
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1305 666191900 1001270906 1371674323 1481469939 1977749791 2006158649 21414
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1306 08799 49532520 64643108 79385615 96062769 273726379 564565671 85514103
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1307 5 906706094 988546669 1018231313 1032696425 1197507444 1331250018 1338
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1308 532734 1455473691 1607485225 1609687129 1631614296 1670251330 17303...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1309
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1310 FingerprintsVector;ExtendedConnectivityCount:AtomicInvariantsAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1311 :Radius2;60;NumericalValues;IDsAndValuesString;73555770 333564680 3524
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1312 13391 666191900 1001270906 1371674323 1481469939 1977749791 2006158649
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1313 2141408799 49532520 64643108 79385615 96062769 273726379 564565671...;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1314 3 2 1 1 14 1 2 10 4 3 1 1 1 1 2 1 2 1 1 1 2 3 1 1 2 1 3 3 8 2 2 2 6 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1315 1 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2 1 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1316
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1317 FingerprintsBitVector;ExtendedConnectivityBits:AtomicInvariantsAtomTyp
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1318 es:Radius2;1024;BinaryString;Ascending;0000000000000000000000000000100
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1319 0000000001010000000110000011000000000000100000000000000000000000100001
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1320 1000000110000000000000000000000000010011000000000000000000000000010000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1321 0000000000000000000000000010000000000000000001000000000000000000000000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1322 0000000000010000100001000000000000101000000000000000100000000000000...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1323
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1324 FingerprintsBitVector;ExtendedConnectivityBits:AtomicInvariantsAtomTyp
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1325 es:Radius2;1024;HexadecimalString;Ascending;000000010050c0600800000803
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1326 0300000091000004000000020000100000000124008200020000000040020000000000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1327 2080000000820040010020000000008040000000000080001000000000400000000000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1328 4040000090000061010000000800200000000000001400000000020080000000000020
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1329 00008020200000408000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1330
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1331 FingerprintsVector;ExtendedConnectivity:FunctionalClassAtomTypes:Radiu
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1332 s2;57;AlphaNumericalValues;ValuesString;24769214 508787397 850393286 8
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1333 62102353 981185303 1231636850 1649386610 1941540674 263599683 32920567
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1334 1 571109041 639579325 683993318 723853089 810600886 885767127 90326012
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1335 7 958841485 981022393 1126908698 1152248391 1317567065 1421489994 1455
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1336 632544 1557272891 1826413669 1983319256 2015750777 2029559552 20404...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1337
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1338 FingerprintsVector;ExtendedConnectivityCount:FunctionalClassAtomTypes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1339 Radius2;57;NumericalValues;IDsAndValuesString;24769214 508787397 85039
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1340 3286 862102353 981185303 1231636850 1649386610 1941540674 263599683 32
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1341 9205671 571109041 639579325 683993318 723853089 810600886 885767127...;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1342 1 1 1 10 2 22 3 1 3 3 1 1 1 3 2 2 1 2 2 2 3 1 1 1 1 1 14 1 1 1 1 1 1 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1343 1 2 1 1 2 2 1 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1344
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1345 FingerprintsBitVector;ExtendedConnectivityBits:FunctionalClassAtomType
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1346 s:Radius2;1024;BinaryString;Ascending;00000000000000000000100000000000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1347 0000000001000100000000001000000000000000000000000000000000101000000010
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1348 0000001000000000010000000000000000000000000000000000000000000000000100
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1349 0000000000001000000000000001000000000001001000000000000000000000000000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1350 0000000000000000100000000000001000000000000000000000000000000000000...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1351
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1352 FingerprintsVector;ExtendedConnectivity:DREIDINGAtomTypes:Radius2;56;A
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1353 lphaNumericalValues;ValuesString;280305427 357928343 721790579 1151822
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1354 898 1207111054 1380963747 1568213839 1603445250 4559268 55012922 18094
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1355 0813 335715751 534801009 684609658 829361048 972945982 999881534 10076
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1356 55741 1213692591 1222032501 1224517934 1235687794 1244268533 152812070
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1357 0 1629595024 1856308891 1978806036 2001865095 2096549435 172675415 ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1358
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1359 FingerprintsVector;ExtendedConnectivity:EStateAtomTypes:Radius2;62;Alp
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1360 haNumericalValues;ValuesString;25189973 528584866 662581668 671034184
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1361 926543080 1347067490 1738510057 1759600920 2034425745 2097234755 21450
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1362 44754 96779665 180364292 341712110 345278822 386540408 387387308 50430
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1363 1706 617094135 771528807 957666640 997798220 1158349170 1291258082 134
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1364 1138533 1395329837 1420277211 1479584608 1486476397 1487556246 1566...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1365
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1366 FingerprintsVector;ExtendedConnectivity:MMFF94AtomTypes:Radius2;64;Alp
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1367 haNumericalValues;ValuesString;224051550 746527773 998750766 103704190
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1368 2 1239701709 1248384926 1259447756 1521678386 1631549126 1909437580 20
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1369 37095052 2104274756 2117729376 8770364 31445800 81450228 314289324 344
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1370 041929 581773587 638555787 692022098 811840536 929651561 936421792 988
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1371 636432 1048624296 1054288509 1369487579 1454058929 1519352190 17271...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1372
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1373 FingerprintsVector;ExtendedConnectivity:SLogPAtomTypes:Radius2;71;Alph
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1374 aNumericalValues;ValuesString;78989290 116507218 489454042 888737940 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1375 162561799 1241797255 1251494264 1263717127 1471206899 1538061784 17654
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1376 07295 1795036542 1809833874 2020454493 2055310842 2117729376 11868981
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1377 56731842 149505242 184525155 196984339 288181334 481409282 556716568 6
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1378 41915747 679881756 721736571 794256218 908276640 992898760 10987549...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1379
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1380 FingerprintsVector;ExtendedConnectivity:SYBYLAtomTypes:Radius2;58;Alph
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1381 aNumericalValues;ValuesString;199957044 313356892 455463968 465982819
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1382 1225318176 1678585943 1883366064 1963811677 2117729376 113784599 19153
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1383 8837 196629033 263865277 416380653 477036669 681527491 730724924 90906
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1384 5537 1021959189 1133014972 1174311016 1359441203 1573452838 1661585138
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1385 1668649038 1684198062 1812312554 1859266290 1891651106 2072549404 ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1386
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1387 FingerprintsVector;ExtendedConnectivity:TPSAAtomTypes:Radius2;47;Alpha
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1388 NumericalValues;ValuesString;20818206 259344053 862102353 1331904542 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1389 700688206 265614156 363161397 681332588 810600886 885767127 950172500
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1390 951454814 1059668746 1247054493 1382302230 1399502637 1805025917 19189
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1391 39561 2114677228 2126402271 8130483 17645742 32278373 149975755 160327
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1392 654 256360355 279492740 291251259 317592700 333763396 972105960 101...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1393
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1394 FingerprintsVector;ExtendedConnectivity:UFFAtomTypes:Radius2;56;AlphaN
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1395 umericalValues;ValuesString;280305427 357928343 721790579 1151822898 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1396 207111054 1380963747 1568213839 1603445250 4559268 55012922 180940813
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1397 335715751 534801009 684609658 829361048 972945982 999881534 1007655741
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1398 1213692591 1222032501 1224517934 1235687794 1244268533 1528120700 162
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1399 9595024 1856308891 1978806036 2001865095 2096549435 172675415 18344...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1400
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1401 =head2 METHODS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1402
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1403 =over 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1404
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1405 =item B<new>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1407 $NewExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1408 %NamesAndValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1409
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1410 Using specified I<ExtendedConnectivityFingerprints> property names and values hash, B<new>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1411 method creates a new object and returns a reference to newly created B<ExtendedConnectivityFingerprints>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1412 object. By default, the following properties are initialized:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1413
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1414 Molecule = ''
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1415 Type = 'ExtendedConnectivity'
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1416 NeighborhoodRadius = 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1417 AtomIdentifierType = ''
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1418 AtomicInvariantsToUse = ['AS', 'X', 'BO', 'H', 'FC', 'MN']
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1419 FunctionalClassesToUse = ['HBD', 'HBA', 'PI', 'NI', 'Ar', 'Hal']
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1420
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1421 Examples:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1422
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1423 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1424 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1425 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1426 'AtomicInvariantsAtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1427
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1428 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1429 'Type' => 'ExtendedConnectivityCount',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1430 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1431 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1432 'AtomicInvariantsAtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1433
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1434 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1435 'Type' => 'ExtendedConnectivityBits',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1436 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1437 'Size' => 1024,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1438 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1439 'AtomicInvariantsAtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1440
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1441 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1442 'Type' => 'ExtendedConnectivity',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1443 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1444 'NeighborhoodRadius' => 2,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1445 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1446 'AtomicInvariantsAtomTypes',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1447 'AtomicInvariantsToUse' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1448 ['AS', 'X', 'BO', 'H', 'FC', 'MN'] );
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1449
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1450 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1451 'Type' => 'ExtendedConnectivity',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1452 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1453 'NeighborhoodRadius' => 2,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1454 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1455 'FunctionalClassAtomTypes',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1456 'FunctionalClassesToUse' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1457 ['HBD', 'HBA', 'PI', 'NI', 'Ar', 'Hal'] );
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1458
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1459 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1460 'Type' => 'ExtendedConnectivity',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1461 'Molecule' => $Molecule,;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1462 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1463 'MMFF94AtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1464
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1465 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1466 'Type' => 'ExtendedConnectivityCount',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1467 'Molecule' => $Molecule,;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1468 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1469 'MMFF94AtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1470
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1471 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1472 'Type' => 'ExtendedConnectivityCount',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1473 'Molecule' => $Molecule,;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1474 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1475 'SLogPAtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1476
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1477 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1478 'Type' => 'ExtendedConnectivity',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1479 'Molecule' => $Molecule,;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1480 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1481 'SLogPAtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1482
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1483 $ExtendedConnectivityFingerprints = new ExtendedConnectivityFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1484 'Type' => 'ExtendedConnectivity',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1485 'Molecule' => $Molecule,;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1486 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1487 'SYBYLAtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1488
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1489 $ExtendedConnectivityFingerprints->GenerateFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1490 print "$ExtendedConnectivityFingerprints\n";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1491
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1492 =item B<GenerateFingerprints>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1493
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1494 $ExtendedConnectivityFingerprints->GenerateFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1495
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1496 Generates extended connectivity fingerprints and returns I<ExtendedConnectivityFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1497
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1498 =item B<GetDescription>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1499
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1500 $Description = $ExtendedConnectivityFingerprints->GetDescription();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1501
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1502 Returns a string containing description of extended connectivity fingerprints
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1503 fingerprints.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1504
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1505 =item B<SetAtomIdentifierType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1506
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1507 $ExtendedConnectivityFingerprints->SetAtomIdentifierType($IdentifierType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1508
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1509 Sets atom I<IdentifierType> to use during extended connectivity fingerprints generation and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1510 returns I<ExtendedConnectivityFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1511
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1512 Possible values: I<AtomicInvariantsAtomTypes, DREIDINGAtomTypes, EStateAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1513 FunctionalClassAtomTypes, MMFF94AtomTypes, SLogPAtomTypes, SYBYLAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1514 TPSAAtomTypes, UFFAtomTypes>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1515
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1516 =item B<SetAtomicInvariantsToUse>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1517
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1518 $ExtendedConnectivityFingerprints->SetAtomicInvariantsToUse($ValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1519 $ExtendedConnectivityFingerprints->SetAtomicInvariantsToUse(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1520
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1521 Sets atomic invariants to use during I<AtomicInvariantsAtomTypes> value of I<AtomIdentifierType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1522 for extended connectivity fingerprints generation and returns I<ExtendedConnectivityFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1523
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1524 Possible values for atomic invariants are: I<AS, X, BO, LBO, SB, DB, TB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1525 H, Ar, RA, FC, MN, SM>. Default value [ Ref 24 ]: I<AS,X,BO,H,FC,MN>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1526
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1527 The atomic invariants abbreviations correspond to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1528
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1529 AS = Atom symbol corresponding to element symbol
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1530
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1531 X<n> = Number of non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1532 BO<n> = Sum of bond orders to non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1533 LBO<n> = Largest bond order of non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1534 SB<n> = Number of single bonds to non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1535 DB<n> = Number of double bonds to non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1536 TB<n> = Number of triple bonds to non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1537 H<n> = Number of implicit and explicit hydrogens for atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1538 Ar = Aromatic annotation indicating whether atom is aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1539 RA = Ring atom annotation indicating whether atom is a ring
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1540 FC<+n/-n> = Formal charge assigned to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1541 MN<n> = Mass number indicating isotope other than most abundant isotope
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1542 SM<n> = Spin multiplicity of atom. Possible values: 1 (singlet), 2 (doublet) or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1543 3 (triplet)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1544
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1545 Atom type generated by AtomTypes::AtomicInvariantsAtomTypes class corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1546
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1547 AS.X<n>.BO<n>.LBO<n>.<SB><n>.<DB><n>.<TB><n>.H<n>.Ar.RA.FC<+n/-n>.MN<n>.SM<n>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1548
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1549 Except for AS which is a required atomic invariant in atom types, all other atomic invariants are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1550 optional. Atom type specification doesn't include atomic invariants with zero or undefined values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1551
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1552 In addition to usage of abbreviations for specifying atomic invariants, the following descriptive words
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1553 are also allowed:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1554
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1555 X : NumOfNonHydrogenAtomNeighbors or NumOfHeavyAtomNeighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1556 BO : SumOfBondOrdersToNonHydrogenAtoms or SumOfBondOrdersToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1557 LBO : LargestBondOrderToNonHydrogenAtoms or LargestBondOrderToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1558 SB : NumOfSingleBondsToNonHydrogenAtoms or NumOfSingleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1559 DB : NumOfDoubleBondsToNonHydrogenAtoms or NumOfDoubleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1560 TB : NumOfTripleBondsToNonHydrogenAtoms or NumOfTripleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1561 H : NumOfImplicitAndExplicitHydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1562 Ar : Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1563 RA : RingAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1564 FC : FormalCharge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1565 MN : MassNumber
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1566 SM : SpinMultiplicity
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1567
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1568 I<AtomTypes::AtomicInvariantsAtomTypes> module is used to assign atomic invariant
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1569 atom types.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1570
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1571 =item B<SetFunctionalClassesToUse>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1572
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1573 $ExtendedConnectivityFingerprints->SetFunctionalClassesToUse($ValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1574 $ExtendedConnectivityFingerprints->SetFunctionalClassesToUse(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1575
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1576 Sets functional classes invariants to use during I<FunctionalClassAtomTypes> value of I<AtomIdentifierType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1577 for extended connectivity fingerprints generation and returns I<ExtendedConnectivityFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1578
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1579 Possible values for atom functional classes are: I<Ar, CA, H, HBA, HBD, Hal, NI, PI, RA>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1580 Default value [ Ref 24 ]: I<HBD,HBA,PI,NI,Ar,Hal>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1581
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1582 The functional class abbreviations correspond to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1583
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1584 HBD: HydrogenBondDonor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1585 HBA: HydrogenBondAcceptor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1586 PI : PositivelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1587 NI : NegativelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1588 Ar : Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1589 Hal : Halogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1590 H : Hydrophobic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1591 RA : RingAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1592 CA : ChainAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1593
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1594 Functional class atom type specification for an atom corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1595
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1596 Ar.CA.H.HBA.HBD.Hal.NI.PI.RA or None
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1597
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1598 I<AtomTypes::FunctionalClassAtomTypes> module is used to assign functional class atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1599 types. It uses following definitions [ Ref 60-61, Ref 65-66 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1600
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1601 HydrogenBondDonor: NH, NH2, OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1602 HydrogenBondAcceptor: N[!H], O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1603 PositivelyIonizable: +, NH2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1604 NegativelyIonizable: -, C(=O)OH, S(=O)OH, P(=O)OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1605
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1606 =item B<SetNeighborhoodRadius>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1607
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1608 $ExtendedConnectivityFingerprints->SetNeighborhoodRadius($Radius);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1609
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1610 Sets neighborhood radius to use during extended connectivity fingerprints generation and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1611 returns I<ExtendedConnectivityFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1612
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1613 =item B<StringifyExtendedConnectivityFingerprints>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1614
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1615 $String = $Fingerprints->StringifyExtendedConnectivityFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1616
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1617 Returns a string containing information about I<ExtendedConnectivityFingerprints> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1618
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1619 =back
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1620
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1621 =head1 AUTHOR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1622
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1623 Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1624
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1625 =head1 SEE ALSO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1626
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1627 Fingerprints.pm, FingerprintsStringUtil.pm, AtomNeighborhoodsFingerprints.pm,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1628 AtomTypesFingerprints.pm, EStateIndiciesFingerprints.pm, MACCSKeys.pm,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1629 PathLengthFingerprints.pm, TopologicalAtomPairsFingerprints.pm,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1630 TopologicalAtomTripletsFingerprints.pm, TopologicalAtomTorsionsFingerprints.pm,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1631 TopologicalPharmacophoreAtomPairsFingerprints.pm,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1632 TopologicalPharmacophoreAtomTripletsFingerprints.pm
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1633
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1634
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1635 =head1 COPYRIGHT
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1636
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1637 Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1638
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1639 This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1640
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1641 MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1642 the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1643 Software Foundation; either version 3 of the License, or (at your option)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1644 any later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1645
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1646 =cut