annotate lib/Fingerprints/PathLengthFingerprints.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::PathLengthFingerprints;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: PathLengthFingerprints.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::DREIDINGAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
38 use AtomTypes::EStateAtomTypes;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
39 use AtomTypes::FunctionalClassAtomTypes;
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 '""' => 'StringifyPathLengthFingerprints';
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->_InitializePathLengthFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
69
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
70 $This->_InitializePathLengthFingerprintsProperties(%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 _InitializePathLengthFingerprints {
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 # PathLengthBits - A bit vector indicating presence/absence of atom paths
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
83 # PathLengthCount - A vector containing count of atom paths
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
84 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
85 $This->{Type} = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
86
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
87 # Type of vector: FingerprintsBitVector or FingerprintsVector
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
88 $This->{VectorType} = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
89
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
90 # Set default mininum, maximum, and default size. Although any arbitrary size can
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
91 # be specified, bit vector used to store bits work on a vector size which is
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
92 # power of 2 and additonal bits are automatically added and cleared.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
93 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
94 $This->{Size} = 1024;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
95
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
96 $This->{MinSize} = 32;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
97 $This->{MaxSize} = 2**32;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
98
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
99 # Minimum and maximum path lengths to use for fingerprints generation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
100 $This->{MinLength} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
101 $This->{MaxLength} = 8;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
102
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
103 # Numner of bits to set for each atom path for FingerprintsBitVector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
104 $This->{NumOfBitsToSetPerPath} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
105
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
106 # Atom identifier type to use for path atoms during fingerprints generation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
107 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
108 # Currently supported values are: AtomicInvariantsAtomTypes, DREIDINGAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
109 # EStateAtomTypes, FunctionalClassAtomTypes, MMFF94AtomTypes, SLogPAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
110 # SYBYLAtomTypes, TPSAAtomTypes, UFFAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
111 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
112 $This->{AtomIdentifierType} = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
113
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
114 # Atom types assigned to atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
115 %{$This->{AssignedAtomTypes}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
116
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
117 # For molecules containing rings, atom paths starting from each atom can be traversed in four
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
118 # different ways:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
119 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
120 # . Atom paths without any rings and sharing of bonds in traversed paths.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
121 # . Atom paths containing rings and without any sharing of bonds in traversed paths
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
122 # . All possible atom paths without any rings and sharing of bonds in traversed paths
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
123 # . All possible atom paths containing rings and with sharing of bonds in traversed paths.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
124 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
125 # Atom path traversal is terminated at the last ring atom. For molecules containing no rings,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
126 # first two and last two types described above are equivalent.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
127 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
128 # AllowSharedBonds and AllowRings variables allow generation of differen types of paths
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
129 # to be used for fingerprints generation.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
130 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
131 # In addition to atom symbols, bond symbols are also used to generate a string
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
132 # for atom paths. These atom paths strings are hased to a 32 bit integer key which
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
133 # in turn is used as a seed for a random number generation in range of 1 to fingerprint
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
134 # size for setting corresponding bit in bit vector.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
135 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
136 # UseBondSymbols variable allow generation of atom path strings and consequently fingerprints.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
137 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
138 # Combination of AllowSharedBonds, AllowRings, and UseBondSymbols allow generation of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
139 # 8 different types of path length fingerprints:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
140 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
141 # AllowSharedBonds AllowRings UseBondSymbols PathLengthFingerprintsType
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
142 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
143 # No No Yes AtomPathsNoCyclesWithBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
144 # No Yes Yes AtomPathsWithCyclesWithBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
145 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
146 # Yes No Yes AllAtomPathsNoCyclesWithBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
147 # Yes Yes Yes AllAtomPathsWithCyclesWithBondSymbols [ DEFAULT ]
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
148 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
149 # No No No AtomPathsNoCyclesNoBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
150 # No Yes No AtomPathsWithCyclesNoBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
151 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
152 # Yes No No AllAtomPathsNoCyclesNoBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
153 # Yes Yes No AllAtomPathsWithCyclesNoWithBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
154 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
155 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
156
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
157 # By default, atom paths starting from atoms are allowed to share bonds already traversed...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
158 $This->{AllowSharedBonds} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
159
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
160 # By default rings are included in paths...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
161 $This->{AllowRings} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
162
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
163 # By default bond symbols are included in atom path strings...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
164 $This->{UseBondSymbols} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
165
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
166 # By default only structurally unique atom paths are used for generation
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
167 # atom path strings...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
168 $This->{UseUniquePaths} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
169
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
170 # Random number generator to use during generation of fingerprints bit-vector
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
171 # string: Perl CORE::rand or MayaChemTools MathUtil::random function.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
172 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
173 # The random number generator implemented in MayaChemTools is a variant of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
174 # linear congruential generator (LCG) as described by Miller et al. [ Ref 120 ].
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
175 # It is also referred to as Lehmer random number generator or Park-Miller
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
176 # random number generator.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
177 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
178 # Unlike Perl's core random number generator function rand, the random number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
179 # generator implemented in MayaChemTools, MathUtil::random, generates consistent
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
180 # random values across different platformsfor a specific random seed and leads
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
181 # to generation of portable fingerprints bit-vector strings.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
182 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
183 $This->{UsePerlCoreRandom} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
184
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
185 # Bond symbols to use during generation of atom path strings...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
186 %{$This->{BondOrderToSymbol}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
187 %{$This->{BondOrderToSymbol}} = ('1' => '', '1.5' => ':', '2' => '=', '3' => '#');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
188
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
189 # BondSymbols map to use for bonded atom IDs to use during atom path strings...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
190 %{$This->{BondSymbols}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
191
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
192 # Path atom IDs to remove duplicate paths...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
193 %{$This->{UniqueLinearAtomPathsIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
194 %{$This->{UniqueCyclicAtomPathsIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
195
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
196 # Reference to all the atom paths upto specified path length...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
197 $This->{AtomPathsRef} = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
198
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
199 # Atom paths strings created using specified atom types and bond symbols...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
200 %{$This->{AtomPathsStrings}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
201 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
202
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
203 # Initialize class ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
204 sub _InitializeClass {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
205 #Class name...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
206 $ClassName = __PACKAGE__;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
207 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
208
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
209 # Initialize object properties....
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
210 sub _InitializePathLengthFingerprintsProperties {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
211 my($This, %NamesAndValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
212
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
213 my($Name, $Value, $MethodName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
214 while (($Name, $Value) = each %NamesAndValues) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
215 $MethodName = "Set${Name}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
216 $This->$MethodName($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
217 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
218
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
219 # Make sure molecule object was specified...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
220 if (!exists $NamesAndValues{Molecule}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
221 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying molecule...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
222 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
223
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
224 if (!exists $NamesAndValues{Type}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
225 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying Type...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
226 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
227
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
228 if (!exists $NamesAndValues{AtomIdentifierType}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
229 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying AtomIdentifierType...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
230 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
231
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
232 # Make sure it's power of 2...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
233 if (exists $NamesAndValues{Size}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
234 if (!TextUtil::IsNumberPowerOfNumber($NamesAndValues{Size}, 2)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
235 croak "Error: ${ClassName}->New: Specified size value, $NamesAndValues{Size}, must be power of 2...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
236 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
237 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
238
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
239 if ($This->{Type} =~ /^PathLengthBits$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
240 $This->_InitializePathLengthBits();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
241 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
242 elsif ($This->{Type} =~ /^PathLengthCount$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
243 $This->_InitializePathLengthCount();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
244 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
245 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
246 croak "Error: ${ClassName}->_InitializePathLengthFingerprintsProperties: Unknown PathLength type: $This->{Type}; Supported PathLength type : PathLengthBits or PathLengthCount......";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
247 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
248
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
249 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
250 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
251
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
252 # Initialize PathLength bits...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
253 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
254 sub _InitializePathLengthBits {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
255 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
256
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
257 # Vector type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
258 $This->{VectorType} = 'FingerprintsBitVector';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
259
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
260 $This->_InitializeFingerprintsBitVector();
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 # Initialize PathLength key count...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
266 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
267 sub _InitializePathLengthCount {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
268 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
269
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
270 # Vector type and type of values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
271 $This->{VectorType} = 'FingerprintsVector';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
272 $This->{FingerprintsVectorType} = 'NumericalValues';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
273
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
274 $This->_InitializeFingerprintsVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
275
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
276 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
277 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
278
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
279 # Set type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
280 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
281 sub SetType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
282 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
283
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
284 if ($This->{Type}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
285 croak "Error: ${ClassName}->SetType: Can't change 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 if ($Type =~ /^PathLengthBits$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
289 $This->{Type} = 'PathLengthBits';;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
290 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
291 elsif ($Type =~ /^PathLengthCount$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
292 $This->{Type} = 'PathLengthCount';;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
293 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
294 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
295 croak "Error: ${ClassName}->SetType: Unknown PathLength keys: $Type; Supported PathLength types: PathLengthBits or PathLengthCount...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
296 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
297 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
298 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
299
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
300 # Disable vector type change...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
301 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
302 sub SetVectorType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
303 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
304
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
305 croak "Error: ${ClassName}->SetVectorType: Can't change vector type...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
306
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
307 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
308 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
309
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
310 # Disable vector type change...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
311 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
312 sub SetFingerprintsVectorType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
313 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
314
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
315 croak "Error: ${ClassName}->SetFingerprintsVectorType: Can't change fingerprints vector type...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
316
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
317 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
318 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
319
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
320 # Set atom identifier type to use for path length atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
321 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
322 sub SetAtomIdentifierType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
323 my($This, $IdentifierType) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
324
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
325 if ($IdentifierType !~ /^(AtomicInvariantsAtomTypes|DREIDINGAtomTypes|EStateAtomTypes|FunctionalClassAtomTypes|MMFF94AtomTypes|SLogPAtomTypes|SYBYLAtomTypes|TPSAAtomTypes|UFFAtomTypes)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
326 croak "Error: ${ClassName}->SetAtomIdentifierType: Specified value, $IdentifierType, for AtomIdentifierType is not vaild. Supported types in current release of MayaChemTools: AtomicInvariantsAtomTypes, DREIDINGAtomTypes, EStateAtomTypes, FunctionalClassAtomTypes, MMFF94AtomTypes, SLogPAtomTypes, SYBYLAtomTypes, TPSAAtomTypes, and UFFAtomTypes.";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
327 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
328
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
329 if ($This->{AtomIdentifierType}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
330 croak "Error: ${ClassName}->SetAtomIdentifierType: Can't change atom identifier type: It's already set...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
331 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
332
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
333 $This->{AtomIdentifierType} = $IdentifierType;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
334
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
335 # Initialize atom identifier type information...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
336 $This->_InitializeAtomIdentifierTypeInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
337
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
338 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
339 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
340
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
341 # Set minimum path length...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
342 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
343 sub SetMinLength {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
344 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
345
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
346 if (!TextUtil::IsPositiveInteger($Value)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
347 croak "Error: ${ClassName}->SetMinLength: MinLength value, $Value, is not valid: It must be a positive integer...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
348 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
349 $This->{MinLength} = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
350
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
351 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
352 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
353
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
354 # Set maximum path length...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
355 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
356 sub SetMaxLength {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
357 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
358
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
359 if (!TextUtil::IsPositiveInteger($Value)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
360 croak "Error: ${ClassName}->SetMaxLength: MaxLength value, $Value, is not valid: It must be a positive integer...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
361 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
362 $This->{MaxLength} = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
363
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
364 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
365 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
366
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
367 # Set number of bits to set for each path...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
368 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
369 sub SetNumOfBitsToSetPerPath {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
370 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
371
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
372 if (!TextUtil::IsPositiveInteger($Value)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
373 croak "Error: ${ClassName}->SetNumOfBitsToSetPerPath: NumOfBitsToSetPerPath value, $Value, is not valid: It must be a positive integer...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
374 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
375 $This->{NumOfBitsToSetPerPath} = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
376
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
377 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
378 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
379
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
380 # Generate fingerprints description...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
381 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
382 sub GetDescription {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
383 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
384
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
385 # Is description explicity set?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
386 if (exists $This->{Description}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
387 return $This->{Description};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
388 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
389
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
390 # Generate fingerprints description...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
391
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
392 return "$This->{Type}:$This->{AtomIdentifierType}:MinLength$This->{MinLength}:MaxLength$This->{MaxLength}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
393 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
394
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
395 # Generate path length fingerprints...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
396 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
397 sub GenerateFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
398 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
399
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
400 if ($This->{MinLength} > $This->{MaxLength}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
401 croak "Error: ${ClassName}->GenerateFingerprints: No fingerpritns generated: MinLength, $This->{MinLength}, must be <= MaxLength, $This->{MaxLength}...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
402 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
403
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
404 # Cache appropriate molecule data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
405 $This->_SetupMoleculeDataCache();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
407 # Assign atom types to all atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
408 if (!$This->_AssignAtomTypes()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
409 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
410 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
411 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
412
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
413 # Setup bond symbol map...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
414 if ($This->{UseBondSymbols}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
415 $This->_InitializeBondSymbols();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
416 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
417
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
418 # Generate appropriate atom paths...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
419 $This->_GenerateAtomPathsUpToMaxLength();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
420
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
421 # Initialize atom path strings...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
422 $This->_InitializeAtomPathsStrings();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
423
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
424 # Generate appropriate atom path strings for unique atom paths...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
425 $This->_GenerateAtomPathsStrings();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
426
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
427 # Set final fingerprints...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
428 $This->_SetFinalFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
429
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
430 # Clear cached molecule data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
431 $This->_ClearMoleculeDataCache();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
432
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
433 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
434 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
435
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
436 # Assign appropriate atom types to all atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
437 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
438 sub _AssignAtomTypes {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
439 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
440 my($SpecifiedAtomTypes, $Atom, $AtomID, $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
441
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
442 %{$This->{AssignedAtomTypes}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
443 $IgnoreHydrogens = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
444
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
445 $SpecifiedAtomTypes = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
446
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
447 IDENTIFIERTYPE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
448 if ($This->{AtomIdentifierType} =~ /^AtomicInvariantsAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
449 $SpecifiedAtomTypes = new AtomTypes::AtomicInvariantsAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens, 'AtomicInvariantsToUse' => $This->{AtomicInvariantsToUse});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
450 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
451 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
452
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
453 if ($This->{AtomIdentifierType} =~ /^DREIDINGAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
454 $SpecifiedAtomTypes = new AtomTypes::DREIDINGAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
455 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
456 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
457
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
458 if ($This->{AtomIdentifierType} =~ /^EStateAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
459 $SpecifiedAtomTypes = new AtomTypes::EStateAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
460 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
461 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
462
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
463 if ($This->{AtomIdentifierType} =~ /^FunctionalClassAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
464 $SpecifiedAtomTypes = new AtomTypes::FunctionalClassAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens, 'FunctionalClassesToUse' => $This->{FunctionalClassesToUse});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
465 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
466 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
467
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
468 if ($This->{AtomIdentifierType} =~ /^MMFF94AtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
469 $SpecifiedAtomTypes = new AtomTypes::MMFF94AtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
470 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
471 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
472
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
473 if ($This->{AtomIdentifierType} =~ /^SLogPAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
474 $SpecifiedAtomTypes = new AtomTypes::SLogPAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
475 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
476 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
477 if ($This->{AtomIdentifierType} =~ /^SYBYLAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
478 $SpecifiedAtomTypes = new AtomTypes::SYBYLAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
479 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
480 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
481
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
482 if ($This->{AtomIdentifierType} =~ /^TPSAAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
483 $SpecifiedAtomTypes = new AtomTypes::TPSAAtomTypes('Molecule' => $This->{Molecule}, 'IgnorePhosphorus' => 0, 'IgnoreSulfur' => 0);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
484 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
485 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
486
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
487 if ($This->{AtomIdentifierType} =~ /^UFFAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
488 $SpecifiedAtomTypes = new AtomTypes::UFFAtomTypes('Molecule' => $This->{Molecule}, 'IgnoreHydrogens' => $IgnoreHydrogens);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
489 last IDENTIFIERTYPE;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
490 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
491
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
492 croak "Error: ${ClassName}->_AssignAtomTypes: Unknown atom indentifier type $This->{AtomIdentifierType}...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
493 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
494
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
495 # Assign atom types...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
496 $SpecifiedAtomTypes->AssignAtomTypes();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
497
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
498 # Make sure atom types assignment is successful...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
499 if (!$SpecifiedAtomTypes->IsAtomTypesAssignmentSuccessful()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
500 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
501 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
502
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
503 # Collect assigned atom types...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
504 ATOM: for $Atom (@{$This->{Atoms}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
505 $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
506 $This->{AssignedAtomTypes}{$AtomID} = $SpecifiedAtomTypes->GetAtomType($Atom);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
507 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
508
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
509 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
510 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
511
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
512 # Setup bond symbol map for atoms to speed up generation of path length identifiers
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
513 # during fingerprints generation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
514 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
515 sub _InitializeBondSymbols {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
516 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
517 my($Atom1, $Atom2, $AtomID1, $AtomID2, $Bond, $BondSymbol, $BondOrder);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
518
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
519 %{$This->{BondSymbols}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
520
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
521 if (!$This->{UseBondSymbols}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
522 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
523 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
524
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
525 for $Bond ($This->{Molecule}->GetBonds()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
526 $BondOrder = $Bond->GetBondOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
527 $BondSymbol = $Bond->IsAromatic() ? ':' : (exists($This->{BondOrderToSymbol}{$BondOrder}) ? $This->{BondOrderToSymbol}{$BondOrder} : $BondOrder);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
528 ($Atom1, $Atom2) = $Bond->GetAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
529 $AtomID1 = $Atom1->GetID(); $AtomID2 = $Atom2->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
530 if ($AtomID1 > $AtomID2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
531 ($AtomID1, $AtomID2) = ($AtomID2, $AtomID1);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
532 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
533
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
534 if (!exists $This->{BondSymbols}{$AtomID1}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
535 %{$This->{BondSymbols}{$AtomID1}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
536 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
537 $This->{BondSymbols}{$AtomID1}{$AtomID2} = $BondSymbol;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
538 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
539 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
540 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
541
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
542 # Get appropriate atom paths with length up to MaxLength...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
543 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
544 sub _GenerateAtomPathsUpToMaxLength {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
545 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
546 my($PathLength, $AllowRings, $Molecule, $AtomPathsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
547
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
548 $PathLength = $This->{MaxLength};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
549 $AllowRings = $This->{AllowRings};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
550 $Molecule = $This->{Molecule};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
551
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
552 if ($This->{AllowSharedBonds}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
553 $AtomPathsRef = $Molecule->GetAllAtomPathsWithLengthUpto($PathLength, $AllowRings);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
554 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
555 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
556 $AtomPathsRef = $Molecule->GetAtomPathsWithLengthUpto($PathLength, $AllowRings);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
557 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
558 $This->{AtomPathsRef} = $AtomPathsRef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
559
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
560 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
561 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
562
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
563 # Initialize atom paths strings at various pathlength levels...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
564 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
565 sub _InitializeAtomPathsStrings {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
566 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
567 my($PathLength);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
568
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
569 %{$This->{AtomPathsStrings}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
570
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
571 for $PathLength ($This->{MinLength} .. $This->{MaxLength}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
572 %{$This->{AtomPathsStrings}{$PathLength}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
573 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
574
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
575 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
576 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
577
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
578 # Generate appropriate atom path strings for unique atom paths...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
579 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
580 sub _GenerateAtomPathsStrings {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
581 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
582 my($PathLength, $MinPathLength, $UseUniquePaths);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
583
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
584 $MinPathLength = $This->{MinLength};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
585 $UseUniquePaths = $This->{UseUniquePaths};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
586
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
587 PATHATOMS: for $PathAtomsRef (@{$This->{AtomPathsRef}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
588 $PathLength = scalar @{$PathAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
589 if ($PathLength < $MinPathLength) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
590 next PATHATOMS;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
591 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
592 if ($UseUniquePaths) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
593 $This->_GenerateAtomPathStringUsingUniquePath($PathAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
594 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
595 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
596 $This->_GenerateAtomPathString($PathAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
597 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
598 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
599 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
600 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
601
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
602 # Generate atom path string using unique path...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
603 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
604 sub _GenerateAtomPathStringUsingUniquePath {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
605 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
606
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
607 if ($This->{AllowRings} && $This->_DoesAtomPathContainsCycle($PathAtomsRef)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
608 $This->_GenerateAtomPathStringUsingUniquePathContainingCycle($PathAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
609 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
610 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
611 $This->_GenerateAtomPathStringUsingUniqueLinearPath($PathAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
612 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
613 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
614 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
615
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
616 # Generate atom path string for specified path containing no cycle...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
617 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
618 sub _GenerateAtomPathStringUsingUniqueLinearPath {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
619 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
620
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
621 # Is it a unique linear atom path?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
622 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
623 if (!$This->_IsUniqueLinearAtomPath($PathAtomsRef)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
624 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
625 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
626 $This->_GenerateAtomPathString($PathAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
627
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
628 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
629 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
630
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
631 # Is it a structurally unique linear path?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
632 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
633 # For a path to be structurally unique, all of its atom IDs must be diffferent from any
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
634 # earlier path atom IDs. In order to generate atom path atom ID invariant of the atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
635 # order in the molecule, atom IDs are sorted numerically before generating the path ID.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
636 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
637 # Notes:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
638 # . Atom path ID doesn't reflect the order of atoms in the atom path.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
639 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
640 sub _IsUniqueLinearAtomPath {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
641 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
642 my($AtomPathID, $PathLength, @PathAtomIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
643
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
644 @PathAtomIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
645 @PathAtomIDs = map { $_->GetID(); } @{$PathAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
646
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
647 $AtomPathID = join '-', sort { $a <=> $b } @PathAtomIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
648 if (exists $This->{UniqueLinearAtomPathsIDs}{$AtomPathID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
649 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
650 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
651
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
652 # It's a unique atom path...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
653 $This->{UniqueLinearAtomPathsIDs}{$AtomPathID} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
654
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
655 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
656 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
657
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
658 # Generate atom path string for specified path containing a cycle...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
659 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
660 sub _GenerateAtomPathStringUsingUniquePathContainingCycle {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
661 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
662
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
663 # Is it a unique atom path containing a cycle?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
664 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
665 if (!$This->_IsUniqueAtomPathContainingCycle($PathAtomsRef)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
666 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
667 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
668
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
669 my($CycleClosingPathAtomIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
670 ($CycleClosingPathAtomIndex) = $This->_GetAtomPathCycleClosingAtomIndex($PathAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
671
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
672 if ($CycleClosingPathAtomIndex == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
673 $This->_GenerateUniqueAtomPathStringForPathCycle($PathAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
674 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
675 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
676 $This->_GenerateUniqueAtomPathStringForPathContainingCycle($PathAtomsRef, $CycleClosingPathAtomIndex);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
677 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
678 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
679 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
681 # Generate a unique atom path string for a cyclic path by generating atom path
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
682 # strings for all possible paths in the cycle and keeping the lexicographically smallest
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
683 # one.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
684 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
685 # Although all the paths enumerated during atom path string generation are also
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
686 # present in the intial paths list, but structural uniqueness check would detect
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
687 # 'em earlier and this method ends being invoked only once for the first cyclic path.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
688 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
689 # For atom paths containg same atom types and bond symbols, atom path strings
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
690 # would be same for the paths.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
691 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
692 sub _GenerateUniqueAtomPathStringForPathCycle {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
693 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
694
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
695 if ($This->_AreAllPathAtomsSymbolsSame($PathAtomsRef) && $This->_AreAllPathBondSymbolsSame($PathAtomsRef)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
696 return $This->_GenerateAtomPathString($PathAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
697 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
698
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
699 # Generate all possible atom path strings and select the lexicographically smallest one...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
700 my($Index, $PathLength, $FinalAtomPathString, $FirstAtomPathString, $LastIndex, $FirstPartIndex, $FirstPartStartIndex, $FirstPartEndIndex, $SecondPartIndex, $SecondPartStartIndex, $SecondPartEndIndex, $AtomPathSymbolsRef, $AtomPathString, $ReverseAtomPathString, @FirstPartPathAtoms, @SecondPartPathAtoms, @PathAtoms);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
701
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
702 $PathLength = scalar @{$PathAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
703 $LastIndex = $PathLength - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
704
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
705 $FinalAtomPathString = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
706 $FirstAtomPathString = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
707
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
708 @FirstPartPathAtoms = (); @SecondPartPathAtoms = (); @PathAtoms = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
709
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
710 for $Index (0 .. ($LastIndex - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
711 @FirstPartPathAtoms = (); @SecondPartPathAtoms = (); @PathAtoms = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
712
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
713 $FirstPartStartIndex = 0; $FirstPartEndIndex = $Index - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
714 $SecondPartStartIndex = $Index; $SecondPartEndIndex = $LastIndex - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
715
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
716 # Get first part atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
717 for $FirstPartIndex ($FirstPartStartIndex .. $FirstPartEndIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
718 push @FirstPartPathAtoms, $PathAtomsRef->[$FirstPartIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
719 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
720
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
721 # Get second part atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
722 for $SecondPartIndex ($SecondPartStartIndex .. $SecondPartEndIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
723 push @SecondPartPathAtoms, $PathAtomsRef->[$SecondPartIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
724 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
725
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
726 # Get final list of path atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
727 if (@SecondPartPathAtoms) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
728 push @PathAtoms, @SecondPartPathAtoms;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
729 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
730 if (@FirstPartPathAtoms) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
731 push @PathAtoms, @FirstPartPathAtoms;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
732 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
733
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
734 # Complete the cycle by adding first atom as the last atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
735 push @PathAtoms, $PathAtomsRef->[$SecondPartStartIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
736
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
737 # Generate atom path string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
738 $AtomPathSymbolsRef = $This->_GenerateAtomPathSymbols(\@PathAtoms);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
739
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
740 $AtomPathString = join '', @{$AtomPathSymbolsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
741 $ReverseAtomPathString = join '', reverse @{$AtomPathSymbolsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
742
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
743 if ($ReverseAtomPathString le $AtomPathString) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
744 $AtomPathString = $ReverseAtomPathString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
745 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
746
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
747 # Update final atom path string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
748
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
749 if ($FirstAtomPathString) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
750 $FirstAtomPathString = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
751 $FinalAtomPathString = $AtomPathString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
752 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
753 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
754 if ($AtomPathString le $FinalAtomPathString) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
755 $FinalAtomPathString = $AtomPathString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
756 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
757 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
758 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
759
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
760 # Set final atom path string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
761 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
762 if (exists $This->{AtomPathsStrings}{$PathLength}{$FinalAtomPathString}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
763 $This->{AtomPathsStrings}{$PathLength}{$FinalAtomPathString} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
764 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
765 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
766 $This->{AtomPathsStrings}{$PathLength}{$FinalAtomPathString} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
767 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
768
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
769 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
770 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
771
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
772 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
773 # Generate a unique atom path string for paths containing a cycle closed by
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
774 # the specified atom index and the last atom index.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
775 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
776 # The following methodology is used to generate atom path string which is
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
777 # independemt of initial atom ordering:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
778 # . Generate atom paths string from first atom to the atom before the first cycle
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
779 # closing atom.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
780 # . Generate atom path string from atoms from first cycle closing atom index to
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
781 # the last path atom in both forward and reverse order. And select the lexicographically
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
782 # smallest atom path string.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
783 # . Combine atom path string generated in first step with second step to generate
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
784 # final atom path string.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
785 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
786 sub _GenerateUniqueAtomPathStringForPathContainingCycle {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
787 my($This, $PathAtomsRef, $CycleClosingAtomIndex) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
788 my($Index, $PathLength, $LastIndex, $LinearPartStartIndex, $LinearPartEndIndex, $CyclicPartStartIndex, $CyclicPartEndIndex, $CyclicPartAtomPathSymbolsRef, $CyclicPartAtomPathString, $ReverseCyclicPartAtomPathString, $AtomPathString, $AtomPathSymbolsRef, @CyclicPartPathAtoms, @PathAtoms);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
789
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
790 $PathLength = scalar @{$PathAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
791 $LastIndex = $PathLength - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
792
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
793 @PathAtoms = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
794
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
795 # Get path atoms corresponding to linear part of the path...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
796 $LinearPartStartIndex = 0; $LinearPartEndIndex = $CycleClosingAtomIndex - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
797
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
798 for $Index ($LinearPartStartIndex .. $LinearPartEndIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
799 push @PathAtoms, $PathAtomsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
800 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
801
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
802 # Get atoms correcponding to cyclic part of the path...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
803 @CyclicPartPathAtoms = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
804 $CyclicPartStartIndex = $CycleClosingAtomIndex; $CyclicPartEndIndex = $LastIndex;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
805
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
806 for $Index ($CyclicPartStartIndex .. $CyclicPartEndIndex) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
807 push @CyclicPartPathAtoms, $PathAtomsRef->[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
808 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
809
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
810 # Setup a lexicographically smaller atom path string for cyclic part...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
811
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
812 $CyclicPartAtomPathSymbolsRef = $This->_GenerateAtomPathSymbols(\@CyclicPartPathAtoms);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
813 $CyclicPartAtomPathString = join '', @{$CyclicPartAtomPathSymbolsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
814 $ReverseCyclicPartAtomPathString = join '', reverse @{$CyclicPartAtomPathSymbolsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
815
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
816 # Setup atom path corresponding to linear part and lexigraphicall smaller cyclic part...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
817
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
818 if ($ReverseCyclicPartAtomPathString le $CyclicPartAtomPathString) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
819 push @PathAtoms, reverse @CyclicPartPathAtoms;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
820 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
821 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
822 push @PathAtoms, @CyclicPartPathAtoms;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
823 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
824
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
825 # Setup final atom path string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
826
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
827 $AtomPathSymbolsRef = $This->_GenerateAtomPathSymbols(\@PathAtoms);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
828 $AtomPathString = join '', @{$AtomPathSymbolsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
829
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
830 if (exists $This->{AtomPathsStrings}{$PathLength}{$AtomPathString}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
831 $This->{AtomPathsStrings}{$PathLength}{$AtomPathString} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
832 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
833 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
834 $This->{AtomPathsStrings}{$PathLength}{$AtomPathString} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
835 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
836
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
837 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
838 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
839
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
840 # Does atom path contain a cycle?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
841 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
842 # For an atom path to contain cycle, it must satisfy the following conditions:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
843 # . Pathlength >= 3
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
844 # . Last atom ID is equal to first atom ID or some other atom ID besides itself
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
845 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
846 sub _DoesAtomPathContainsCycle {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
847 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
848 my($PathLength);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
849
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
850 $PathLength = scalar @{$PathAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
851 if ($PathLength <= 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
852 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
853 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
854
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
855 my($AtomIndex, $LastAtomIndex, $Atom, $AtomID, $LastAtom, $LastAtomID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
856
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
857 $LastAtomIndex = $PathLength - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
858 $LastAtom = $PathAtomsRef->[$LastAtomIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
859 $LastAtomID = $LastAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
860
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
861 # Look for atomID similar to last atom ID...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
862 for $AtomIndex (0 .. ($LastAtomIndex - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
863 $Atom = $PathAtomsRef->[$AtomIndex];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
864 $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
865
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
866 if ($AtomID == $LastAtomID) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
867 # It's a cycle...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
868 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
869 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
870 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
871 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
872 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
873
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
874 # Get atom path cycle closing atom index...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
875 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
876 sub _GetAtomPathCycleClosingAtomIndex {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
877 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
878 my($AtomIndex, $LastAtomIndex, $Atom, $AtomID, $LastAtom, $LastAtomID, $PathLength);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
879
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
880 $PathLength = scalar @{$PathAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
881
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
882 $LastAtomIndex = $PathLength - 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
883 $LastAtom = $PathAtomsRef->[$LastAtomIndex]; $LastAtomID = $LastAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
884
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
885 # Look for atomID similar to last atom ID...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
886 for $AtomIndex (0 .. ($LastAtomIndex - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
887 $Atom = $PathAtomsRef->[$AtomIndex]; $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
888
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
889 if ($AtomID == $LastAtomID) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
890 # It's a cycle closing atom...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
891 return $AtomIndex;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
892 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
893 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
894 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
895 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
896
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
897 # Is it a structurally unique path containing a cycle?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
898 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
899 # For atom paths containing cycles, last atom ID is either equal to first atom ID or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
900 # some other atom ID besides itself.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
901 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
902 # In order to determine its structurally unqiue independent of initial atom ordering,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
903 # the following methodolgy is used:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
904 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
905 # . For paths with same first and atom IDs:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
906 # . Remove the last atom ID from atom path
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
907 # . Sort atom IDs in the path
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
908 # . Add first atom ID from the sorted list to the end of list to complete the cycle
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
909 # . Generate a atom path ID
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
910 # . Use final path ID to track uniqueness of path containing cycle.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
911 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
912 # . For paths with last atom ID equal to some other atom ID besidies itself:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
913 # . Sort atom IDs in atom path
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
914 # . Generate atom path ID and use it to track unqiueness of atom paths.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
915 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
916 sub _IsUniqueAtomPathContainingCycle {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
917 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
918 my($PathLength, $AtomPathID, $FirstAtom, $LastAtom, $FirstAtomID, $LastAtomID, @PathAtomIDs, @SortedPathAtomIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
919
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
920 @PathAtomIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
921 @PathAtomIDs = map { $_->GetID(); } @{$PathAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
922
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
923 $PathLength = scalar @{$PathAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
924
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
925 $FirstAtom = $PathAtomsRef->[0]; $FirstAtomID = $FirstAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
926 $LastAtom = $PathAtomsRef->[$PathLength - 1]; $LastAtomID = $LastAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
927
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
928 if ($FirstAtomID == $LastAtomID) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
929 pop @PathAtomIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
930
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
931 @SortedPathAtomIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
932 @SortedPathAtomIDs = sort { $a <=> $b } @PathAtomIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
933
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
934 push @SortedPathAtomIDs, $SortedPathAtomIDs[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
935
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
936 $AtomPathID = join '-', @SortedPathAtomIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
937 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
938 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
939 $AtomPathID = join '-', sort { $a <=> $b } @PathAtomIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
940 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
941
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
942 if (exists $This->{UniqueCyclicAtomPathsIDs}{$AtomPathID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
943 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
944 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
945
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
946 # It's a unique atom path containing a cycle...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
947 $This->{UniqueCyclicAtomPathsIDs}{$AtomPathID} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
948
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
949 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
950 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
951
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
952 # Generate atom path string for specified atom path...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
953 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
954 sub _GenerateAtomPathString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
955 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
956 my($PathLength, $AtomPathString, $ReverseAtomPathString, $AtomPathSymbolsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
957
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
958 $PathLength = scalar @{$PathAtomsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
959
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
960 # Generate path atom and bond symbols...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
961 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
962 $AtomPathSymbolsRef = $This->_GenerateAtomPathSymbols($PathAtomsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
963
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
964 # Check presence of path using path ID created by atom path symbols...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
965 $AtomPathString = join '', @{$AtomPathSymbolsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
966 if (exists $This->{AtomPathsStrings}{$PathLength}{$AtomPathString}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
967 $This->{AtomPathsStrings}{$PathLength}{$AtomPathString} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
968 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
969 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
970
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
971 # Check presence of reverse path using path ID created by atom path symbols...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
972 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
973 $ReverseAtomPathString = join '', reverse @{$AtomPathSymbolsRef};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
974 if (exists $This->{AtomPathsStrings}{$PathLength}{$ReverseAtomPathString}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
975 $This->{AtomPathsStrings}{$PathLength}{$ReverseAtomPathString} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
976 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
977 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
978
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
979 # Use lexicographically smaller atom path string as PathID...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
980 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
981 if ($AtomPathString le $ReverseAtomPathString) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
982 $This->{AtomPathsStrings}{$PathLength}{$AtomPathString} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
983 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
984 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
985 $This->{AtomPathsStrings}{$PathLength}{$ReverseAtomPathString} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
986 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
987 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
988 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
989
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
990 # Are atom types for all path atoms same?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
991 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
992 sub _AreAllPathAtomsSymbolsSame {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
993 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
994 my($Index, $Atom, $AtomID, $AtomType, $FirstAtomType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
995
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
996 $Atom = $PathAtomsRef->[0]; $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
997 $FirstAtomType = $This->{AssignedAtomTypes}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
998
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
999 for $Index (1 .. $#{$PathAtomsRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1000 $Atom = $PathAtomsRef->[$Index]; $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1001 $AtomType = $This->{AssignedAtomTypes}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1002
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1003 if ($AtomType ne $FirstAtomType) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1004 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1005 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1006 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1007 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1008 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1009
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1010 # Are bond symbols for all path bonds same?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1011 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1012 sub _AreAllPathBondSymbolsSame {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1013 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1014 my($Index, $Atom, $BondedAtom, $AtomID, $BondedAtomID, $BondAtomID1, $BondAtomID2, $FirstBondSymbol, $BondSymbol);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1015
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1016 # During no usage of bond symbols, just ignore them and assume they are same...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1017 if (!$This->{UseBondSymbols}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1018 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1019 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1020
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1021 $Atom = $PathAtomsRef->[0]; $BondedAtom = $PathAtomsRef->[1];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1022 $AtomID = $Atom->GetID(); $BondedAtomID = $BondedAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1023
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1024 ($BondAtomID1, $BondAtomID2) = ($AtomID < $BondedAtomID) ? ($AtomID, $BondedAtomID) : ($BondedAtomID, $AtomID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1025 $FirstBondSymbol = $This->{BondSymbols}{$BondAtomID1}{$BondAtomID2};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1026
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1027 for $Index (1 .. ($#{$PathAtomsRef} - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1028 $Atom = $PathAtomsRef->[$Index]; $BondedAtom = $PathAtomsRef->[$Index + 1];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1029 $AtomID = $Atom->GetID(); $BondedAtomID = $BondedAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1030
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1031 ($BondAtomID1, $BondAtomID2) = ($AtomID < $BondedAtomID) ? ($AtomID, $BondedAtomID) : ($BondedAtomID, $AtomID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1032 $BondSymbol = $This->{BondSymbols}{$BondAtomID1}{$BondAtomID2};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1033
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1034 if ($BondSymbol ne $FirstBondSymbol) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1035 return 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1036 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1037 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1038 return 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1039 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1040
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1041 # Generate atom path symbols...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1042 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1043 sub _GenerateAtomPathSymbols {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1044 my($This, $PathAtomsRef) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1045 my($Atom, $AtomID, @AtomPathSymbols);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1046
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1047 @AtomPathSymbols = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1048
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1049 if (@{$PathAtomsRef} == 1) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1050 $Atom = $PathAtomsRef->[0]; $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1051 push @AtomPathSymbols, $This->{AssignedAtomTypes}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1052 return \@AtomPathSymbols;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1053 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1054
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1055 # Ignore bond information...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1056 if (!$This->{UseBondSymbols}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1057 for $Atom (@{$PathAtomsRef}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1058 $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1059 push @AtomPathSymbols, $This->{AssignedAtomTypes}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1060 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1061 return \@AtomPathSymbols;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1062 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1063
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1064 # Use atoms and bonds to generate atom path string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1065 my($Index, $BondedAtom, $BondedAtomID, $BondAtomID1, $BondAtomID2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1066
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1067 # Process atom type of first atom in path...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1068 $Atom = $PathAtomsRef->[0]; $AtomID = $Atom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1069 push @AtomPathSymbols, $This->{AssignedAtomTypes}{$AtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1070
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1071 for $Index (0 .. ($#{$PathAtomsRef} - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1072 $Atom = $PathAtomsRef->[$Index]; $BondedAtom = $PathAtomsRef->[$Index + 1];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1073 $AtomID = $Atom->GetID(); $BondedAtomID = $BondedAtom->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1074
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1075 ($BondAtomID1, $BondAtomID2) = ($AtomID < $BondedAtomID) ? ($AtomID, $BondedAtomID) : ($BondedAtomID, $AtomID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1076 push @AtomPathSymbols, $This->{BondSymbols}{$BondAtomID1}{$BondAtomID2};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1077
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1078 # Process atom type of next atom in path...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1079 push @AtomPathSymbols, $This->{AssignedAtomTypes}{$BondedAtomID};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1080 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1081 return \@AtomPathSymbols;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1082 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1083
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1084 # Set final fingerprits...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1085 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1086 sub _SetFinalFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1087 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1088
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1089 # Mark successful generation of fingerprints...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1090 $This->{FingerprintsGenerated} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1091
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1092 if ($This->{Type} =~ /^PathLengthBits$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1093 $This->_SetFinalFingerprintsBitVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1094 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1095 elsif ($This->{Type} =~ /^PathLengthCount$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1096 $This->_SetFinalFingerprintsVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1097 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1098
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1099 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1100 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1101
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1102 # Set final fingerprits bit vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1103 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1104 sub _SetFinalFingerprintsBitVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1105 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1106 my($PathLength, $Size, $AtomPathString, $AtomPathHashCode, $AtomPathBitPos, $FingerprintsBitVector, $SkipBitPosCheck, $NumOfBitsToSetPerPath, $SetBitNum);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1107
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1108 $FingerprintsBitVector = $This->{FingerprintsBitVector};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1109
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1110 $Size = $This->{Size};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1111
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1112 $SkipBitPosCheck = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1113 $NumOfBitsToSetPerPath = $This->{NumOfBitsToSetPerPath};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1114
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1115 for $PathLength (keys %{$This->{AtomPathsStrings}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1116 for $AtomPathString (keys %{$This->{AtomPathsStrings}{$PathLength}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1117 $AtomPathHashCode = TextUtil::HashCode($AtomPathString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1118
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1119 # Set random number seed...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1120 if ($This->{UsePerlCoreRandom}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1121 CORE::srand($AtomPathHashCode);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1122 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1123 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1124 MathUtil::srandom($AtomPathHashCode);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1125 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1126
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1127 for $SetBitNum (1 .. $NumOfBitsToSetPerPath) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1128 $AtomPathBitPos = $This->{UsePerlCoreRandom} ? int(CORE::rand($Size)) : int(MathUtil::random($Size));
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1129 $FingerprintsBitVector->SetBit($AtomPathBitPos, $SkipBitPosCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1130 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1131 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1132 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1133 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1134 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1135
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1136 # Set final fingerprits vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1137 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1138 sub _SetFinalFingerprintsVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1139 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1140 my($PathLength, $AtomPathString, $FingerprintsVector, $AtomPathCount, @Values, @ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1141
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1142 @Values = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1143 @ValueIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1144
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1145 for $PathLength (sort { $a <=> $b } keys %{$This->{AtomPathsStrings}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1146 for $AtomPathString (sort keys %{$This->{AtomPathsStrings}{$PathLength}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1147 $AtomPathCount = $This->{AtomPathsStrings}{$PathLength}{$AtomPathString};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1148
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1149 push @Values, $AtomPathCount;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1150 push @ValueIDs, $AtomPathString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1151 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1152 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1153
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1154 # Add PathLengthIDs and values to fingerprint vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1155 $This->{FingerprintsVector}->AddValueIDs(\@ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1156 $This->{FingerprintsVector}->AddValues(\@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1157
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1158 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1159 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1160
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1161 # Cache appropriate molecule data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1162 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1163 sub _SetupMoleculeDataCache {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1164 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1165
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1166 # Get all atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1167 @{$This->{Atoms}} = $This->GetMolecule()->GetAtoms();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1168
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1169 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1170 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1171
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1172 # Clear cached molecule data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1173 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1174 sub _ClearMoleculeDataCache {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1175 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1176
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1177 # Clear atoms...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1178 @{$This->{Atoms}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1179
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1180 # Clear path atoms..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1181 $This->{AtomPathsRef} = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1182
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1183 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1184 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1185
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1186 # Set atomic invariants to use atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1187 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1188 sub SetAtomicInvariantsToUse {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1189 my($This, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1190 my($FirstValue, $TypeOfFirstValue, $AtomicInvariant, $SpecifiedAtomicInvariant, $AtomicInvariantValue, @SpecifiedAtomicInvariants, @AtomicInvariantsToUse);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1191
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1192 if (!@Values) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1193 carp "Warning: ${ClassName}->SetAtomicInvariantsToUse: No values specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1194 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1195 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1196
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1197 $FirstValue = $Values[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1198 $TypeOfFirstValue = ref $FirstValue;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1199
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1200 @SpecifiedAtomicInvariants = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1201 @AtomicInvariantsToUse = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1202
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1203 if ($TypeOfFirstValue =~ /^ARRAY/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1204 push @SpecifiedAtomicInvariants, @{$FirstValue};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1205 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1206 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1207 push @SpecifiedAtomicInvariants, @Values;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1208 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1209
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1210 # Make sure specified AtomicInvariants are valid...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1211 for $SpecifiedAtomicInvariant (@SpecifiedAtomicInvariants) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1212 if (!AtomTypes::AtomicInvariantsAtomTypes::IsAtomicInvariantAvailable($SpecifiedAtomicInvariant)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1213 croak "Error: ${ClassName}->SetAtomicInvariantsToUse: Specified atomic invariant, $SpecifiedAtomicInvariant, is not supported...\n ";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1214 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1215 $AtomicInvariant = $SpecifiedAtomicInvariant;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1216 push @AtomicInvariantsToUse, $AtomicInvariant;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1217 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1218
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1219 # Set atomic invariants to use...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1220 @{$This->{AtomicInvariantsToUse}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1221 push @{$This->{AtomicInvariantsToUse}}, @AtomicInvariantsToUse;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1222
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1223 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1224 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1225
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1226 # Set functional classes to use for atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1227 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1228 sub SetFunctionalClassesToUse {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1229 my($This, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1230 my($FirstValue, $TypeOfFirstValue, $FunctionalClass, $SpecifiedFunctionalClass, @SpecifiedFunctionalClasses, @FunctionalClassesToUse);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1231
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1232 if (!@Values) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1233 carp "Warning: ${ClassName}->SetFunctionalClassesToUse: No values specified...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1234 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1235 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1236
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1237 if ($This->{AtomIdentifierType} !~ /^FunctionalClassAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1238 carp "Warning: ${ClassName}->SetFunctionalClassesToUse: FunctionalClassesToUse can't be set for InitialAtomIdentifierType of $This->{AtomIdentifierType}...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1239 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1240 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1241
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1242 $FirstValue = $Values[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1243 $TypeOfFirstValue = ref $FirstValue;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1244
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1245 @SpecifiedFunctionalClasses = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1246 @FunctionalClassesToUse = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1247
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1248 if ($TypeOfFirstValue =~ /^ARRAY/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1249 push @SpecifiedFunctionalClasses, @{$FirstValue};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1250 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1251 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1252 push @SpecifiedFunctionalClasses, @Values;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1253 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1254
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1255 # Make sure specified FunctionalClasses are valid...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1256 for $SpecifiedFunctionalClass (@SpecifiedFunctionalClasses) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1257 if (!AtomTypes::FunctionalClassAtomTypes::IsFunctionalClassAvailable($SpecifiedFunctionalClass)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1258 croak "Error: ${ClassName}->SetFunctionalClassesToUse: Specified functional class, $SpecifiedFunctionalClass, is not supported...\n ";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1259 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1260 push @FunctionalClassesToUse, $SpecifiedFunctionalClass;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1261 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1262
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1263 # Set functional classes to use...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1264 @{$This->{FunctionalClassesToUse}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1265 push @{$This->{FunctionalClassesToUse}}, @FunctionalClassesToUse;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1266
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1267 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1268 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1269
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1270 # Initialize atom indentifier type information...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1271 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1272 # Current supported values:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1273 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1274 # AtomicInvariantsAtomTypes, DREIDINGAtomTypes, EStateAtomTypes, FunctionalClassAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1275 # MMFF94AtomTypes, SLogPAtomTypes, SYBYLAtomTypes, TPSAAtomTypes, UFFAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1276 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1277 sub _InitializeAtomIdentifierTypeInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1278 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1279
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1280 if ($This->{AtomIdentifierType} =~ /^AtomicInvariantsAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1281 $This->_InitializeAtomicInvariantsAtomTypesInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1282 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1283 elsif ($This->{AtomIdentifierType} =~ /^FunctionalClassAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1284 $This->_InitializeFunctionalClassAtomTypesInformation();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1285 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1286 elsif ($This->{AtomIdentifierType} =~ /^(DREIDINGAtomTypes|EStateAtomTypes|MMFF94AtomTypes|SLogPAtomTypes|SYBYLAtomTypes|TPSAAtomTypes|UFFAtomTypes)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1287 # Nothing to do for now...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1288 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1289 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1290 croak "Error: ${ClassName}->_InitializeAtomIdentifierTypeInformation: Unknown atom indentifier type $This->{AtomIdentifierType}...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1291 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1292
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1293 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1294 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1295
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1296 # Initialize atomic invariants atom types to use for generating atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1297 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1298 # Let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1299 # AS = Atom symbol corresponding to element symbol
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1300 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1301 # X<n> = Number of non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1302 # BO<n> = Sum of bond orders to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1303 # LBO<n> = Largest bond order of non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1304 # SB<n> = Number of single bonds to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1305 # DB<n> = Number of double bonds to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1306 # TB<n> = Number of triple bonds to non-hydrogen atom neighbors or heavy atoms attached to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1307 # H<n> = Number of implicit and explicit hydrogens for atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1308 # Ar = Aromatic annotation indicating whether atom is aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1309 # RA = Ring atom annotation indicating whether atom is a ring
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1310 # FC<+n/-n> = Formal charge assigned to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1311 # MN<n> = Mass number indicating isotope other than most abundant isotope
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1312 # SM<n> = Spin multiplicity of atom. Possible values: 1 (singlet), 2 (doublet) or 3 (triplet)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1313 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1314 # Then:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1315 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1316 # Atom type generated by AtomTypes::AtomicInvariantsAtomTypes class corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1317 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1318 # 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
1319 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1320 # Except for AS which is a required atomic invariant in atom types, all other atomic invariants are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1321 # optional. Default atomic invariants used for AtomID are: AS, X<n>, BO<n>, H<n>, FC<+n/-n>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1322 # AtomID specification doesn't include atomic invariants with zero or undefined values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1323 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1324 sub _InitializeAtomicInvariantsAtomTypesInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1325 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1326
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1327 # Default atomic invariants to use for generating atom neighborhood atom IDs: AS, X, BO, H, FC
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1328 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1329 @{$This->{AtomicInvariantsToUse}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1330 @{$This->{AtomicInvariantsToUse}} = ('AS', 'X', 'BO', 'H', 'FC');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1331
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1332 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1333 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1334
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1335 # Initialize functional class atom types, generated by AtomTypes::FunctionalClassAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1336 # class, to use for generating atom identifiers...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1337 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1338 # Let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1339 # HBD: HydrogenBondDonor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1340 # HBA: HydrogenBondAcceptor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1341 # PI : PositivelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1342 # NI : NegativelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1343 # Ar : Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1344 # Hal : Halogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1345 # H : Hydrophobic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1346 # RA : RingAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1347 # CA : ChainAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1348 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1349 # Then:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1350 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1351 # Functiononal class atom type specification for an atom corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1352 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1353 # Ar.CA.H.HBA.HBD.Hal.NI.PI.RA
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1354 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1355 # Default functional classes used are: HBD, HBA, PI, NI, Ar, Hal
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1356 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1357 # FunctionalAtomTypes are assigned using the following definitions [ Ref 60-61, Ref 65-66 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1358 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1359 # HydrogenBondDonor: NH, NH2, OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1360 # HydrogenBondAcceptor: N[!H], O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1361 # PositivelyIonizable: +, NH2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1362 # NegativelyIonizable: -, C(=O)OH, S(=O)OH, P(=O)OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1363 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1364 sub _InitializeFunctionalClassAtomTypesInformation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1365 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1366
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1367 # Default functional class atom typess to use for generating atom identifiers
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1368 # are: HBD, HBA, PI, NI, Ar, Hal
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1369 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1370 @{$This->{FunctionalClassesToUse}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1371 @{$This->{FunctionalClassesToUse}} = ('HBD', 'HBA', 'PI', 'NI', 'Ar', 'Hal');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1372
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1373 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1374 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1375
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1376 # Return a string containg data for PathLengthFingerprints object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1377 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1378 sub StringifyPathLengthFingerprints {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1379 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1380 my($PathLengthsFingerprintsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1381
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1382 # Type of fingerprint...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1383 $PathLengthsFingerprintsString = "Fingerprint type: $This->{Type}; AtomIdentifierType: $This->{AtomIdentifierType}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1384
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1385 # Path length...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1386 $PathLengthsFingerprintsString .= "; MinPathLength: $This->{MinLength}; MaxPathLength: $This->{MaxLength}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1387
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1388 # Fingerprint generation control...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1389 my($AllowSharedBonds, $AllowRings, $UseBondSymbols, $UseUniquePaths);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1390
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1391 $AllowSharedBonds = $This->{AllowSharedBonds} ? "Yes" : "No";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1392 $AllowRings = $This->{AllowRings} ? "Yes" : "No";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1393 $UseBondSymbols = $This->{UseBondSymbols} ? "Yes" : "No";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1394 $UseUniquePaths = $This->{UseBondSymbols} ? "Yes" : "No";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1395
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1396 $PathLengthsFingerprintsString .= "; UseUniquePaths: $UseUniquePaths; AllowSharedBonds: $AllowSharedBonds; AllowRings: $AllowRings; UseBondSymbols: $UseBondSymbols";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1397
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1398 if ($This->{AtomIdentifierType} =~ /^AtomicInvariantsAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1399 my($AtomicInvariant, @AtomicInvariants, @AtomicInvariantsOrder, %AvailableAtomicInvariants);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1400
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1401 @AtomicInvariantsOrder = AtomTypes::AtomicInvariantsAtomTypes::GetAtomicInvariantsOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1402 %AvailableAtomicInvariants = AtomTypes::AtomicInvariantsAtomTypes::GetAvailableAtomicInvariants();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1403
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1404 for $AtomicInvariant (@AtomicInvariantsOrder) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1405 push @AtomicInvariants, "$AtomicInvariant: $AvailableAtomicInvariants{$AtomicInvariant}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1406 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1407
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1408 $PathLengthsFingerprintsString .= "; AtomicInvariantsToUse: <" . TextUtil::JoinWords(\@{$This->{AtomicInvariantsToUse}}, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1409 $PathLengthsFingerprintsString .= "; AtomicInvariantsOrder: <" . TextUtil::JoinWords(\@AtomicInvariantsOrder, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1410 $PathLengthsFingerprintsString .= "; AvailableAtomicInvariants: <" . TextUtil::JoinWords(\@AtomicInvariants, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1411 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1412 elsif ($This->{AtomIdentifierType} =~ /^FunctionalClassAtomTypes$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1413 my($FunctionalClass, @FunctionalClasses, @FunctionalClassesOrder, %AvailableFunctionalClasses);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1414
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1415 @FunctionalClassesOrder = AtomTypes::FunctionalClassAtomTypes::GetFunctionalClassesOrder();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1416 %AvailableFunctionalClasses = AtomTypes::FunctionalClassAtomTypes::GetAvailableFunctionalClasses();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1417
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1418 for $FunctionalClass (@FunctionalClassesOrder) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1419 push @FunctionalClasses, "$FunctionalClass: $AvailableFunctionalClasses{$FunctionalClass}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1420 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1421
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1422 $PathLengthsFingerprintsString .= "; FunctionalClassesToUse: <" . TextUtil::JoinWords(\@{$This->{FunctionalClassesToUse}}, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1423 $PathLengthsFingerprintsString .= "; FunctionalClassesOrder: <" . TextUtil::JoinWords(\@FunctionalClassesOrder, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1424 $PathLengthsFingerprintsString .= "; AvailableFunctionalClasses: <" . TextUtil::JoinWords(\@FunctionalClasses, ", ", 0) . ">";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1425 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1426
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1427 if ($This->{Type} =~ /^PathLengthBits$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1428 # Size...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1429 $PathLengthsFingerprintsString .= "; Size: $This->{Size}; MinSize: $This->{MinSize}; MaxSize: $This->{MaxSize}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1430
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1431 # NumOfBitsToSetPerPath...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1432 $PathLengthsFingerprintsString .= "; NumOfBitsToSetPerPath: $This->{NumOfBitsToSetPerPath}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1433
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1434 # Fingerprint bit density and num of bits set...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1435 my($NumOfSetBits, $BitDensity);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1436 $NumOfSetBits = $This->{FingerprintsBitVector}->GetNumOfSetBits();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1437 $BitDensity = $This->{FingerprintsBitVector}->GetFingerprintsBitDensity();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1438 $PathLengthsFingerprintsString .= "; NumOfOnBits: $NumOfSetBits; BitDensity: $BitDensity";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1439
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1440 $PathLengthsFingerprintsString .= "; FingerprintsBitVector: < $This->{FingerprintsBitVector} >";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1441 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1442 elsif ($This->{Type} =~ /^PathLengthCount$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1443 $PathLengthsFingerprintsString .= "; FingerprintsVector: < $This->{FingerprintsVector} >";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1444 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1445
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1446 return $PathLengthsFingerprintsString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1447 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1448
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1449 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1450
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1451 __END__
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1452
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1453 =head1 NAME
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1454
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1455 PathLengthFingerprints
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1456
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1457 =head1 SYNOPSIS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1458
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1459 use Fingerprints::PathLengthFingerprints;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1460
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1461 use Fingerprints::PathLengthFingerprints qw(:all);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1462
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1463 =head1 DESCRIPTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1464
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1465 B<PathLengthFingerprints> class provides the following methods:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1466
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1467 new, GenerateFingerprints, , GetDescription, SetAtomIdentifierType,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1468 SetAtomicInvariantsToUse, SetFunctionalClassesToUse, SetMaxLength,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1469 SetMinLength, SetNumOfBitsToSetPerPath, SetType,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1470 StringifyPathLengthFingerprints
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1471
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1472 B<PathLengthFingerprints> is derived from B<Fingerprints> class which in turn
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1473 is derived from B<ObjectProperty> base class that provides methods not explicitly defined
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1474 in B<PathLengthFingerprints>, B<Fingerprints> or B<ObjectProperty> classes using Perl's
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1475 AUTOLOAD functionality. These methods are generated on-the-fly for a specified object property:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1476
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1477 Set<PropertyName>(<PropertyValue>);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1478 $PropertyValue = Get<PropertyName>();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1479 Delete<PropertyName>();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1480
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1481 The current release of MayaChemTools supports generation of B<AtomTypesFingerpritns>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1482 corresponding to following B<AtomtomIdentifierTypes>:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1483
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1484 AtomicInvariantsAtomTypes, DREIDINGAtomTypes, EStateAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1485 FunctionalClassAtomTypes, MMFF94AtomTypes, SLogPAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1486 SYBYLAtomTypes, TPSAAtomTypes, UFFAtomTypes
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1487
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1488 Based on the values specified for B<Type>, B<AtomtomIdentifierTypes>, B<MinPathLength> and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1489 B<MaxPathLength>, all appropriate atom paths are generated for each atom in the molecule
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1490 and collected in a list and the list is filtered to remove any structurally duplicate paths as
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1491 indicated by the value of B<UseUniquePaths>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1492
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1493 For molecules containing rings, atom paths starting from each atom can be traversed in four
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1494 different ways:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1495
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1496 o Atom paths without any rings and sharing of bonds in traversed paths.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1497 o Atom paths containing rings and without any sharing of bonds in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1498 traversed paths
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1499 o All possible atom paths without any rings and sharing of bonds in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1500 traversed paths
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1501 o All possible atom paths containing rings and with sharing of bonds in
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1502 traversed paths.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1503
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1504 Atom path traversal is terminated at the last ring atom. For molecules containing no rings,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1505 first two and last two types described above are equivalent.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1506
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1507 B<AllowSharedBonds> and B<AllowRings> allow generation of different types of paths
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1508 to be used for fingerprints generation.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1509
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1510 The combination of B<AllowSharedBonds>, B<AllowRings>, and B<UseBondSymbols> allows generation of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1511 8 different types of path length fingerprints:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1512
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1513 AllowSharedBonds AllowRings UseBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1514
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1515 0 0 1 - AtomPathsNoCyclesWithBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1516 0 1 1 - AtomPathsWithCyclesWithBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1517
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1518 1 0 1 - AllAtomPathsNoCyclesWithBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1519 1 1 1 - AllAtomPathsWithCyclesWithBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1520 [ DEFAULT ]
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1521
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1522 0 0 0 - AtomPathsNoCyclesNoBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1523 0 1 0 - AtomPathsWithCyclesNoBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1524
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1525 1 0 0 - AllAtomPathsNoCyclesNoBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1526 1 1 0 - AllAtomPathsWithCyclesNoWithBondSymbols
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1527
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1528 Additionally, possible values for option B<--AtomIdentifierType> in conjunction with corresponding
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1529 specified values for B<AtomicInvariantsToUse> and B<FunctionalClassesToUse > changes the nature
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1530 of atom path length strings and the fingerprints.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1531
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1532 For each atom path in the filtered atom paths list, an atom path string is created using value of
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1533 B<AtomIdentifierType> and specified values to use for a particular atom identifier type.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1534 Value of B<UseBondSymbols> controls whether bond order symbols are used during generation
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1535 of atom path string. Atom symbol corresponds to element symbol and characters used to represent
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1536 bond order are: I<1 - None; 2 - '='; 3 - '#'; 1.5 or aromatic - ':'; others: bond order value>. By default,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1537 bond symbols are included in atom path strings. Exclusion of bond symbols in atom path strings
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1538 results in fingerprints which correspond purely to atom paths without considering bonds.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1539
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1540 B<UseUniquePaths> controls the removal of structurally duplicate atom path strings are removed
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1541 from the list.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1542
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1543 For I<PathLengthBits> value of B<Type>, each atom path is hashed to a 32 bit unsigned
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1544 integer key using B<TextUtil::HashCode> function. Using the hash key as a seed for a random number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1545 generator, a random integer value between 0 and B<Size> is used to set corresponding bits
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1546 in the fingerprint bit-vector string. Value of B<NumOfBitsToSetPerPaths> option controls the number
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1547 of time a random number is generated to set corresponding bits.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1548
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1549 For I< PathLengthCount> value of B<Type>n, the number of times an atom path appears
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1550 is tracked and a fingerprints count-string corresponding to count of atom paths is generated.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1551
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1552 The current release of MayaChemTools generates the following types of path length
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1553 fingerprints bit-vector and vector strings:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1554
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1555 FingerprintsBitVector;PathLengthBits:AtomicInvariantsAtomTypes:MinLeng
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1556 th1:MaxLength8;1024;BinaryString;Ascending;001000010011010101011000110
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1557 0100010101011000101001011100110001000010001001101000001001001001001000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1558 0010110100000111001001000001001010100100100000000011000000101001011100
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1559 0010000001000101010100000100111100110111011011011000000010110111001101
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1560 0101100011000000010001000011000010100011101100001000001000100000000...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1561
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1562 FingerprintsBitVector;PathLengthBits:AtomicInvariantsAtomTypes:MinLeng
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1563 th1:MaxLength8;1024;HexadecimalString;Ascending;48caa1315d82d91122b029
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1564 42861c9409a4208182d12015509767bd0867653604481a8b1288000056090583603078
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1565 9cedae54e26596889ab121309800900490515224208421502120a0dd9200509723ae89
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1566 00024181b86c0122821d4e4880c38620dab280824b455404009f082003d52c212b4e6d
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1567 6ea05280140069c780290c43
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1568
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1569 FingerprintsVector;PathLengthCount:AtomicInvariantsAtomTypes:MinLength
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1570 1:MaxLength8;432;NumericalValues;IDsAndValuesPairsString;C.X1.BO1.H3 2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1571 C.X2.BO2.H2 4 C.X2.BO3.H1 14 C.X3.BO3.H1 3 C.X3.BO4 10 F.X1.BO1 1 N.X
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1572 2.BO2.H1 1 N.X3.BO3 1 O.X1.BO1.H1 3 O.X1.BO2 2 C.X1.BO1.H3C.X3.BO3.H1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1573 2 C.X2.BO2.H2C.X2.BO2.H2 1 C.X2.BO2.H2C.X3.BO3.H1 4 C.X2.BO2.H2C.X3.BO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1574 4 1 C.X2.BO2.H2N.X3.BO3 1 C.X2.BO3.H1:C.X2.BO3.H1 10 C.X2.BO3.H1:C....
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1575
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1576 FingerprintsVector;PathLengthCount:DREIDINGAtomTypes:MinLength1:MaxLen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1577 gth8;410;NumericalValues;IDsAndValuesPairsString;C_2 2 C_3 9 C_R 22 F_
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1578 1 N_3 1 N_R 1 O_2 2 O_3 3 C_2=O_2 2 C_2C_3 1 C_2C_R 1 C_2N_3 1 C_2O_3
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1579 1 C_3C_3 7 C_3C_R 1 C_3N_R 1 C_3O_3 2 C_R:C_R 21 C_R:N_R 2 C_RC_R 2 C
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1580 _RF_ 1 C_RN_3 1 C_2C_3C_3 1 C_2C_R:C_R 2 C_2N_3C_R 1 C_3C_2=O_2 1 C_3C
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1581 _2O_3 1 C_3C_3C_3 5 C_3C_3C_R 2 C_3C_3N_R 1 C_3C_3O_3 4 C_3C_R:C_R ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1582
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1583 FingerprintsVector;PathLengthCount:EStateAtomTypes:MinLength1:MaxLengt
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1584 h8;454;NumericalValues;IDsAndValuesPairsString;aaCH 14 aasC 8 aasN 1 d
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1585 O 2 dssC 2 sCH3 2 sF 1 sOH 3 ssCH2 4 ssNH 1 sssCH 3 aaCH:aaCH 10 aaCH:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1586 aasC 8 aasC:aasC 3 aasC:aasN 2 aasCaasC 2 aasCdssC 1 aasCsF 1 aasCssNH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1587 1 aasCsssCH 1 aasNssCH2 1 dO=dssC 2 dssCsOH 1 dssCssCH2 1 dssCssNH 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1588 sCH3sssCH 2 sOHsssCH 2 ssCH2ssCH2 1 ssCH2sssCH 4 aaCH:aaCH:aaCH 6 a...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1589
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1590 FingerprintsVector;PathLengthCount:FunctionalClassAtomTypes:MinLength1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1591 :MaxLength8;404;NumericalValues;IDsAndValuesPairsString;Ar 22 Ar.HBA 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1592 HBA 2 HBA.HBD 3 HBD 1 Hal 1 NI 1 None 10 Ar.HBA:Ar 2 Ar.HBANone 1 Ar:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1593 Ar 21 ArAr 2 ArHBD 1 ArHal 1 ArNone 2 HBA.HBDNI 1 HBA.HBDNone 2 HBA=NI
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1594 1 HBA=None 1 HBDNone 1 NINone 1 NoneNone 7 Ar.HBA:Ar:Ar 2 Ar.HBA:ArAr
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1595 1 Ar.HBA:ArNone 1 Ar.HBANoneNone 1 Ar:Ar.HBA:Ar 1 Ar:Ar.HBANone 2 ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1596
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1597 FingerprintsVector;PathLengthCount:MMFF94AtomTypes:MinLength1:MaxLengt
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1598 h8;463;NumericalValues;IDsAndValuesPairsString;C5A 2 C5B 2 C=ON 1 CB 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1599 8 COO 1 CR 9 F 1 N5 1 NC=O 1 O=CN 1 O=CO 1 OC=O 1 OR 2 C5A:C5B 2 C5A:N
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1600 5 2 C5ACB 1 C5ACR 1 C5B:C5B 1 C5BC=ON 1 C5BCB 1 C=ON=O=CN 1 C=ONNC=O 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1601 CB:CB 18 CBF 1 CBNC=O 1 COO=O=CO 1 COOCR 1 COOOC=O 1 CRCR 7 CRN5 1 CR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1602 OR 2 C5A:C5B:C5B 2 C5A:C5BC=ON 1 C5A:C5BCB 1 C5A:N5:C5A 1 C5A:N5CR ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1603
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1604 FingerprintsVector;PathLengthCount:SLogPAtomTypes:MinLength1:MaxLength
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1605 8;518;NumericalValues;IDsAndValuesPairsString;C1 5 C10 1 C11 1 C14 1 C
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1606 18 14 C20 4 C21 2 C22 1 C5 2 CS 2 F 1 N11 1 N4 1 O10 1 O2 3 O9 1 C10C1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1607 1 C10N11 1 C11C1 2 C11C21 1 C14:C18 2 C14F 1 C18:C18 10 C18:C20 4 C18
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1608 :C22 2 C1C5 1 C1CS 4 C20:C20 1 C20:C21 1 C20:N11 1 C20C20 2 C21:C21 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1609 C21:N11 1 C21C5 1 C22N4 1 C5=O10 1 C5=O9 1 C5N4 1 C5O2 1 CSO2 2 C10...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1610
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1611 FingerprintsVector;PathLengthCount:SYBYLAtomTypes:MinLength1:MaxLength
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1612 8;412;NumericalValues;IDsAndValuesPairsString;C.2 2 C.3 9 C.ar 22 F 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1613 N.am 1 N.ar 1 O.2 1 O.3 2 O.co2 2 C.2=O.2 1 C.2=O.co2 1 C.2C.3 1 C.2C.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1614 ar 1 C.2N.am 1 C.2O.co2 1 C.3C.3 7 C.3C.ar 1 C.3N.ar 1 C.3O.3 2 C.ar:C
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1615 .ar 21 C.ar:N.ar 2 C.arC.ar 2 C.arF 1 C.arN.am 1 C.2C.3C.3 1 C.2C.ar:C
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1616 .ar 2 C.2N.amC.ar 1 C.3C.2=O.co2 1 C.3C.2O.co2 1 C.3C.3C.3 5 C.3C.3...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1617
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1618 FingerprintsVector;PathLengthCount:TPSAAtomTypes:MinLength1:MaxLength8
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1619 ;331;NumericalValues;IDsAndValuesPairsString;N21 1 N7 1 None 34 O3 2 O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1620 4 3 N21:None 2 N21None 1 N7None 2 None:None 21 None=O3 2 NoneNone 13 N
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1621 oneO4 3 N21:None:None 2 N21:NoneNone 2 N21NoneNone 1 N7None:None 2 N7N
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1622 one=O3 1 N7NoneNone 1 None:N21:None 1 None:N21None 2 None:None:None 20
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1623 None:NoneNone 12 NoneN7None 1 NoneNone=O3 2 NoneNoneNone 8 NoneNon...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1624
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1625 FingerprintsVector;PathLengthCount:UFFAtomTypes:MinLength1:MaxLength8;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1626 410;NumericalValues;IDsAndValuesPairsString;C_2 2 C_3 9 C_R 22 F_ 1 N_
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1627 3 1 N_R 1 O_2 2 O_3 3 C_2=O_2 2 C_2C_3 1 C_2C_R 1 C_2N_3 1 C_2O_3 1 C_
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1628 3C_3 7 C_3C_R 1 C_3N_R 1 C_3O_3 2 C_R:C_R 21 C_R:N_R 2 C_RC_R 2 C_RF_
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1629 1 C_RN_3 1 C_2C_3C_3 1 C_2C_R:C_R 2 C_2N_3C_R 1 C_3C_2=O_2 1 C_3C_2O_3
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1630 1 C_3C_3C_3 5 C_3C_3C_R 2 C_3C_3N_R 1 C_3C_3O_3 4 C_3C_R:C_R 1 C_3...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1631
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1632 =head2 METHODS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1633
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1634 =over 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1635
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1636 =item B<new>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1637
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1638 $NewPathLengthFingerprints = new PathLengthFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1639 %NamesAndValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1640
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1641 Using specified I<PathLengthFingerprints> property names and values hash, B<new> method creates a new object
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1642 and returns a reference to newly created B<PathLengthFingerprints> object. By default, the following properties are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1643 initialized:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1644
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1645 Molecule = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1646 Type = ''
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1647 Size = 1024
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1648 MinSize = 32
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1649 MaxSize = 2**32
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1650 NumOfBitsToSetPerPath = 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1651 MinLength = 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1652 MaxLength = 8
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1653 AllowSharedBonds = 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1654 AllowRings = 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1655 UseBondSymbols = 1
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1656 UseUniquePaths = ''
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1657 AtomIdentifierType = ''
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1658 SetAtomicInvariantsToUse = ['AS']
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1659 FunctionalClassesToUse = ['HBD', 'HBA', 'PI', 'NI', 'Ar', 'Hal']
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1660
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1661 Examples:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1662
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1663 $PathLengthFingerprints = new PathLengthFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1664 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1665 'Type' => 'PathLengthBits',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1666 'AtomIdentifierType' =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1667 'AtomicInvariantsAtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1668
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1669 $PathLengthFingerprints = new PathLengthFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1670 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1671 'Type' => 'PathLengthBits',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1672 'Size' => 1024,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1673 'MinLength' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1674 'MaxLength' => 8,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1675 'AllowRings' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1676 'AllowSharedBonds' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1677 'UseBondSymbols' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1678 'UseUniquePaths' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1679 'AtomIdentifierType' =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1680 'AtomicInvariantsAtomTypes',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1681 'AtomicInvariantsToUse' => ['AS']);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1682
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1683 $PathLengthFingerprints = new PathLengthFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1684 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1685 'Type' => 'PathLengthCount',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1686 'MinLength' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1687 'MaxLength' => 8,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1688 'AllowRings' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1689 'AllowSharedBonds' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1690 'UseBondSymbols' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1691 'UseUniquePaths' => 1,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1692 'AtomIdentifierType' =>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1693 'AtomicInvariantsAtomTypes',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1694 'AtomicInvariantsToUse' => ['AS']);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1695
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1696 $PathLengthFingerprints = new PathLengthFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1697 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1698 'Type' => 'PathLengthBits',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1699 'AtomIdentifierType' =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1700 'SLogPAtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1701
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1702 $PathLengthFingerprints = new PathLengthFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1703 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1704 'Type' => 'PathLengthCount',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1705 'AtomIdentifierType' =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1706 'SYBYLAtomTypes');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1707
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1708 $PathLengthFingerprints = new PathLengthFingerprints(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1709 'Molecule' => $Molecule,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1710 'Type' => 'PathLengthBits',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1711 'AtomIdentifierType' =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1712 'FunctionalClassAtomTypes',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1713 'FunctionalClassesToUse' => ['HBD', 'HBA', 'Ar']);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1714
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1715 $PathLengthFingerprints->GenerateFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1716 print "$PathLengthFingerprints\n";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1717
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1718 =item B<GetDescription>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1719
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1720 $Description = $PathLengthFingerprints->GetDescription();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1721
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1722 Returns a string containing description of path length fingerprints.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1723
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1724 =item B<GenerateFingerprints>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1725
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1726 $PathLengthFingerprints->GenerateFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1727
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1728 Generates path length fingerprints and returns I<PathLengthFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1729
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1730 =item B<SetMaxLength>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1731
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1732 $PathLengthFingerprints->SetMaxLength($Length);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1733
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1734 Sets maximum value of atom path length to be used during atom path length fingerprints
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1735 generation and returns I<PathLengthFingerprints>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1736
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1737 =item B<SetAtomIdentifierType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1738
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1739 $PathLengthFingerprints->SetAtomIdentifierType();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1740
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1741 Sets atom I<IdentifierType> to use during path length fingerprints generation and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1742 returns I<PathLengthFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1743
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1744 Possible values: I<AtomicInvariantsAtomTypes, DREIDINGAtomTypes, EStateAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1745 FunctionalClassAtomTypes, MMFF94AtomTypes, SLogPAtomTypes, SYBYLAtomTypes,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1746 TPSAAtomTypes, UFFAtomTypes>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1747
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1748 =item B<SetAtomicInvariantsToUse>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1749
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1750 $PathLengthFingerprints->SetAtomicInvariantsToUse($ValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1751 $PathLengthFingerprints->SetAtomicInvariantsToUse(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1752
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1753 Sets atomic invariants to use during I<AtomicInvariantsAtomTypes> value of I<AtomIdentifierType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1754 for path length fingerprints generation and returns I<PathLengthFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1755
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1756 Possible values for atomic invariants are: I<AS, X, BO, LBO, SB, DB, TB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1757 H, Ar, RA, FC, MN, SM>. Default value: I<AS>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1758
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1759 The atomic invariants abbreviations correspond to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1760
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1761 AS = Atom symbol corresponding to element symbol
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1762
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1763 X<n> = Number of non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1764 BO<n> = Sum of bond orders to non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1765 LBO<n> = Largest bond order of non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1766 SB<n> = Number of single bonds to non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1767 DB<n> = Number of double bonds to non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1768 TB<n> = Number of triple bonds to non-hydrogen atom neighbors or heavy atoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1769 H<n> = Number of implicit and explicit hydrogens for atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1770 Ar = Aromatic annotation indicating whether atom is aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1771 RA = Ring atom annotation indicating whether atom is a ring
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1772 FC<+n/-n> = Formal charge assigned to atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1773 MN<n> = Mass number indicating isotope other than most abundant isotope
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1774 SM<n> = Spin multiplicity of atom. Possible values: 1 (singlet), 2 (doublet) or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1775 3 (triplet)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1776
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1777 Atom type generated by AtomTypes::AtomicInvariantsAtomTypes class corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1778
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1779 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
1780
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1781 Except for AS which is a required atomic invariant in atom types, all other atomic invariants are
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1782 optional. Atom type specification doesn't include atomic invariants with zero or undefined values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1783
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1784 In addition to usage of abbreviations for specifying atomic invariants, the following descriptive words
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1785 are also allowed:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1786
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1787 X : NumOfNonHydrogenAtomNeighbors or NumOfHeavyAtomNeighbors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1788 BO : SumOfBondOrdersToNonHydrogenAtoms or SumOfBondOrdersToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1789 LBO : LargestBondOrderToNonHydrogenAtoms or LargestBondOrderToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1790 SB : NumOfSingleBondsToNonHydrogenAtoms or NumOfSingleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1791 DB : NumOfDoubleBondsToNonHydrogenAtoms or NumOfDoubleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1792 TB : NumOfTripleBondsToNonHydrogenAtoms or NumOfTripleBondsToHeavyAtoms
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1793 H : NumOfImplicitAndExplicitHydrogens
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1794 Ar : Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1795 RA : RingAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1796 FC : FormalCharge
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1797 MN : MassNumber
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1798 SM : SpinMultiplicity
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1799
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1800 I<AtomTypes::AtomicInvariantsAtomTypes> module is used to assign atomic invariant
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1801 atom types.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1802
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1803 =item B<SetFunctionalClassesToUse>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1804
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1805 $PathLengthFingerprints->SetFunctionalClassesToUse($ValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1806 $PathLengthFingerprints->SetFunctionalClassesToUse(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1807
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1808 Sets functional classes invariants to use during I<FunctionalClassAtomTypes> value of I<AtomIdentifierType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1809 for path length fingerprints generation and returns I<PathLengthFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1810
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1811 Possible values for atom functional classes are: I<Ar, CA, H, HBA, HBD, Hal, NI, PI, RA>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1812 Default value [ Ref 24 ]: I<HBD,HBA,PI,NI,Ar,Hal>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1813
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1814 The functional class abbreviations correspond to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1815
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1816 HBD: HydrogenBondDonor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1817 HBA: HydrogenBondAcceptor
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1818 PI : PositivelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1819 NI : NegativelyIonizable
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1820 Ar : Aromatic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1821 Hal : Halogen
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1822 H : Hydrophobic
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1823 RA : RingAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1824 CA : ChainAtom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1825
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1826 Functional class atom type specification for an atom corresponds to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1827
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1828 Ar.CA.H.HBA.HBD.Hal.NI.PI.RA or None
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1829
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1830 I<AtomTypes::FunctionalClassAtomTypes> module is used to assign functional class atom
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1831 types. It uses following definitions [ Ref 60-61, Ref 65-66 ]:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1832
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1833 HydrogenBondDonor: NH, NH2, OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1834 HydrogenBondAcceptor: N[!H], O
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1835 PositivelyIonizable: +, NH2
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1836 NegativelyIonizable: -, C(=O)OH, S(=O)OH, P(=O)OH
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1837
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1838 =item B<SetMinLength>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1839
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1840 $PathLengthFingerprints->SetMinLength($Length);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1841
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1842 Sets minimum value of atom path length to be used during atom path length fingerprints
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1843 generation and returns I<PathLengthFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1844
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1845 =item B<SetMaxLength>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1846
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1847 $PathLengthFingerprints->SetMaxLength($Length);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1848
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1849 Sets maximum value of atom path length to be used during atom path length fingerprints
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1850 generation and returns I<PathLengthFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1851
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1852 =item B<SetNumOfBitsToSetPerPath>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1853
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1854 $PathLengthFingerprints->SetNumOfBitsToSetPerPath($NumOfBits);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1855
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1856 Sets number of bits to set for each path during I<PathLengthBits> B<Type > during path length fingerprints
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1857 generation and returns I<PathLengthFingerprints>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1858
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1859 =item B<SetType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1860
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1861 $PathLengthFingerprints->SetType($Type);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1862
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1863 Sets type of path length fingerprints and returns I<PathLengthFingerprints>. Possible values:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1864 I<PathLengthBits or PathLengthCount>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1865
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1866 =item B<StringifyPathLengthFingerprints>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1867
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1868 $String = $PathLengthFingerprints->StringifyPathLengthFingerprints();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1869
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1870 Returns a string containing information about I<PathLengthFingerprints> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1871
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1872 =back
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1873
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1874 =head1 AUTHOR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1875
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1876 Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1877
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1878 =head1 SEE ALSO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1879
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1880 Fingerprints.pm, FingerprintsStringUtil.pm, AtomNeighborhoodsFingerprints.pm,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1881 AtomTypesFingerprints.pm, EStateIndiciesFingerprints.pm, ExtendedConnectivityFingerprints.pm,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1882 MACCSKeys.pm, TopologicalAtomPairsFingerprints.pm, TopologicalAtomTripletsFingerprints.pm,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1883 TopologicalAtomTorsionsFingerprints.pm, TopologicalPharmacophoreAtomPairsFingerprints.pm,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1884 TopologicalPharmacophoreAtomTripletsFingerprints.pm
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1885
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1886 =head1 COPYRIGHT
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1887
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1888 Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1889
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1890 This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1891
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1892 MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1893 the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1894 Software Foundation; either version 3 of the License, or (at your option)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1895 any later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1896
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1897 =cut