annotate lib/Fingerprints/FingerprintsVector.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::FingerprintsVector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: FingerprintsVector.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.31 $
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 Scalar::Util ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
33 use MathUtil ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
34 use TextUtil ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
35 use StatisticsUtil ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
36 use BitVector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
37 use Vector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
38
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
39 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
40
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
41 @ISA = qw(Exporter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
42
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
43 # Distance coefficients
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
44 my(@DistanceCoefficients) = qw(CityBlockDistanceCoefficient EuclideanDistanceCoefficient HammingDistanceCoefficient ManhattanDistanceCoefficient SoergelDistanceCoefficient);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
45
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
46 # Similarity coefficients...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
47 my(@SimilarityCoefficients) = qw(CosineSimilarityCoefficient CzekanowskiSimilarityCoefficient DiceSimilarityCoefficient OchiaiSimilarityCoefficient JaccardSimilarityCoefficient SorensonSimilarityCoefficient TanimotoSimilarityCoefficient);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
48
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
49 # New from string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
50 my(@NewFromString) = qw(NewFromValuesString NewFromValuesAndIDsString NewFromIDsAndValuesString NewFromValuesAndIDsPairsString NewFromIDsAndValuesPairsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
51
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
52 @EXPORT = qw(IsFingerprintsVector);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
53 @EXPORT_OK = qw(GetSupportedDistanceCoefficients GetSupportedSimilarityCoefficients GetSupportedDistanceAndSimilarityCoefficients @DistanceCoefficients @SimilarityCoefficients);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
54
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
55 %EXPORT_TAGS = (
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
56 new => [@NewFromString],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
57 distancecoefficients => [@DistanceCoefficients],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
58 similaritycoefficients => [@SimilarityCoefficients],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
59 all => [@EXPORT, @EXPORT_OK]
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
60 );
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
61
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
62 # Setup class variables...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
63 my($ClassName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
64 _InitializeClass();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
65
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
66 # Overload Perl functions...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
67 use overload '""' => 'StringifyFingerprintsVector';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
68
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
69 # Class constructor...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
70 sub new {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
71 my($Class, %NamesAndValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
72
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
73 # Initialize object...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
74 my $This = {};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
75 bless $This, ref($Class) || $Class;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
76
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
77 $This->_InitializeFingerprintsVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
78
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
79 $This->_InitializeFingerprintsVectorProperties(%NamesAndValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
80
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
81 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
82 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
83
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
84 # Initialize object data...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
85 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
86 sub _InitializeFingerprintsVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
87 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
88
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
89 # Type of fingerprint vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
90 $This->{Type} = '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
91
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
92 # Fingerprint vector values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
93 @{$This->{Values}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
94
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
95 # Fingerprint vector value IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
96 @{$This->{ValueIDs}} = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
97
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
98 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
99 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
100
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
101 # Initialize class ...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
102 sub _InitializeClass {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
103 #Class name...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
104 $ClassName = __PACKAGE__;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
105 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
106
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
107 # Initialize object properties....
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
108 sub _InitializeFingerprintsVectorProperties {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
109 my($This, %NamesAndValues) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
110
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
111 my($Name, $Value, $MethodName);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
112 while (($Name, $Value) = each %NamesAndValues) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
113 $MethodName = "Set${Name}";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
114 $This->$MethodName($Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
115 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
116
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
117 if (!exists $NamesAndValues{Type}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
118 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying type...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
119 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
120 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
121 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
122
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
123 # Create a new fingerprints vector using space delimited values string. This functionality can be
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
124 # either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
125 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
126 sub NewFromValuesString ($$;$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
127 my($FirstParameter, $SecondParameter, $ThirdParamater) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
128 my($This, $Type, $ValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
129
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
130 if (@_ == 3) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
131 ($This, $Type, $ValuesString) = ($FirstParameter, $SecondParameter, $ThirdParamater);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
132 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
133 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
134 ($This, $Type, $ValuesString) = (undef, $FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
135 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
136 my($FingerprintsVector, @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
137
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
138 @Values = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
139 if (defined($ValuesString) && length($ValuesString) && $ValuesString !~ /^None$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
140 @Values = split(' ', $ValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
141 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
142
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
143 $FingerprintsVector = new Fingerprints::FingerprintsVector('Type' => $Type, 'Values' => \@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
144
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
145 return $FingerprintsVector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
146 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
147
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
148 # Create a new fingerprints vector using values and IDs string containing semicolon
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
149 # delimited value string and value IDs strings. The values within value and value IDs
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
150 # string are delimited by spaces.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
151 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
152 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
153 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
154 sub NewFromValuesAndIDsString ($$;$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
155 my($FirstParameter, $SecondParameter, $ThirdParamater) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
156 my($This, $Type, $ValuesAndIDsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
157
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
158 if (@_ == 3) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
159 ($This, $Type, $ValuesAndIDsString) = ($FirstParameter, $SecondParameter, $ThirdParamater);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
160 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
161 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
162 ($This, $Type, $ValuesAndIDsString) = (undef, $FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
163 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
164 my($FingerprintsVector, $ValuesString, $ValueIDsString, @Values, @ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
165
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
166 ($ValuesString, $ValueIDsString) = split(';', $ValuesAndIDsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
167
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
168 @Values = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
169 if (defined($ValuesString) && length($ValuesString) && $ValuesString !~ /^None$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
170 @Values = split(' ', $ValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
171 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
172 @ValueIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
173 if (defined($ValueIDsString) && length($ValueIDsString) && $ValueIDsString !~ /^None$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
174 @ValueIDs = split(' ', $ValueIDsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
175 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
176
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
177 if (@Values != @ValueIDs ) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
178 carp "Warning: ${ClassName}->NewFromValuesAndIDsString: Object can't be instantiated: Number specified values, " . scalar @Values . ", must be equal to number of specified value IDs, " . scalar @ValueIDs . "...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
179 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
180 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
181
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
182 $FingerprintsVector = new Fingerprints::FingerprintsVector('Type' => $Type, 'Values' => \@Values, 'ValueIDs' => \@ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
183
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
184 return $FingerprintsVector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
185 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
186
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
187 # Create a new fingerprints vector using IDs and values string containing semicolon
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
188 # delimited value IDs string and values strings. The values within value and value IDs
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
189 # string are delimited by spaces.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
190 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
191 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
192 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
193 sub NewFromIDsAndValuesString ($$;$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
194 my($FirstParameter, $SecondParameter, $ThirdParamater) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
195 my($This, $Type, $IDsAndValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
196
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
197 if (@_ == 3) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
198 ($This, $Type, $IDsAndValuesString) = ($FirstParameter, $SecondParameter, $ThirdParamater);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
199 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
200 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
201 ($This, $Type, $IDsAndValuesString) = (undef, $FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
202 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
203 my($FingerprintsVector, $ValuesString, $ValueIDsString, @Values, @ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
204
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
205 ($ValueIDsString, $ValuesString) = split(';', $IDsAndValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
206
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
207 @Values = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
208 if (defined($ValuesString) && length($ValuesString) && $ValuesString !~ /^None$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
209 @Values = split(' ', $ValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
210 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
211 @ValueIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
212 if (defined($ValueIDsString) && length($ValueIDsString) && $ValueIDsString !~ /^None$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
213 @ValueIDs = split(' ', $ValueIDsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
214 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
215
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
216 if (@Values != @ValueIDs ) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
217 carp "Warning: ${ClassName}->NewFromIDsAndValuesString: Object can't be instantiated: Number specified values, " . scalar @Values . ", must be equal to number of specified value IDs, " . scalar @ValueIDs . "...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
218 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
219 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
220
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
221 $FingerprintsVector = new Fingerprints::FingerprintsVector('Type' => $Type, 'Values' => \@Values, 'ValueIDs' => \@ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
222
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
223 return $FingerprintsVector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
224 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
225
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
226 # Create a new fingerprints vector using values and IDs pairs string containing space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
227 # value and value IDs pairs.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
228 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
229 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
230 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
231 sub NewFromValuesAndIDsPairsString ($$;$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
232 my($FirstParameter, $SecondParameter, $ThirdParamater) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
233 my($This, $Type, $ValuesAndIDsPairsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
234
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
235 if (@_ == 3) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
236 ($This, $Type, $ValuesAndIDsPairsString) = ($FirstParameter, $SecondParameter, $ThirdParamater);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
237 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
238 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
239 ($This, $Type, $ValuesAndIDsPairsString) = (undef, $FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
240 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
241 my($FingerprintsVector, $Index, @Values, @ValueIDs, @ValuesAndIDsPairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
242
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
243 @ValuesAndIDsPairs = split(' ', $ValuesAndIDsPairsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
244 if (@ValuesAndIDsPairs % 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
245 carp "Warning: ${ClassName}->NewFromValuesAndIDsPairsString: No fingerprint vector created: Invalid values and IDs pairs data: Input list must contain even number of values and IDs pairs...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
246 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
247 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
248
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
249 @Values = (); @ValueIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
250 if (!(@ValuesAndIDsPairs == 2 && $ValuesAndIDsPairs[0] =~ /^None$/i && $ValuesAndIDsPairs[1] =~ /^None$/i)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
251 for ($Index = 0; $Index < $#ValuesAndIDsPairs; $Index += 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
252 push @Values, $ValuesAndIDsPairs[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
253 push @ValueIDs, $ValuesAndIDsPairs[$Index + 1];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
254 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
255 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
256 $FingerprintsVector = new Fingerprints::FingerprintsVector('Type' => $Type, 'Values' => \@Values, 'ValueIDs' => \@ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
257
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
258 return $FingerprintsVector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
259 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
260
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
261 # Create a new fingerprints vector using IDs and values pairs string containing space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
262 # value IDs and valus pairs.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
263 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
264 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
265 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
266 sub NewFromIDsAndValuesPairsString ($$;$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
267 my($FirstParameter, $SecondParameter, $ThirdParamater) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
268 my($This, $Type, $IDsAndValuesPairsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
269
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
270 if (@_ == 3) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
271 ($This, $Type, $IDsAndValuesPairsString) = ($FirstParameter, $SecondParameter, $ThirdParamater);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
272 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
273 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
274 ($This, $Type, $IDsAndValuesPairsString) = (undef, $FirstParameter, $SecondParameter);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
275 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
276 my($FingerprintsVector, $Index, @Values, @ValueIDs, @IDsAndValuesPairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
277
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
278 @IDsAndValuesPairs = split(' ', $IDsAndValuesPairsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
279 if (@IDsAndValuesPairs % 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
280 croak "Error: ${ClassName}->NewFromIDsAndValuesPairsString: No fingerprint vector created: Invalid values and IDs pairs data: Input list must contain even number of values and IDs pairs...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
281 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
282 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
283
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
284 @Values = (); @ValueIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
285 if (!(@IDsAndValuesPairs == 2 && $IDsAndValuesPairs[0] =~ /^None$/i && $IDsAndValuesPairs[1] =~ /^None$/i)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
286 for ($Index = 0; $Index < $#IDsAndValuesPairs; $Index += 2) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
287 push @ValueIDs, $IDsAndValuesPairs[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
288 push @Values, $IDsAndValuesPairs[$Index + 1];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
289 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
290 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
291 $FingerprintsVector = new Fingerprints::FingerprintsVector('Type' => $Type, 'Values' => \@Values, 'ValueIDs' => \@ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
292
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
293 return $FingerprintsVector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
294 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
295
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
296 # Set type of fingerprint vector. Supported types are: OrderedNumericalValues, NumericalValues, and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
297 # AlphaNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
298 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
299 # . For OrderedNumericalValues type, both vectors must be of the same size and contain similar
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
300 # types of numerical values in the same order.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
301 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
302 # . For NumericalValues type, vector value IDs for both vectors must be specified; however, their
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
303 # size and order of IDs and numerical values may be different. For each vector, value IDs must
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
304 # correspond to vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
305 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
306 # . For AlphaNumericalValues type, vectors may contain both numerical and alphanumerical values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
307 # and their sizes may be different.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
308 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
309 sub SetType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
310 my($This, $Type) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
311
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
312 if ($Type !~ /^(OrderedNumericalValues|NumericalValues|AlphaNumericalValues)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
313 croak "Error: ${ClassName}->SetType: Specified value, $Type, for Type is not vaild. Supported types in current release of MayaChemTools: OrderedNumericalValues, NumericalValues or AlphaNumericalValues";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
314 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
315
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
316 if ($This->{Type}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
317 croak "Error: ${ClassName}->SetType: Can't change intial fingerprints vector type: It's already set...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
318 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
319 $This->{Type} = $Type;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
320
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
321 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
322 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
323
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
324 # Get fingerpints vector type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
325 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
326 sub GetType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
327 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
328
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
329 return $This->{Type};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
330 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
331
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
332 # Set ID...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
333 sub SetID {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
334 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
335
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
336 $This->{ID} = $Value;
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 # Get ID...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
342 sub GetID {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
343 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
344
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
345 return exists $This->{ID} ? $This->{ID} : 'None';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
346 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
347
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
348 # Set description...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
349 sub SetDescription {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
350 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
351
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
352 $This->{Description} = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
353
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
354 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
355 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
356
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
357 # Get description...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
358 sub GetDescription {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
359 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
360
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
361 return exists $This->{Description} ? $This->{Description} : 'No description available';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
362 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
363
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
364 # Set vector type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
365 sub SetVectorType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
366 my($This, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
367
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
368 $This->{VectorType} = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
369
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
370 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
371 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
372
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
373 # Get vector type...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
374 sub GetVectorType {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
375 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
376
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
377 return exists $This->{VectorType} ? $This->{VectorType} : 'FingerprintsVector';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
378 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
379
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
380 # Set values of a fingerprint vector using a vector, reference to an array or an array...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
381 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
382 sub SetValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
383 my($This, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
384
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
385 $This->_SetOrAddValuesOrValueIDs("SetValues", @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
386
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
387 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
388 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
389
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
390 # Set value IDs of a fingerprint vector using a vector, reference to an array or an array...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
391 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
392 sub SetValueIDs {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
393 my($This, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
394
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
395 $This->_SetOrAddValuesOrValueIDs("SetValueIDs", @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
396
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
397 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
398 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
399
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
400 # Add values to a fingerprint vector using a vector, reference to an array or an array...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
401 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
402 sub AddValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
403 my($This, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
404
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
405 $This->_SetOrAddValuesOrValueIDs("AddValues", @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
407 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
408 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
409
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
410 # Add value IDs to a fingerprint vector using a vector, reference to an array or an array...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
411 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
412 sub AddValueIDs {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
413 my($This, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
414
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
415 $This->_SetOrAddValuesOrValueIDs("AddValueIDs", @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
416
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
417 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
418 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
419
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
420 # Set or add values or value IDs using:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
421 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
422 # o List of values or ValueIDs
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
423 # o Reference to an list of values or ValuesIDs
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
424 # o A vector containing values or ValueIDs
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
425 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
426 sub _SetOrAddValuesOrValueIDs {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
427 my($This, $Mode, @Values) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
428
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
429 if (!@Values) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
430 return;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
431 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
432
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
433 # Collect specified values or valueIDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
434 my($FirstValue, $TypeOfFirstValue, $ValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
435
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
436 $FirstValue = $Values[0];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
437 $TypeOfFirstValue = ref $FirstValue;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
438 if ($TypeOfFirstValue =~ /^(SCALAR|HASH|CODE|REF|GLOB)/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
439 croak "Error: ${ClassName}-> _SetOrAddValuesOrValueIDs: Trying to add values to vector object with a reference to unsupported value format...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
440 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
441
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
442 if (Vector::IsVector($FirstValue)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
443 # It's a vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
444 $ValuesRef = $FirstValue->GetValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
445 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
446 elsif ($TypeOfFirstValue =~ /^ARRAY/) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
447 # It's an array refernce...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
448 $ValuesRef = $FirstValue;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
449 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
450 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
451 # It's a list of values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
452 $ValuesRef = \@Values;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
453 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
454
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
455 # Set or add values or value IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
456 MODE: {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
457 if ($Mode =~ /^SetValues$/i) { @{$This->{Values}} = (); push @{$This->{Values}}, @{$ValuesRef}; last MODE; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
458 if ($Mode =~ /^SetValueIDs$/i) { @{$This->{ValueIDs}} = (); push @{$This->{ValueIDs}}, @{$ValuesRef}; last MODE; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
459 if ($Mode =~ /^AddValues$/i) { push @{$This->{Values}}, @{$ValuesRef}; last MODE; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
460 if ($Mode =~ /^AddValueIDs$/i) { push @{$This->{ValueIDs}}, @{$ValuesRef}; last MODE; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
461 croak "Error: ${ClassName}-> _SetOrAddValuesOrValueIDs: Unknown mode $Mode...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
462 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
463 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
464 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
465
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
466 # Set a specific value in fingerprint vector with indicies starting from 0..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
467 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
468 sub SetValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
469 my($This, $Index, $Value, $SkipCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
470
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
471 # Just set it...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
472 if ($SkipCheck) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
473 return $This->_SetValue($Index, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
474 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
475
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
476 # Check and set...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
477 if ($Index < 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
478 croak "Error: ${ClassName}->SetValue: Index value must be a positive number...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
479 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
480 if ($Index >= $This->GetNumOfValues()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
481 croak "Error: ${ClassName}->SetValue: Index vaue must be less than number of values...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
482 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
483
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
484 return $This->_SetValue($Index, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
485 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
486
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
487 # Set a fingerprint vector value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
488 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
489 sub _SetValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
490 my($This, $Index, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
491
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
492 $This->{Values}[$Index] = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
493
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
494 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
495 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
496
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
497 # Get a specific value from fingerprint vector with indicies starting from 0...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
498 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
499 sub GetValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
500 my($This, $Index) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
501
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
502 if ($Index < 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
503 croak "Error: ${ClassName}->GetValue: Index value must be a positive number...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
504 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
505 if ($Index >= $This->GetNumOfValues()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
506 croak "Error: ${ClassName}->GetValue: Index value must be less than number of values...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
507 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
508 return $This->_GetValue($Index);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
509 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
510
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
511 # Get a fingerprint vector value...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
512 sub _GetValue {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
513 my($This, $Index) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
514
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
515 return $This->{Values}[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
516 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
517
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
518 # Return vector values as an array or reference to an array...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
519 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
520 sub GetValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
521 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
522
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
523 return wantarray ? @{$This->{Values}} : \@{$This->{Values}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
524 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
525
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
526 # Set a specific value ID in fingerprint vector with indicies starting from 0..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
527 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
528 sub SetValueID {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
529 my($This, $Index, $Value, $SkipCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
530
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
531 # Just set it...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
532 if ($SkipCheck) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
533 return $This->_SetValueID($Index, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
534 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
535
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
536 # Check and set...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
537 if ($Index < 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
538 croak "Error: ${ClassName}->SetValueID: Index value must be a positive number...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
539 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
540 if ($Index >= $This->GetNumOfValueIDs()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
541 croak "Error: ${ClassName}->SetValueID: Index vaue must be less than number of value IDs...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
542 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
543
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
544 return $This->_SetValueID($Index, $Value);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
545 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
546
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
547 # Set a fingerprint vector value ID...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
548 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
549 sub _SetValueID {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
550 my($This, $Index, $Value) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
551
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
552 $This->{ValueIDs}[$Index] = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
553
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
554 return $This;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
555 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
556
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
557 # Get a specific value ID from fingerprint vector with indicies starting from 0...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
558 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
559 sub GetValueID {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
560 my($This, $Index) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
561
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
562 if ($Index < 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
563 croak "Error: ${ClassName}->GetValueID: Index value must be a positive number...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
564 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
565 if ($Index >= $This->GetNumOfValueIDs()) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
566 croak "Error: ${ClassName}->GetValueID: Index value must be less than number of value IDs...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
567 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
568 return $This->_GetValueID($Index);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
569 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
570
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
571 # Get a fingerprint vector value ID...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
572 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
573 sub _GetValueID {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
574 my($This, $Index) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
575
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
576 return $This->{ValueIDs}[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
577 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
578
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
579 # Return vector value IDs as an array or reference to an array...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
580 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
581 sub GetValueIDs {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
582 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
583
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
584 return wantarray ? @{$This->{ValueIDs}} : \@{$This->{ValueIDs}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
585 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
586
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
587 # Get fingerprints vector string containing values and/or IDs string in a specifed format...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
588 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
589 sub GetFingerprintsVectorString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
590 my($This, $Format) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
591
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
592 FORMAT : {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
593 if ($Format =~ /^(IDsAndValuesString|IDsAndValues)$/i) { return $This->GetIDsAndValuesString(); last FORMAT; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
594 if ($Format =~ /^(IDsAndValuesPairsString|IDsAndValuesPairs)$/i) { return $This->GetIDsAndValuesPairsString(); last FORMAT; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
595 if ($Format =~ /^(ValuesAndIDsString|ValuesAndIDs)$/i) { return $This->GetValuesAndIDsString(); last FORMAT; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
596 if ($Format =~ /^(ValuesAndIDsPairsString|ValuesAndIDsPairs)$/i) { return $This->GetValuesAndIDsPairsString(); last FORMAT;}
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
597 if ($Format =~ /^(ValueIDsString|ValueIDs)$/i) { return $This->GetValueIDsString(); last FORMAT; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
598 if ($Format =~ /^(ValuesString|Values)$/i) { return $This->GetValuesString(); last FORMAT; }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
599 croak "Error: ${ClassName}->GetFingerprintsVectorString: Specified vector string format, $Format, is not supported. Value values: IDsAndValuesString, IDsAndValues, IDsAndValuesPairsString, IDsAndValuesPairs, ValuesAndIDsString, ValuesAndIDs, ValuesAndIDsPairsString, ValuesAndIDsPairs, ValueIDsString, ValueIDs, ValuesString, Values...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
600 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
601 return '';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
602 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
603 # Get vector value IDs and values string as space delimited ASCII string separated
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
604 # by semicolon...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
605 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
606 sub GetIDsAndValuesString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
607 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
608
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
609 if (@{$This->{ValueIDs}} && @{$This->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
610 # Both IDs and values are available...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
611 return join(' ', @{$This->{ValueIDs}}) . ";" . join(' ', @{$This->{Values}});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
612 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
613 elsif (@{$This->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
614 # Only values are available...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
615 return "None;" . join(' ', @{$This->{Values}});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
616 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
617 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
618 # Values are not available...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
619 return "None;None";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
620 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
621 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
622
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
623 # Get vector value IDs and value pairs string as space delimited ASCII string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
624 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
625 sub GetIDsAndValuesPairsString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
626 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
627 my($Index, $ValueIDsPresent, @IDsAndValuesPairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
628
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
629 if (!@{$This->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
630 # Values are unavailable...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
631 return "None None";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
632 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
633
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
634 $ValueIDsPresent = @{$This->{ValueIDs}} ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
635
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
636 @IDsAndValuesPairs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
637 for $Index (0 .. $#{$This->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
638 if ($ValueIDsPresent) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
639 push @IDsAndValuesPairs, ($This->{ValueIDs}->[$Index], $This->{Values}->[$Index]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
640 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
641 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
642 push @IDsAndValuesPairs, ('None', $This->{Values}->[$Index]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
643 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
644 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
645 return join(' ', @IDsAndValuesPairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
646 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
647
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
648 # Get vector value and value IDs string as space delimited ASCII string separated
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
649 # by semicolon...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
650 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
651 sub GetValuesAndIDsString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
652 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
653
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
654 if (@{$This->{ValueIDs}} && @{$This->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
655 # Both IDs and values are available...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
656 return join(' ', @{$This->{Values}}) . ";" . join(' ', @{$This->{ValueIDs}});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
657 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
658 elsif (@{$This->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
659 # Only values are available...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
660 return join(' ', @{$This->{Values}}) . ";None";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
661 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
662 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
663 # Values are not available...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
664 return "None;None";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
665 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
666 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
667
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
668 # Get vector value and value ID pairs string as space delimited ASCII string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
669 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
670 sub GetValuesAndIDsPairsString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
671 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
672 my($Index, $ValueIDsPresent, @ValuesAndIDsPairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
673
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
674 if (!@{$This->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
675 # Values are unavailable...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
676 return "None None";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
677 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
678
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
679 $ValueIDsPresent = @{$This->{ValueIDs}} ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
681 @ValuesAndIDsPairs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
682 for $Index (0 .. $#{$This->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
683 if ($ValueIDsPresent) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
684 push @ValuesAndIDsPairs, ($This->{Values}->[$Index], $This->{ValueIDs}->[$Index]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
685 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
686 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
687 push @ValuesAndIDsPairs, ($This->{Values}->[$Index], 'None');
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
688 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
689 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
690 return join(' ', @ValuesAndIDsPairs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
691 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
692
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
693 # Get vector value IDs string as space delimited ASCII string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
694 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
695 sub GetValueIDsString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
696 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
697
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
698 return @{$This->{ValueIDs}} ? join(' ', @{$This->{ValueIDs}}) : 'None';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
699 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
700
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
701 # Get vector value string as space delimited ASCII string...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
702 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
703 sub GetValuesString {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
704 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
705
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
706 return @{$This->{Values}} ? join(' ', @{$This->{Values}}) : 'None';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
707 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
708
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
709 # Get number of values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
710 sub GetNumOfValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
711 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
712
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
713 return scalar @{$This->{Values}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
714 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
715
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
716 # Get number of non-zero values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
717 sub GetNumOfNonZeroValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
718 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
719 my($Count, $Index, $Size);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
720
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
721 $Count = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
722 $Size = $This->GetNumOfValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
723
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
724 for $Index (0 .. ($Size -1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
725 if ($This->{Values}[$Index] != 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
726 $Count++;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
727 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
728 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
729 return $Count;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
730 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
731
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
732 # Get number of value IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
733 sub GetNumOfValueIDs {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
734 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
735
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
736 return scalar @{$This->{ValueIDs}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
737 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
738
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
739 # FinegerprintsVectors class provides methods to calculate similarity between vectors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
740 # containing three different types of values:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
741 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
742 # Type I: OrderedNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
743 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
744 # . Size of two vectors are same
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
745 # . Vectors contain real values in a specific order. For example: MACCS keys count, Topological
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
746 # pharnacophore atom pairs and so on.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
747 # . Option to calculate similarity value using continious values or binary values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
748 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
749 # Type II: UnorderedNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
750 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
751 # . Size of two vectors might not be same
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
752 # . Vectors contain unordered real value identified by value IDs. For example: Toplogical atom pairs,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
753 # Topological atom torsions and so on
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
754 # . Option to calculate similarity value using continous values or binary values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
755 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
756 # Type III: AlphaNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
757 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
758 # . Size of two vectors might not be same
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
759 # . Vectors contain unordered alphanumerical values. For example: Extended connectivity fingerprints,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
760 # atom neighbothood fingerpritns.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
761 # . The vector values are treated as keys or bit indices and similarity value is calculated accordingly.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
762 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
763 # Before performing similarity or distance calculations between vectors containing UnorderedNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
764 # or AlphaNumericalValues, the vectors are tranformed into vectors containing unique OrderedNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
765 # using value IDs for UnorderedNumericalValues and values itself for AlphaNumericalValues.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
766 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
767 # Three forms similarity or distance calculation between two vectors: AlgebraicForm, BinaryForm or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
768 # SetTheoreticForm.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
769 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
770 # The value of an extra paramter, CalculationMode, passed to each similarity or distance function
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
771 # controls the calculation. Supported values for CalculationMode: AlgebraicForm, BinaryForm and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
772 # SetTheoreticForm. Default: AlgebraicForm.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
773 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
774 # For BinaryForm CalculationMode, the ordered list of processed final vector values containing the value or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
775 # count of each unique value type is simply converted into a binary vector containing 1s and 0s
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
776 # corresponding to presence or absence of values before calculating similarity or distance between
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
777 # two vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
778 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
779 # For two fingerprint vectors A and B of same size containing OrderedNumericalValues, let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
780 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
781 # N = Number values in A or B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
782 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
783 # Xa = Values of vector A
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
784 # Xb = Values of vector B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
785 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
786 # Xai = Value of ith element in A
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
787 # Xbi = Value of ith element in B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
788 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
789 # SUM = Sum of i over N values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
790 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
791 # For SetTheoreticForm of calculation between two vectors, let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
792 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
793 # SetIntersectionXaXb = SUM ( MIN ( Xai, Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
794 # SetDifferenceXaXb = SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
795 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
796 # For BinaryForm of calculation between two vectors, let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
797 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
798 # Na = Number of bits set to "1" in A = SUM ( Xai )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
799 # Nb = Number of bits set to "1" in B = SUM ( Xbi )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
800 # Nc = Number of bits set to "1" in both A and B = SUM ( Xai * Xbi )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
801 # Nd = Number of bits set to "0" in both A and B = SUM ( 1 - Xai - Xbi + Xai * Xbi)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
802 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
803 # N = Number of bits set to "1" or "0" in A or B = Size of A or B = Na + Nb - Nc + Nd
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
804 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
805 # Additionally, for BinaryForm various values also correspond to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
806 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
807 # Na = | Xa |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
808 # Nb = | Xb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
809 # Nc = | SetIntersectionXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
810 # Nd = N - | SetDifferenceXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
811 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
812 # | SetDifferenceXaXb | = N - Nd = Na + Nb - Nc + Nd - Nd = Na + Nb - Nc
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
813 # = | Xa | + | Xb | - | SetIntersectionXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
814 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
815 # Various distance coefficients and similarity coefficients [ Ref 40, Ref 62, Ref 64 ] for a pair vectors A and B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
816 # in AlgebraicForm and BinaryForm are defined as follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
817 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
818 # . CityBlockDistanceCoefficient: ( same as HammingDistanceCoefficient and ManhattanDistanceCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
819 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
820 # . AlgebraicForm: SUM ( ABS ( Xai - Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
821 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
822 # . BinaryForm: ( Na - Nc ) + ( Nb - Nc ) = Na + Nb - 2 * Nc
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
823 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
824 # . SetTheoreticForm: | SetDifferenceXaXb | - | SetIntersectionXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
825 # = SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
826 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
827 # . CosineSimilarityCoefficient: ( same as OchiaiSimilarityCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
828 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
829 # . AlgebraicForm: SUM ( Xai * Xbi ) / SQRT ( SUM ( Xai ** 2) * SUM ( Xbi ** 2) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
830 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
831 # . BinaryForm: Nc / SQRT ( Na * Nb)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
832 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
833 # . SetTheoreticForm: | SetIntersectionXaXb | / SQRT ( |Xa| * |Xb| )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
834 # = SUM ( MIN ( Xai, Xbi ) ) / SQRT ( SUM ( Xai ) * SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
835 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
836 # . CzekanowskiSimilarityCoefficient: ( same as DiceSimilarityCoefficient and SorensonSimilarityCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
837 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
838 # . AlgebraicForm: ( 2 * ( SUM ( Xai * Xbi ) ) ) / ( SUM ( Xai ** 2) + SUM ( Xbi **2 ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
839 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
840 # . BinaryForm: 2 * Nc / ( Na + Nb )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
841 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
842 # . SetTheoreticForm: 2 * | SetIntersectionXaXb | / ( |Xa| + |Xb| )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
843 # = 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
844 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
845 # . DiceSimilarityCoefficient: ( same as CzekanowskiSimilarityCoefficient and SorensonSimilarityCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
846 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
847 # . AlgebraicForm: ( 2 * ( SUM ( Xai * Xbi ) ) ) / ( SUM ( Xai ** 2) + SUM ( Xbi **2 ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
848 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
849 # . BinaryForm: 2 * Nc / ( Na + Nb )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
850 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
851 # . SetTheoreticForm: 2 * | SetIntersectionXaXb | / ( |Xa| + |Xb| )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
852 # = 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
853 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
854 # . EuclideanDistanceCoefficient:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
855 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
856 # . AlgebraicForm: SQRT ( SUM ( ( ( Xai - Xbi ) ** 2 ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
857 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
858 # . BinaryForm: SQRT ( ( Na - Nc ) + ( Nb - Nc ) ) = SQRT ( Na + Nb - 2 * Nc )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
859 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
860 # . SetTheoreticForm: SQRT ( | SetDifferenceXaXb | - | SetIntersectionXaXb | )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
861 # = SQRT ( SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
862 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
863 # . HammingDistanceCoefficient: ( same as CityBlockDistanceCoefficient and ManhattanDistanceCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
864 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
865 # . AlgebraicForm: SUM ( ABS ( Xai - Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
866 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
867 # . BinaryForm: ( Na - Nc ) + ( Nb - Nc ) = Na + Nb - 2 * Nc
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
868 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
869 # . SetTheoreticForm: | SetDifferenceXaXb | - | SetIntersectionXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
870 # = SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
871 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
872 # . JaccardSimilarityCoefficient: ( same as TanimotoSimilarityCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
873 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
874 # . AlgebraicForm: SUM ( Xai * Xbi ) / ( SUM ( Xai ** 2 ) + SUM ( Xbi ** 2 ) - SUM ( Xai * Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
875 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
876 # . BinaryForm: Nc / ( ( Na - Nc ) + ( Nb - Nc ) + Nc ) = Nc / ( Na + Nb - Nc )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
877 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
878 # . SetTheoreticForm: | SetIntersectionXaXb | / | SetDifferenceXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
879 # = SUM ( MIN ( Xai, Xbi ) ) / ( SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
880 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
881 # . ManhattanDistanceCoefficient: ( same as CityBlockDistanceCoefficient and HammingDistanceCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
882 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
883 # . AlgebraicForm: SUM ( ABS ( Xai - Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
884 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
885 # . BinaryForm: ( Na - Nc ) + ( Nb - Nc ) = Na + Nb - 2 * Nc
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
886 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
887 # . SetTheoreticForm: | SetDifferenceXaXb | - | SetIntersectionXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
888 # = SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
889 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
890 # . OchiaiSimilarityCoefficient: ( same as CosineSimilarityCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
891 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
892 # . AlgebraicForm: SUM ( Xai * Xbi ) / SQRT ( SUM ( Xai ** 2) * SUM ( Xbi ** 2) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
893 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
894 # . BinaryForm: Nc / SQRT ( Na * Nb)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
895 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
896 # . SetTheoreticForm: | SetIntersectionXaXb | / SQRT ( |Xa| * |Xb| )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
897 # = SUM ( MIN ( Xai, Xbi ) ) / SQRT ( SUM ( Xai ) * SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
898 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
899 # . SorensonSimilarityCoefficient: ( same as CzekanowskiSimilarityCoefficient and DiceSimilarityCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
900 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
901 # . AlgebraicForm: ( 2 * ( SUM ( Xai * Xbi ) ) ) / ( SUM ( Xai ** 2) + SUM ( Xbi **2 ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
902 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
903 # . BinaryForm: 2 * Nc / ( Na + Nb )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
904 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
905 # . SetTheoreticForm: 2 * | SetIntersectionXaXb | / ( |Xa| + |Xb| )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
906 # = 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
907 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
908 # . SoergelDistanceCoefficient:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
909 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
910 # . AlgebraicForm: SUM ( ABS ( Xai - Xbi ) ) / SUM ( MAX ( Xai, Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
911 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
912 # . BinaryForm: 1 - Nc / ( Na + Nb - Nc ) = ( Na + Nb - 2 * Nc ) / ( Na + Nb - Nc )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
913 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
914 # . SetTheoreticForm: ( | SetDifferenceXaXb | - | SetIntersectionXaXb | ) / | SetDifferenceXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
915 # = ( SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
916 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
917 # . TanimotoSimilarityCoefficient: ( same as JaccardSimilarityCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
918 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
919 # . AlgebraicForm: SUM ( Xai * Xbi ) / ( SUM ( Xai ** 2 ) + SUM ( Xbi ** 2 ) - SUM ( Xai * Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
920 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
921 # . BinaryForm: Nc / ( ( Na - Nc ) + ( Nb - Nc ) + Nc ) = Nc / ( Na + Nb - Nc )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
922 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
923 # . SetTheoreticForm: | SetIntersectionXaXb | / | SetDifferenceXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
924 # = SUM ( MIN ( Xai, Xbi ) ) / ( SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
925 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
926 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
927
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
928 # Calculate Hamming distance coefficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
929 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
930 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
931 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
932 sub HammingDistanceCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
933 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
934
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
935 return CityBlockDistanceCoefficient($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
936 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
937
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
938 # Calculate Hamming distance coefficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
939 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
940 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
941 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
942 sub ManhattanDistanceCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
943 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
944
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
945 return CityBlockDistanceCoefficient($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
946 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
947
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
948 # Calculate CityBlock distance coefficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
949 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
950 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
951 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
952 sub CityBlockDistanceCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
953 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
954
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
955 $CalculationMode = defined $CalculationMode ? $CalculationMode : 'AlgebraicForm';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
956 $SkipValuesCheck = defined $SkipValuesCheck ? $SkipValuesCheck : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
957
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
958 # Validate and process fingerprints vectors for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
959 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
960 _ValidateAndProcessFingerprintsVectorsForSimilarityCalculation("CityBlockDistanceCoefficient: Calculation failed", $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
961
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
962 # Perform the calculation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
963 if ($CalculationMode =~ /^AlgebraicForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
964 return _CityBlockDistanceCoefficientUsingAlgebraicForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
965 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
966 elsif ($CalculationMode =~ /^BinaryForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
967 return _CityBlockDistanceCoefficientUsingBinaryForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
968 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
969 elsif ($CalculationMode =~ /^SetTheoreticForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
970 return _CityBlockDistanceCoefficientUsingSetTheoreticForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
971 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
972 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
973 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
974 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
975 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
976
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
977 # Calculate CityBlock distance coefficient using algebraic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
978 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
979 sub _CityBlockDistanceCoefficientUsingAlgebraicForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
980 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
981 my($SumAbsSubtractionXaiXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
982
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
983 $SumAbsSubtractionXaiXbi = _GetSumOfAbsoluteValueOfSubtractionOfFingerprintsOrderedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
984
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
985 return $SumAbsSubtractionXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
986 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
987
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
988 # Calculate CityBlock distance coefficient using binary form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
989 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
990 sub _CityBlockDistanceCoefficientUsingBinaryForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
991 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
992 my($Na, $Nb, $Nc);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
993
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
994 ($Na, $Nb, $Nc) = _GetNumOfIndividualAndCommonSetBits($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
995
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
996 return ($Na + $Nb - 2 * $Nc);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
997 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
998
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
999 # Calculate CityBlock distance coefficient using set theoretic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1000 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1001 sub _CityBlockDistanceCoefficientUsingSetTheoreticForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1002 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1003 my($SumMinXaiXbi, $SumXai, $SumXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1004
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1005 $SumXai = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorA);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1006 $SumXbi = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1007 $SumMinXaiXbi = _GetSumOfMinimumOfFingerprintsOrderdedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1008
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1009 return ($SumXai + $SumXbi - 2 * $SumMinXaiXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1010 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1011
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1012 # Calculate Ochiai similarity cofficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1013 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1014 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1015 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1016 sub OchiaiSimilarityCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1017 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1018
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1019 return CosineSimilarityCoefficient($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1020 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1021
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1022 # Calculate Cosine similarity cofficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1023 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1024 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1025 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1026 sub CosineSimilarityCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1027 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1028
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1029 $CalculationMode = defined $CalculationMode ? $CalculationMode : 'AlgebraicForm';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1030 $SkipValuesCheck = defined $SkipValuesCheck ? $SkipValuesCheck : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1031
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1032 # Validate and process fingerprints vectors for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1033 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1034 _ValidateAndProcessFingerprintsVectorsForSimilarityCalculation("CosineSimilarityCoefficient: Calculation failed", $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1035
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1036 # Perform the calculation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1037 if ($CalculationMode =~ /^AlgebraicForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1038 return _CosineSimilarityCoefficientUsingAlgebraicForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1039 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1040 elsif ($CalculationMode =~ /^BinaryForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1041 return _CosineSimilarityCoefficientUsingBinaryForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1042 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1043 elsif ($CalculationMode =~ /^SetTheoreticForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1044 return _CosineSimilarityCoefficientUsingSetTheoreticForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1045 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1046 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1047 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1048 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1049 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1050
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1051 # Calculate Cosine similarity coefficient using algebraic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1052 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1053 sub _CosineSimilarityCoefficientUsingAlgebraicForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1054 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1055 my($SumProductXaiXbi, $SumXai2, $SumXbi2, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1056
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1057 $SumXai2 = _GetSumOfSquaresOfFingerprintsOrderedValues($FingerprintsVectorA);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1058 $SumXbi2 = _GetSumOfSquaresOfFingerprintsOrderedValues($FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1059 $SumProductXaiXbi = _GetSumOfProductOfFingerprintsOrderedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1060
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1061 $Numerator = $SumProductXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1062 $Denominator = sqrt($SumXai2 * $SumXbi2);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1063
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1064 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1065 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1066
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1067 # CalculateCosine similarity coefficient using binary form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1068 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1069 sub _CosineSimilarityCoefficientUsingBinaryForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1070 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1071 my($Na, $Nb, $Nc, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1072
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1073 ($Na, $Nb, $Nc) = _GetNumOfIndividualAndCommonSetBits($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1074
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1075 $Numerator = $Nc;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1076 $Denominator = sqrt($Na * $Nb);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1077
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1078 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1079 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1080
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1081 # Calculate Cosine similarity coefficient using set theoretic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1082 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1083 sub _CosineSimilarityCoefficientUsingSetTheoreticForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1084 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1085 my($SumMinXaiXbi, $SumXai, $SumXbi, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1086
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1087 $SumXai = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorA);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1088 $SumXbi = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1089 $SumMinXaiXbi = _GetSumOfMinimumOfFingerprintsOrderdedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1090
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1091 $Numerator = $SumMinXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1092 $Denominator = sqrt($SumXai * $SumXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1093
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1094 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1095 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1096
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1097 # Calculate Czekanowski similarity cofficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1098 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1099 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1100 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1101 sub CzekanowskiSimilarityCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1102 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1103
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1104 return DiceSimilarityCoefficient($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1105 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1106
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1107 # Calculate Sorenson similarity cofficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1108 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1109 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1110 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1111 sub SorensonSimilarityCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1112 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1113
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1114 return DiceSimilarityCoefficient($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1115 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1116
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1117 # Calculate Dice similarity cofficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1118 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1119 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1120 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1121 sub DiceSimilarityCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1122 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1123
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1124 $CalculationMode = defined $CalculationMode ? $CalculationMode : 'AlgebraicForm';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1125 $SkipValuesCheck = defined $SkipValuesCheck ? $SkipValuesCheck : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1126
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1127 # Validate and process fingerprints vectors for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1128 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1129 _ValidateAndProcessFingerprintsVectorsForSimilarityCalculation("DiceSimilarityCoefficient: Calculation failed", $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1130
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1131 # Perform the calculation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1132 if ($CalculationMode =~ /^AlgebraicForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1133 return _DiceSimilarityCoefficientUsingAlgebraicForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1134 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1135 elsif ($CalculationMode =~ /^BinaryForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1136 return _DiceSimilarityCoefficientUsingBinaryForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1137 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1138 elsif ($CalculationMode =~ /^SetTheoreticForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1139 return _DiceSimilarityCoefficientUsingSetTheoreticForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1140 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1141 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1142 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1143 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1144 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1145
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1146 # Calculate Dice similarity coefficient using algebraic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1147 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1148 sub _DiceSimilarityCoefficientUsingAlgebraicForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1149 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1150 my($SumProductXaiXbi, $SumXai2, $SumXbi2, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1151
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1152 $SumXai2 = _GetSumOfSquaresOfFingerprintsOrderedValues($FingerprintsVectorA);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1153 $SumXbi2 = _GetSumOfSquaresOfFingerprintsOrderedValues($FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1154 $SumProductXaiXbi = _GetSumOfProductOfFingerprintsOrderedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1155
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1156 $Numerator = 2 * $SumProductXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1157 $Denominator = $SumXai2 + $SumXbi2;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1158
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1159 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1160 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1161
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1162 # Calculate Dice similarity coefficient using binary form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1163 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1164 sub _DiceSimilarityCoefficientUsingBinaryForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1165 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1166 my($Na, $Nb, $Nc, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1167
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1168 ($Na, $Nb, $Nc) = _GetNumOfIndividualAndCommonSetBits($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1169
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1170 $Numerator = 2 * $Nc;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1171 $Denominator = $Na + $Nb;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1172
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1173 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1174 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1175
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1176 # Calculate Dice similarity coefficient using set theoretic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1177 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1178 sub _DiceSimilarityCoefficientUsingSetTheoreticForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1179 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1180 my($SumMinXaiXbi, $SumXai, $SumXbi, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1181
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1182 $SumXai = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorA);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1183 $SumXbi = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1184 $SumMinXaiXbi = _GetSumOfMinimumOfFingerprintsOrderdedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1185
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1186 $Numerator = 2 * $SumMinXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1187 $Denominator = $SumXai + $SumXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1188
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1189 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1190 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1191
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1192
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1193 # Calculate Euclidean distance coefficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1194 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1195 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1196 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1197 sub EuclideanDistanceCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1198 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1199
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1200 $CalculationMode = defined $CalculationMode ? $CalculationMode : 'AlgebraicForm';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1201 $SkipValuesCheck = defined $SkipValuesCheck ? $SkipValuesCheck : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1202
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1203 # Validate and process fingerprints vectors for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1204 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1205 _ValidateAndProcessFingerprintsVectorsForSimilarityCalculation("EuclideanDistanceCoefficient: Calculation failed", $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1206
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1207 # Perform the calculation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1208 if ($CalculationMode =~ /^AlgebraicForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1209 return _EuclideanDistanceCoefficientUsingAlgebraicForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1210 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1211 elsif ($CalculationMode =~ /^BinaryForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1212 return _EuclideanDistanceCoefficientUsingBinaryForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1213 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1214 elsif ($CalculationMode =~ /^SetTheoreticForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1215 return _EuclideanDistanceCoefficientUsingSetTheoreticForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1216 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1217 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1218 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1219 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1220 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1221
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1222 # Calculate Euclidean distance coefficient using algebraic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1223 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1224 sub _EuclideanDistanceCoefficientUsingAlgebraicForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1225 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1226 my($SumSquaresSubtractionXaiXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1227
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1228 $SumSquaresSubtractionXaiXbi = _GetSumOfSquaresOfSubtractionOfFingerprintsOrderedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1229
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1230 return sqrt($SumSquaresSubtractionXaiXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1231 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1232
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1233 # Calculate Euclidean distance coefficient using binary form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1234 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1235 sub _EuclideanDistanceCoefficientUsingBinaryForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1236 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1237 my($Na, $Nb, $Nc);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1238
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1239 ($Na, $Nb, $Nc) = _GetNumOfIndividualAndCommonSetBits($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1240
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1241 return (sqrt($Na + $Nb - 2 * $Nc));
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1242 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1243
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1244 # Calculate Euclidean distance coefficient using set theoretic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1245 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1246 sub _EuclideanDistanceCoefficientUsingSetTheoreticForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1247 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1248 my($SumMinXaiXbi, $SumXai, $SumXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1249
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1250 $SumXai = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorA);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1251 $SumXbi = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1252 $SumMinXaiXbi = _GetSumOfMinimumOfFingerprintsOrderdedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1253
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1254 return (sqrt($SumXai + $SumXbi - 2 * $SumMinXaiXbi));
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1255 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1256
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1257 # Calculate Jaccard similarity cofficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1258 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1259 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1260 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1261 sub JaccardSimilarityCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1262 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1263
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1264 return TanimotoSimilarityCoefficient($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1265 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1266
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1267 # Calculate Tanimoto similarity cofficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1268 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1269 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1270 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1271 sub TanimotoSimilarityCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1272 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1273
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1274 $CalculationMode = defined $CalculationMode ? $CalculationMode : 'AlgebraicForm';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1275 $SkipValuesCheck = defined $SkipValuesCheck ? $SkipValuesCheck : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1276
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1277 # Validate and process fingerprints vectors for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1278 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1279 _ValidateAndProcessFingerprintsVectorsForSimilarityCalculation("TanimotoSimilarityCoefficient: Calculation failed", $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1280
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1281 # Perform the calculation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1282 if ($CalculationMode =~ /^AlgebraicForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1283 return _TanimotoSimilarityCoefficientUsingAlgebraicForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1284 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1285 elsif ($CalculationMode =~ /^BinaryForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1286 return _TanimotoSimilarityCoefficientUsingBinaryForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1287 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1288 elsif ($CalculationMode =~ /^SetTheoreticForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1289 return _TanimotoSimilarityCoefficientUsingSetTheoreticForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1290 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1291 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1292 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1293 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1294 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1295
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1296 # Calculate Tanimoto similarity coefficient using algebraic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1297 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1298 sub _TanimotoSimilarityCoefficientUsingAlgebraicForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1299 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1300 my($SumProductXaiXbi, $SumXai2, $SumXbi2, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1301
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1302 $SumXai2 = _GetSumOfSquaresOfFingerprintsOrderedValues($FingerprintsVectorA);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1303 $SumXbi2 = _GetSumOfSquaresOfFingerprintsOrderedValues($FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1304 $SumProductXaiXbi = _GetSumOfProductOfFingerprintsOrderedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1305
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1306 $Numerator = $SumProductXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1307 $Denominator = $SumXai2 + $SumXbi2 - $SumProductXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1308
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1309 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1310 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1311
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1312 # Calculate Tanimoto similarity coefficient using binary form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1313 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1314 sub _TanimotoSimilarityCoefficientUsingBinaryForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1315 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1316 my($Na, $Nb, $Nc, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1317
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1318 ($Na, $Nb, $Nc) = _GetNumOfIndividualAndCommonSetBits($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1319
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1320 $Numerator = $Nc;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1321 $Denominator = $Na + $Nb - $Nc;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1322
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1323 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1324 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1325
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1326 # Calculate Tanimoto similarity coefficient using set theoretic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1327 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1328 sub _TanimotoSimilarityCoefficientUsingSetTheoreticForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1329 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1330 my($SumMinXaiXbi, $SumXai, $SumXbi, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1331
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1332 $SumXai = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorA);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1333 $SumXbi = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1334 $SumMinXaiXbi = _GetSumOfMinimumOfFingerprintsOrderdedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1335
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1336 $Numerator = $SumMinXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1337 $Denominator = $SumXai + $SumXbi - $SumMinXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1338
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1339 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1340 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1341
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1342
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1343 # Calculate Soergel distance coefficient between two fingerprint vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1344 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1345 # This functionality can be either invoked as a class function or an object method.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1346 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1347 sub SoergelDistanceCoefficient ($$;$$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1348 my($FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1349
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1350 $CalculationMode = defined $CalculationMode ? $CalculationMode : 'AlgebraicForm';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1351 $SkipValuesCheck = defined $SkipValuesCheck ? $SkipValuesCheck : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1352
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1353 # Validate and process fingerprints vectors for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1354 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1355 _ValidateAndProcessFingerprintsVectorsForSimilarityCalculation("SoergelDistanceCoefficient: Calculation failed", $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1356
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1357 # Perform the calculation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1358 if ($CalculationMode =~ /^AlgebraicForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1359 return _SoergelDistanceCoefficientUsingAlgebraicForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1360 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1361 elsif ($CalculationMode =~ /^BinaryForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1362 return _SoergelDistanceCoefficientUsingBinaryForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1363 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1364 elsif ($CalculationMode =~ /^SetTheoreticForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1365 return _SoergelDistanceCoefficientUsingSetTheoreticForm($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1366 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1367 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1368 return undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1369 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1370 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1371
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1372 # Calculate Soergel distance coefficientusing algebraic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1373 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1374 sub _SoergelDistanceCoefficientUsingAlgebraicForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1375 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1376 my($SumAbsSubtractionXaiXbi, $SumMaxXaiXbi, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1377
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1378 $SumAbsSubtractionXaiXbi = _GetSumOfAbsoluteValueOfSubtractionOfFingerprintsOrderedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1379 $SumMaxXaiXbi = _GetSumOfMaximumOfFingerprintsOrderdedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1380
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1381 $Numerator = $SumAbsSubtractionXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1382 $Denominator = $SumMaxXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1383
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1384 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1385 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1386
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1387 # Calculate Soergel distance coefficient using binary form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1388 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1389 sub _SoergelDistanceCoefficientUsingBinaryForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1390 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1391 my($Na, $Nb, $Nc, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1392
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1393 ($Na, $Nb, $Nc) = _GetNumOfIndividualAndCommonSetBits($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1394
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1395 $Numerator = $Na + $Nb - 2 * $Nc;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1396 $Denominator = $Na + $Nb - $Nc;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1397
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1398 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1399 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1400
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1401 # Calculate SoergelDistanceCoefficient using set theoretic form...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1402 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1403 sub _SoergelDistanceCoefficientUsingSetTheoreticForm {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1404 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1405 my($SumMinXaiXbi, $SumXai, $SumXbi, $Numerator, $Denominator);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1406
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1407 $SumXai = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorA);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1408 $SumXbi = _GetSumOfFingerprintsOrderedValues($FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1409 $SumMinXaiXbi = _GetSumOfMinimumOfFingerprintsOrderdedValues($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1410
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1411 $Numerator = $SumXai + $SumXbi - 2 * $SumMinXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1412 $Denominator = $SumXai + $SumXbi - $SumMinXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1413
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1414 return $Denominator ? ($Numerator/$Denominator) : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1415 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1416
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1417 # Validate and process fingerprints vectors for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1418 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1419 sub _ValidateAndProcessFingerprintsVectorsForSimilarityCalculation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1420 my($ErrorMsg, $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode, $SkipValuesCheck) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1421
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1422 $CalculationMode = defined $CalculationMode ? $CalculationMode : 'AlgebraicForm';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1423 $SkipValuesCheck = defined $SkipValuesCheck ? $SkipValuesCheck : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1424
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1425 if (!$SkipValuesCheck) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1426 _ValidateFingerprintsVectorsForSimilarityCalculation($ErrorMsg, $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1427 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1428 _ProcessFingerprintsVectorsForSimilarityCalculation($ErrorMsg, $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1429 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1430
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1431 # Make sure fingerprint vectors are good for performing similarity/distance calculation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1432 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1433 sub _ValidateFingerprintsVectorsForSimilarityCalculation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1434 my($ErrorMsg, $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1435
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1436 # Make sure both are fingerprint vectors..
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1437 if (!(IsFingerprintsVector($FingerprintsVectorA) && IsFingerprintsVector($FingerprintsVectorB))) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1438 croak "Error: ${ClassName}->${ErrorMsg}: Both objects must be fingerprint vectors...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1439 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1440
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1441 # Check types...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1442 if ($FingerprintsVectorA->{Type} ne $FingerprintsVectorB->{Type}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1443 croak "Error: ${ClassName}->${ErrorMsg}: Type of first fingerprint vector, $FingerprintsVectorA->{Type}, must be same as type of second fingerprint vector, $FingerprintsVectorB->{Type}...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1444 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1445
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1446 # Check calculation mode...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1447 if ($CalculationMode !~ /^(AlgebraicForm|BinaryForm|SetTheoreticForm)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1448 croak "Error: ${ClassName}->${ErrorMsg}: Specified similarity calculation mode, $CalculationMode, is not valid. Supported values: AlgebraicForm, BinaryForm, and SetTheoreticForm...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1449 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1450
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1451 # Check values and value IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1452 my($Na, $Nb, $NIDa, $NIDb);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1453 $Na = $FingerprintsVectorA->GetNumOfValues(); $Nb = $FingerprintsVectorB->GetNumOfValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1454 $NIDa = $FingerprintsVectorA->GetNumOfValueIDs(); $NIDb = $FingerprintsVectorB->GetNumOfValueIDs();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1455
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1456 if ($Na == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1457 croak "Error: ${ClassName}->${ErrorMsg}: Number of values in first fingerprint vector, $Na, must be > 0 for fingerprint vector type $FingerprintsVectorA->{Type} ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1458 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1459 if ($Nb == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1460 croak "Error: ${ClassName}->${ErrorMsg}: Number of values in second fingerprint vector, $Nb, must be > 0 for fingerprint vector type $FingerprintsVectorB->{Type} ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1461 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1462
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1463 if ($FingerprintsVectorA->{Type} =~ /^OrderedNumericalValues$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1464 if ($Na != $Nb) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1465 croak "Error: ${ClassName}->${ErrorMsg}: Number of values in first fingerprint vector, $Na, must be equal to number of values, $Nb, in second fingerprint vector for fingerprint vector types $FingerprintsVectorA->{Type} ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1466 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1467 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1468 elsif ($FingerprintsVectorA->{Type} =~ /^NumericalValues$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1469 if ($NIDa == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1470 croak "Error: ${ClassName}->${ErrorMsg}: Number of value IDs in first fingerprint vector, $NIDa, must be > 0 for fingerprint vector type $FingerprintsVectorA->{Type} ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1471 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1472 if ($NIDb == 0) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1473 croak "Error: ${ClassName}->${ErrorMsg}: Number of value IDs in first fingerprint vector, $NIDb, must be > 0 for fingerprint vector type $FingerprintsVectorB->{Type} ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1474 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1475
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1476 if ($NIDa != $Na) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1477 croak "Error: ${ClassName}->${ErrorMsg}: Number of value IDs in first fingerprint vector, $NIDa, must be equal to its number of values, $Na, for fingerprint vector type $FingerprintsVectorA->{Type} ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1478 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1479 if ($NIDb != $Nb) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1480 croak "Error: ${ClassName}->${ErrorMsg}: Number of value IDs in second fingerprint vector, $NIDb, must be equal to its number of values, $Nb, for fingerprint vector type $FingerprintsVectorA->{Type} ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1481 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1482 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1483 elsif ($FingerprintsVectorA->{Type} =~ /^AlphaNumericalValues$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1484 if ($NIDa || $NIDb) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1485 croak "Error: ${ClassName}->${ErrorMsg}: ValueIDs cann't be specified for fingerprint vector types $FingerprintsVectorA->{Type} ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1486 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1487 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1488 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1489 croak "Error: ${ClassName}->${ErrorMsg}: Fingerprint vector types $FingerprintsVectorA->{Type} is not valid...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1490 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1491 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1492
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1493 # Process fingerprints vectors for similarity calculation by generating vectors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1494 # containing ordered list of values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1495 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1496 sub _ProcessFingerprintsVectorsForSimilarityCalculation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1497 my($ErrorMsg, $FingerprintsVectorA, $FingerprintsVectorB, $CalculationMode) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1498
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1499 $FingerprintsVectorA->{OrderedValuesRef} = undef; $FingerprintsVectorB->{OrderedValuesRef} = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1500 $FingerprintsVectorA->{BitVector} = undef; $FingerprintsVectorB->{BitVector} = undef;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1501
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1502 if ($FingerprintsVectorA->{Type} =~ /^OrderedNumericalValues$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1503 _ProcessOrderedNumericalValuesFingerprintsVectorsForSimilarityCalculation($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1504 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1505 elsif ($FingerprintsVectorA->{Type} =~ /^NumericalValues$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1506 _ProcessNumericalValuesFingerprintsVectorsForSimilarityCalculation($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1507 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1508 elsif ($FingerprintsVectorA->{Type} =~ /^AlphaNumericalValues$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1509 _ProcessAlphaNumericalValuesFingerprintsVectorsForSimilarityCalculation($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1510 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1511 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1512 croak "Error: ${ClassName}->${ErrorMsg}: Fingerprint vector types $FingerprintsVectorA->{Type} is not valid...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1513 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1514 if ($CalculationMode =~ /^BinaryForm$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1515 _TransformFinalOrderedValuesIntoBitVectorsForSimilarityCalculation($FingerprintsVectorA, $FingerprintsVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1516 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1517 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1518
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1519 # Process fingerprints vectors with ordered numerical values for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1520 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1521 sub _ProcessOrderedNumericalValuesFingerprintsVectorsForSimilarityCalculation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1522 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1523
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1524 $FingerprintsVectorA->{OrderedValuesRef} = \@{$FingerprintsVectorA->{Values}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1525 $FingerprintsVectorB->{OrderedValuesRef} = \@{$FingerprintsVectorB->{Values}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1526 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1527
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1528 # Process fingerprints vectors with numerical values for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1529 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1530 sub _ProcessNumericalValuesFingerprintsVectorsForSimilarityCalculation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1531 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1532
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1533 # Set up unique IDs and values map for each fingerprint vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1534 my($Index, $Value, $ValueID, %UniqueFingerprintsVectorAValueIDValues, %UniqueFingerprintsVectorBValueIDValues, %UniqueFingerprintsVectorsValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1535
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1536 %UniqueFingerprintsVectorAValueIDValues = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1537 %UniqueFingerprintsVectorBValueIDValues = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1538 %UniqueFingerprintsVectorsValueIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1539
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1540 # Go over first vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1541 for $Index (0 .. $#{$FingerprintsVectorA->{ValueIDs}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1542 $ValueID = $FingerprintsVectorA->{ValueIDs}[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1543 $Value = $FingerprintsVectorA->{Values}[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1544 if (exists $UniqueFingerprintsVectorAValueIDValues{$ValueID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1545 $UniqueFingerprintsVectorAValueIDValues{$ValueID} += $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1546 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1547 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1548 $UniqueFingerprintsVectorAValueIDValues{$ValueID} = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1549 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1550 if (!exists $UniqueFingerprintsVectorsValueIDs{$ValueID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1551 $UniqueFingerprintsVectorsValueIDs{$ValueID} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1552 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1553 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1554
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1555 # Go over second vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1556 for $Index (0 .. $#{$FingerprintsVectorB->{ValueIDs}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1557 $ValueID = $FingerprintsVectorB->{ValueIDs}[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1558 $Value = $FingerprintsVectorB->{Values}[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1559 if (exists $UniqueFingerprintsVectorBValueIDValues{$ValueID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1560 $UniqueFingerprintsVectorBValueIDValues{$ValueID} += $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1561 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1562 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1563 $UniqueFingerprintsVectorBValueIDValues{$ValueID} = $Value;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1564 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1565 if (!exists $UniqueFingerprintsVectorsValueIDs{$ValueID}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1566 $UniqueFingerprintsVectorsValueIDs{$ValueID} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1567 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1568 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1569
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1570 # Setup ordered values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1571 my(@UniqueOrderedValueIDs, @OrderedValuesA, @OrderedValuesB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1572
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1573 @UniqueOrderedValueIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1574 @UniqueOrderedValueIDs = sort keys %UniqueFingerprintsVectorsValueIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1575
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1576 @OrderedValuesA = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1577 @OrderedValuesA = map { exists $UniqueFingerprintsVectorAValueIDValues{$_} ? $UniqueFingerprintsVectorAValueIDValues{$_} : 0 } @UniqueOrderedValueIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1578
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1579 @OrderedValuesB = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1580 @OrderedValuesB = map { exists $UniqueFingerprintsVectorBValueIDValues{$_} ? $UniqueFingerprintsVectorBValueIDValues{$_} : 0 } @UniqueOrderedValueIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1581
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1582 $FingerprintsVectorA->{OrderedValuesRef} = \@OrderedValuesA;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1583 $FingerprintsVectorB->{OrderedValuesRef} = \@OrderedValuesB;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1584 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1585
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1586 # Process fingerprints vectors with allpha numerical values for similarity calculations...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1587 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1588 sub _ProcessAlphaNumericalValuesFingerprintsVectorsForSimilarityCalculation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1589 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1590
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1591 # Set up unique IDs and values map for each vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1592 my($Index, $Value, $ValueID, %UniqueFingerprintsVectorAValuesCount, %UniqueFingerprintsVectorBValuesCount, %UniqueFingerprintsVectorsValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1593
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1594 %UniqueFingerprintsVectorAValuesCount = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1595 %UniqueFingerprintsVectorBValuesCount = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1596 %UniqueFingerprintsVectorsValues = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1597
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1598 # Go over first vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1599 for $Value (@{$FingerprintsVectorA->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1600 if (exists $UniqueFingerprintsVectorAValuesCount{$Value}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1601 $UniqueFingerprintsVectorAValuesCount{$Value} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1602 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1603 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1604 $UniqueFingerprintsVectorAValuesCount{$Value} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1605 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1606 if (!exists $UniqueFingerprintsVectorsValues{$Value}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1607 $UniqueFingerprintsVectorsValues{$Value} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1608 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1609 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1610
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1611 # Go over second vector...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1612 for $Value (@{$FingerprintsVectorB->{Values}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1613 if (exists $UniqueFingerprintsVectorBValuesCount{$Value}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1614 $UniqueFingerprintsVectorBValuesCount{$Value} += 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1615 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1616 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1617 $UniqueFingerprintsVectorBValuesCount{$Value} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1618 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1619 if (!exists $UniqueFingerprintsVectorsValues{$Value}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1620 $UniqueFingerprintsVectorsValues{$Value} = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1621 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1622 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1623
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1624 # Setup ordered values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1625 my(@UniqueOrderedValueIDs, @OrderedValuesA, @OrderedValuesB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1626
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1627 @UniqueOrderedValueIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1628 @UniqueOrderedValueIDs = sort keys %UniqueFingerprintsVectorsValues;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1629
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1630 @OrderedValuesA = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1631 @OrderedValuesA = map { exists $UniqueFingerprintsVectorAValuesCount{$_} ? $UniqueFingerprintsVectorAValuesCount{$_} : 0 } @UniqueOrderedValueIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1632
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1633 @OrderedValuesB = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1634 @OrderedValuesB = map { exists $UniqueFingerprintsVectorBValuesCount{$_} ? $UniqueFingerprintsVectorBValuesCount{$_} : 0 } @UniqueOrderedValueIDs;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1635
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1636 $FingerprintsVectorA->{OrderedValuesRef} = \@OrderedValuesA;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1637 $FingerprintsVectorB->{OrderedValuesRef} = \@OrderedValuesB;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1638
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1639 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1640
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1641 # Transform final ordered values array into a BitVector for similarity calculation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1642 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1643 sub _TransformFinalOrderedValuesIntoBitVectorsForSimilarityCalculation {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1644 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1645 my($Index, $Size, $BitVectorA, $BitVectorB, $SkipCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1646
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1647 # Create bit vectors...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1648 $Size = scalar @{$FingerprintsVectorA->{OrderedValuesRef}};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1649
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1650 $FingerprintsVectorA->{BitVector} = new BitVector($Size);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1651 $FingerprintsVectorB->{BitVector} = new BitVector($Size);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1652
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1653 # Set bits...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1654 $SkipCheck = 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1655 for $Index (0 .. ($Size - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1656 if ($FingerprintsVectorA->{OrderedValuesRef}[$Index]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1657 $FingerprintsVectorA->{BitVector}->SetBit($Index, $SkipCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1658 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1659 if ($FingerprintsVectorB->{OrderedValuesRef}[$Index]) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1660 $FingerprintsVectorB->{BitVector}->SetBit($Index, $SkipCheck);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1661 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1662 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1663 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1664
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1665 # Return sum of ordered vector values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1666 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1667 sub _GetSumOfFingerprintsOrderedValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1668 my($FingerprintVector) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1669
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1670 return StatisticsUtil::Sum($FingerprintVector->{OrderedValuesRef});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1671 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1672
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1673 # Return sum of squared ordered vector values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1674 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1675 sub _GetSumOfSquaresOfFingerprintsOrderedValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1676 my($FingerprintVector) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1677
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1678 return StatisticsUtil::SumOfSquares($FingerprintVector->{OrderedValuesRef});
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1679 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1680
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1681 # Return sum of product of correponding ordered vector values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1682 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1683 sub _GetSumOfProductOfFingerprintsOrderedValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1684 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1685 my($Index, $SumProductXaiXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1686
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1687 $SumProductXaiXbi = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1688 for $Index (0 .. $#{$FingerprintsVectorA->{OrderedValuesRef}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1689 $SumProductXaiXbi += $FingerprintsVectorA->{OrderedValuesRef}[$Index] * $FingerprintsVectorB->{OrderedValuesRef}[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1690 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1691 return $SumProductXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1692 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1693
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1694 # Return sum of absolute value of subtraction of correponding ordered vector values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1695 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1696 sub _GetSumOfAbsoluteValueOfSubtractionOfFingerprintsOrderedValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1697 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1698 my($Index, $SumAbsSubtractionXaiXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1699
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1700 $SumAbsSubtractionXaiXbi = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1701 for $Index (0 .. $#{$FingerprintsVectorA->{OrderedValuesRef}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1702 $SumAbsSubtractionXaiXbi += abs($FingerprintsVectorA->{OrderedValuesRef}[$Index] - $FingerprintsVectorB->{OrderedValuesRef}[$Index]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1703 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1704 return $SumAbsSubtractionXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1705 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1706
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1707 # Return sum of squares of subtraction of correponding ordered vector values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1708 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1709 sub _GetSumOfSquaresOfSubtractionOfFingerprintsOrderedValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1710 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1711 my($Index, $SumSquaresSubtractionXaiXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1712
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1713 $SumSquaresSubtractionXaiXbi = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1714 for $Index (0 .. $#{$FingerprintsVectorA->{OrderedValuesRef}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1715 $SumSquaresSubtractionXaiXbi += ($FingerprintsVectorA->{OrderedValuesRef}[$Index] - $FingerprintsVectorB->{OrderedValuesRef}[$Index])**2;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1716 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1717 return $SumSquaresSubtractionXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1718 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1719
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1720 # Return sum of minimum of correponding ordered vector values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1721 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1722 sub _GetSumOfMinimumOfFingerprintsOrderdedValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1723 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1724 my($Index, $SumMinXaiXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1725
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1726 $SumMinXaiXbi = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1727 for $Index (0 .. $#{$FingerprintsVectorA->{OrderedValuesRef}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1728 $SumMinXaiXbi += MathUtil::min($FingerprintsVectorA->{OrderedValuesRef}[$Index], $FingerprintsVectorB->{OrderedValuesRef}[$Index]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1729 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1730 return $SumMinXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1731 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1732
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1733 # Return sum of maximum of correponding ordered vector values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1734 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1735 sub _GetSumOfMaximumOfFingerprintsOrderdedValues {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1736 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1737 my($Index, $SumMaxXaiXbi);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1738
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1739 $SumMaxXaiXbi = 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1740 for $Index (0 .. $#{$FingerprintsVectorA->{OrderedValuesRef}}) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1741 $SumMaxXaiXbi += MathUtil::max($FingerprintsVectorA->{OrderedValuesRef}[$Index], $FingerprintsVectorB->{OrderedValuesRef}[$Index]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1742 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1743 return $SumMaxXaiXbi;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1744 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1745
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1746 # Get number of Na, Nb and Nc bits in vector A and B for BinaryForm calculation...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1747 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1748 sub _GetNumOfIndividualAndCommonSetBits ($$) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1749 my($FingerprintsVectorA, $FingerprintsVectorB) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1750 my($Na, $Nb, $Nc, $Nd, $FingerprintsBitVectorA, $FingerprintsBitVectorB);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1751
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1752 $FingerprintsBitVectorA = $FingerprintsVectorA->{BitVector};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1753 $FingerprintsBitVectorB = $FingerprintsVectorB->{BitVector};
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1754
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1755 # Number of bits set to "1" in A
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1756 $Na = $FingerprintsBitVectorA->GetNumOfSetBits();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1757
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1758 # Number of bits set to "1" in B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1759 $Nb = $FingerprintsBitVectorB->GetNumOfSetBits();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1760
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1761 # Number of bits set to "1" in both A and B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1762 my($NcBitVector);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1763 $NcBitVector = $FingerprintsBitVectorA & $FingerprintsBitVectorB;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1764 $Nc = $NcBitVector->GetNumOfSetBits();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1765
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1766 return ($Na, $Nb, $Nc);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1767 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1768
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1769 # Return a list of supported distance coefficients...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1770 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1771 sub GetSupportedDistanceCoefficients () {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1772
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1773 return @DistanceCoefficients;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1774 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1775
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1776 # Return a list of supported similarity coefficients...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1777 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1778 sub GetSupportedSimilarityCoefficients () {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1779
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1780 return @SimilarityCoefficients;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1781 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1782
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1783 # Return a list of supported distance and similarity coefficients...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1784 #
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1785 sub GetSupportedDistanceAndSimilarityCoefficients () {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1786 my(@DistanceAndSimilarityCoefficients);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1787
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1788 @DistanceAndSimilarityCoefficients = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1789 push @DistanceAndSimilarityCoefficients, @DistanceCoefficients;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1790 push @DistanceAndSimilarityCoefficients, @SimilarityCoefficients;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1791
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1792 return sort @DistanceAndSimilarityCoefficients;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1793 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1794
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1795 # Is it a fingerprints vector object?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1796 sub IsFingerprintsVector ($) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1797 my($Object) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1798
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1799 return _IsFingerprintsVector($Object);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1800 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1801
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1802 # Is it a fingerprints vector object?
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1803 sub _IsFingerprintsVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1804 my($Object) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1805
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1806 return (Scalar::Util::blessed($Object) && $Object->isa($ClassName)) ? 1 : 0;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1807 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1808
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1809 # Return a string containing vector values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1810 sub StringifyFingerprintsVector {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1811 my($This) = @_;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1812 my($FingerprintsVectorString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1813
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1814 # Set type, values and value IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1815 my($NumOfValues, $ValuesString, $NumOfValueIDs, $ValueIDsString, $MaxValuesToStringify);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1816
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1817 $NumOfValues = $This->GetNumOfValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1818 $MaxValuesToStringify = 500;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1819
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1820 if ($NumOfValues < $MaxValuesToStringify) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1821 # Append all values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1822 $ValuesString = $NumOfValues ? join ' ', @{$This->{Values}} : 'None';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1823 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1824 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1825 # Truncate values...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1826 my($Index, @Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1827 for $Index (0 .. ($MaxValuesToStringify - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1828 push @Values, $This->{Values}[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1829 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1830 $ValuesString = join(' ', @Values) . " ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1831 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1832
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1833 $NumOfValueIDs = $This->GetNumOfValueIDs();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1834 if ($NumOfValueIDs < $MaxValuesToStringify) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1835 # Append all valueIDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1836 $ValueIDsString = $NumOfValueIDs ? join ' ', @{$This->{ValueIDs}} : 'None';
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1837 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1838 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1839 # Truncate value IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1840 my($Index, @ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1841 @ValueIDs = ();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1842 for $Index (0 .. ($MaxValuesToStringify - 1)) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1843 push @ValueIDs, $This->{ValueIDs}[$Index];
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1844 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1845 $ValueIDsString = join(' ', @ValueIDs) . " ...";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1846 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1847
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1848 $FingerprintsVectorString = "Type: $This->{Type}; NumOfValues: $NumOfValues";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1849 if ($This->{Type} =~ /^(OrderedNumericalValues|NumericalValues)$/i) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1850 my($NumOfNonZeroValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1851 $NumOfNonZeroValues = $This->GetNumOfNonZeroValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1852 $FingerprintsVectorString .= "; NumOfNonZeroValues: $NumOfNonZeroValues";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1853 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1854
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1855 # Append all the values and value IDs...
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1856 if ($NumOfValues < $MaxValuesToStringify) {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1857 $FingerprintsVectorString .= "; Values: <$ValuesString>; NumOfValueIDs: $NumOfValueIDs; ValueIDs: <$ValueIDsString>";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1858 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1859 else {
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1860 $FingerprintsVectorString .= "; Values (Truncated after $MaxValuesToStringify): <$ValuesString>; NumOfValueIDs: $NumOfValueIDs; ValueIDs (Truncated after $MaxValuesToStringify): <$ValueIDsString>";
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1861 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1862
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1863 return $FingerprintsVectorString;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1864 }
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1865
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1866 1;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1867
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1868 __END__
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1869
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1870 =head1 NAME
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1871
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1872 FingerprintsVector
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1873
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1874 =head1 SYNOPSIS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1875
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1876 use Fingerprints::FingerprintsVector;
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1877
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1878 use Fingerprints::FingerprintsVector qw(:all);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1879
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1880 =head1 DESCRIPTION
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1881
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1882 B<FingerprintsVector> class provides the following methods:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1883
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1884 new, AddValueIDs, AddValues, CityBlockDistanceCoefficient,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1885 CosineSimilarityCoefficient, CzekanowskiSimilarityCoefficient,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1886 DiceSimilarityCoefficient, EuclideanDistanceCoefficient, GetDescription,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1887 GetFingerprintsVectorString, GetID, GetIDsAndValuesPairsString,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1888 GetIDsAndValuesString, GetNumOfNonZeroValues, GetNumOfValueIDs, GetNumOfValues,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1889 GetSupportedDistanceAndSimilarityCoefficients, GetSupportedDistanceCoefficients,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1890 GetSupportedSimilarityCoefficients, GetType, GetValue, GetValueID, GetValueIDs,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1891 GetValueIDsString, GetValues, GetValuesAndIDsPairsString, GetValuesAndIDsString,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1892 GetValuesString, GetVectorType, HammingDistanceCoefficient, IsFingerprintsVector,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1893 JaccardSimilarityCoefficient, ManhattanDistanceCoefficient,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1894 NewFromIDsAndValuesPairsString, NewFromIDsAndValuesString,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1895 NewFromValuesAndIDsPairsString, NewFromValuesAndIDsString, NewFromValuesString,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1896 OchiaiSimilarityCoefficient, SetDescription, SetID, SetType, SetValue, SetValueID,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1897 SetValueIDs, SetValues, SetVectorType, SoergelDistanceCoefficient,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1898 SorensonSimilarityCoefficient, StringifyFingerprintsVector,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1899 TanimotoSimilarityCoefficient
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1900
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1901 The methods available to create fingerprints vector from strings and to calculate similarity
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1902 and distance coefficients between two vectors can also be invoked as class functions.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1903
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1904 B<FingerprintsVector> class provides support to perform comparison between vectors
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1905 containing three different types of values:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1906
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1907 Type I: OrderedNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1908
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1909 o Size of two vectors are same
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1910 o Vectors contain real values in a specific order. For example: MACCS keys
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1911 count, Topological pharmacophore atom pairs and so on.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1912
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1913 Type II: UnorderedNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1914
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1915 o Size of two vectors might not be same
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1916 o Vectors contain unordered real value identified by value IDs. For example:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1917 Topological atom pairs, Topological atom torsions and so on
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1918
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1919 Type III: AlphaNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1920
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1921 o Size of two vectors might not be same
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1922 o Vectors contain unordered alphanumerical values. For example: Extended
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1923 connectivity fingerprints, atom neighborhood fingerprints.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1924
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1925 Before performing similarity or distance calculations between vectors containing UnorderedNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1926 or AlphaNumericalValues, the vectors are transformed into vectors containing unique OrderedNumericalValues
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1927 using value IDs for UnorderedNumericalValues and values itself for AlphaNumericalValues.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1928
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1929 Three forms of similarity and distance calculation between two vectors, specified using B<CalculationMode>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1930 option, are supported: I<AlgebraicForm, BinaryForm or SetTheoreticForm>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1931
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1932 For I<BinaryForm>, the ordered list of processed final vector values containing the value or
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1933 count of each unique value type is simply converted into a binary vector containing 1s and 0s
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1934 corresponding to presence or absence of values before calculating similarity or distance between
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1935 two vectors.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1936
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1937 For two fingerprint vectors A and B of same size containing OrderedNumericalValues, let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1938
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1939 N = Number values in A or B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1940
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1941 Xa = Values of vector A
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1942 Xb = Values of vector B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1943
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1944 Xai = Value of ith element in A
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1945 Xbi = Value of ith element in B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1946
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1947 SUM = Sum of i over N values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1948
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1949 For SetTheoreticForm of calculation between two vectors, let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1950
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1951 SetIntersectionXaXb = SUM ( MIN ( Xai, Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1952 SetDifferenceXaXb = SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1953
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1954 For BinaryForm of calculation between two vectors, let:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1955
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1956 Na = Number of bits set to "1" in A = SUM ( Xai )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1957 Nb = Number of bits set to "1" in B = SUM ( Xbi )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1958 Nc = Number of bits set to "1" in both A and B = SUM ( Xai * Xbi )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1959 Nd = Number of bits set to "0" in both A and B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1960 = SUM ( 1 - Xai - Xbi + Xai * Xbi)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1961
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1962 N = Number of bits set to "1" or "0" in A or B = Size of A or B = Na + Nb - Nc + Nd
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1963
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1964 Additionally, for BinaryForm various values also correspond to:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1965
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1966 Na = | Xa |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1967 Nb = | Xb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1968 Nc = | SetIntersectionXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1969 Nd = N - | SetDifferenceXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1970
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1971 | SetDifferenceXaXb | = N - Nd = Na + Nb - Nc + Nd - Nd = Na + Nb - Nc
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1972 = | Xa | + | Xb | - | SetIntersectionXaXb |
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1973
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1974 Various similarity and distance coefficients [ Ref 40, Ref 62, Ref 64 ] for a pair of vectors A and B
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1975 in I<AlgebraicForm, BinaryForm and SetTheoreticForm> are defined as follows:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1976
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1977 B<CityBlockDistance>: ( same as HammingDistance and ManhattanDistance)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1978
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1979 I<AlgebraicForm>: SUM ( ABS ( Xai - Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1980
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1981 I<BinaryForm>: ( Na - Nc ) + ( Nb - Nc ) = Na + Nb - 2 * Nc
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1982
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1983 I<SetTheoreticForm>: | SetDifferenceXaXb | - | SetIntersectionXaXb | = SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1984
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1985 B<CosineSimilarity>: ( same as OchiaiSimilarityCoefficient)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1986
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1987 I<AlgebraicForm>: SUM ( Xai * Xbi ) / SQRT ( SUM ( Xai ** 2) * SUM ( Xbi ** 2) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1988
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1989 I<BinaryForm>: Nc / SQRT ( Na * Nb)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1990
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1991 I<SetTheoreticForm>: | SetIntersectionXaXb | / SQRT ( |Xa| * |Xb| ) = SUM ( MIN ( Xai, Xbi ) ) / SQRT ( SUM ( Xai ) * SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1992
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1993 B<CzekanowskiSimilarity>: ( same as DiceSimilarity and SorensonSimilarity)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1994
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1995 I<AlgebraicForm>: ( 2 * ( SUM ( Xai * Xbi ) ) ) / ( SUM ( Xai ** 2) + SUM ( Xbi **2 ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1996
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1997 I<BinaryForm>: 2 * Nc / ( Na + Nb )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1998
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
1999 I<SetTheoreticForm>: 2 * | SetIntersectionXaXb | / ( |Xa| + |Xb| ) = 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2000
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2001 B<DiceSimilarity>: ( same as CzekanowskiSimilarity and SorensonSimilarity)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2002
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2003 I<AlgebraicForm>: ( 2 * ( SUM ( Xai * Xbi ) ) ) / ( SUM ( Xai ** 2) + SUM ( Xbi **2 ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2004
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2005 I<BinaryForm>: 2 * Nc / ( Na + Nb )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2006
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2007 I<SetTheoreticForm>: 2 * | SetIntersectionXaXb | / ( |Xa| + |Xb| ) = 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2008
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2009 B<EuclideanDistance>:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2010
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2011 I<AlgebraicForm>: SQRT ( SUM ( ( ( Xai - Xbi ) ** 2 ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2012
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2013 I<BinaryForm>: SQRT ( ( Na - Nc ) + ( Nb - Nc ) ) = SQRT ( Na + Nb - 2 * Nc )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2014
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2015 I<SetTheoreticForm>: SQRT ( | SetDifferenceXaXb | - | SetIntersectionXaXb | ) = SQRT ( SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2016
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2017 B<HammingDistance>: ( same as CityBlockDistance and ManhattanDistance)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2018
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2019 I<AlgebraicForm>: SUM ( ABS ( Xai - Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2020
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2021 I<BinaryForm>: ( Na - Nc ) + ( Nb - Nc ) = Na + Nb - 2 * Nc
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2022
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2023 I<SetTheoreticForm>: | SetDifferenceXaXb | - | SetIntersectionXaXb | = SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2024
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2025 B<JaccardSimilarity>: ( same as TanimotoSimilarity)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2026
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2027 I<AlgebraicForm>: SUM ( Xai * Xbi ) / ( SUM ( Xai ** 2 ) + SUM ( Xbi ** 2 ) - SUM ( Xai * Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2028
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2029 I<BinaryForm>: Nc / ( ( Na - Nc ) + ( Nb - Nc ) + Nc ) = Nc / ( Na + Nb - Nc )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2030
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2031 I<SetTheoreticForm>: | SetIntersectionXaXb | / | SetDifferenceXaXb | = SUM ( MIN ( Xai, Xbi ) ) / ( SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2032
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2033 B<ManhattanDistance>: ( same as CityBlockDistance and HammingDistance)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2034
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2035 I<AlgebraicForm>: SUM ( ABS ( Xai - Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2036
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2037 I<BinaryForm>: ( Na - Nc ) + ( Nb - Nc ) = Na + Nb - 2 * Nc
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2038
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2039 I<SetTheoreticForm>: | SetDifferenceXaXb | - | SetIntersectionXaXb | = SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2040
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2041 B<OchiaiSimilarity>: ( same as CosineSimilarity)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2042
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2043 I<AlgebraicForm>: SUM ( Xai * Xbi ) / SQRT ( SUM ( Xai ** 2) * SUM ( Xbi ** 2) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2044
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2045 I<BinaryForm>: Nc / SQRT ( Na * Nb)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2046
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2047 I<SetTheoreticForm>: | SetIntersectionXaXb | / SQRT ( |Xa| * |Xb| ) = SUM ( MIN ( Xai, Xbi ) ) / SQRT ( SUM ( Xai ) * SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2048
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2049 B<SorensonSimilarity>: ( same as CzekanowskiSimilarity and DiceSimilarity)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2050
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2051 I<AlgebraicForm>: ( 2 * ( SUM ( Xai * Xbi ) ) ) / ( SUM ( Xai ** 2) + SUM ( Xbi **2 ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2052
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2053 I<BinaryForm>: 2 * Nc / ( Na + Nb )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2054
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2055 I<SetTheoreticForm>: 2 * | SetIntersectionXaXb | / ( |Xa| + |Xb| ) = 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2056
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2057 B<SoergelDistance>:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2058
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2059 I<AlgebraicForm>: SUM ( ABS ( Xai - Xbi ) ) / SUM ( MAX ( Xai, Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2060
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2061 I<BinaryForm>: 1 - Nc / ( Na + Nb - Nc ) = ( Na + Nb - 2 * Nc ) / ( Na + Nb - Nc )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2062
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2063 I<SetTheoreticForm>: ( | SetDifferenceXaXb | - | SetIntersectionXaXb | ) / | SetDifferenceXaXb | = ( SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2064
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2065 B<TanimotoSimilarity>: ( same as JaccardSimilarity)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2066
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2067 I<AlgebraicForm>: SUM ( Xai * Xbi ) / ( SUM ( Xai ** 2 ) + SUM ( Xbi ** 2 ) - SUM ( Xai * Xbi ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2068
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2069 I<BinaryForm>: Nc / ( ( Na - Nc ) + ( Nb - Nc ) + Nc ) = Nc / ( Na + Nb - Nc )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2070
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2071 I<SetTheoreticForm>: | SetIntersectionXaXb | / | SetDifferenceXaXb | = SUM ( MIN ( Xai, Xbi ) ) / ( SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) ) )
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2072
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2073 =head2 METHODS
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2074
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2075 =over 4
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2076
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2077 =item B<new>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2078
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2079 $FPVector = new Fingerprints::FingerprintsVector(%NamesAndValues);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2080
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2081 Using specified I<FingerprintsVector> property names and values hash, B<new> method creates
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2082 a new object and returns a reference to newly created B<FingerprintsVectorsVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2083 object. By default, the following properties are initialized:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2084
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2085 Type = ''
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2086 @{Values} = ()
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2087 @{ValuesIDs} = ()
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2088
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2089 Examples:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2090
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2091 $FPVector = new Fingerprints::FingerprintsVector('Type' => 'OrderedNumericalValues',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2092 'Values' => [1, 2, 3, 4]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2093 $FPVector = new Fingerprints::FingerprintsVector('Type' => 'NumericalValues',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2094 'Values' => [10, 22, 33, 44],
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2095 'ValueIDs' => ['ID1', 'ID2', 'ID3', 'ID4']);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2096 $FPVector = new Fingerprints::FingerprintsVector('Type' => 'AlphaNumericalValues',
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2097 'Values' => ['a1', 2, 'a3', 4]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2098
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2099 =item B<AddValueIDs>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2100
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2101 $FingerprintsVector->AddValueIDs($ValueIDsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2102 $FingerprintsVector->AddValueIDs(@ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2103
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2104 Adds specified I<ValueIDs> to I<FingerprintsVector> and returns I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2105
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2106 =item B<AddValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2107
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2108 $FingerprintsVector->AddValues($ValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2109 $FingerprintsVector->AddValues(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2110 $FingerprintsVector->AddValues($Vector);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2111
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2112 Adds specified I<Values> to I<FingerprintsVector> and returns I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2113
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2114 =item B<CityBlockDistanceCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2115
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2116 $Value = $FingerprintsVector->CityBlockDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2117 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2118 $Value = Fingerprints::FingerprintsVector::CityBlockDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2119 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2120 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2121
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2122 Returns value of I<CityBlock> distance coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2123 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2124
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2125 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2126 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2127
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2128 =item B<CosineSimilarityCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2129
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2130 $Value = $FingerprintsVector->CosineSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2131 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2132 $Value = Fingerprints::FingerprintsVector::CosineSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2133 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2134 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2135
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2136 Returns value of I<Cosine> similarity coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2137 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2138
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2139 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2140 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2141
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2142 =item B<CzekanowskiSimilarityCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2143
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2144 $Value = $FingerprintsVector->CzekanowskiSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2145 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2146 $Value = Fingerprints::FingerprintsVector::CzekanowskiSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2147 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2148 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2149
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2150 Returns value of I<Czekanowski> similarity coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2151 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2152
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2153 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2154 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2155
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2156 =item B<DiceSimilarityCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2157
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2158 $Value = $FingerprintsVector->DiceSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2159 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2160 $Value = Fingerprints::FingerprintsVector::DiceSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2161 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2162 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2163
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2164 Returns value of I<Dice> similarity coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2165 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2166
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2167 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2168 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2169
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2170 =item B<EuclideanDistanceCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2171
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2172 $Value = $FingerprintsVector->EuclideanDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2173 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2174 $Value = Fingerprints::FingerprintsVector::EuclideanDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2175 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2176 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2177
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2178 Returns value of I<Euclidean> distance coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2179 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2180
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2181 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2182 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2183
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2184 =item B<GetDescription>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2185
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2186 $Description = $FingerprintsVector->GetDescription();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2187
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2188 Returns a string containing description of fingerprints vector.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2189
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2190 =item B<GetFingerprintsVectorString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2191
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2192 $FPString = $FingerprintsVector->GetFingerprintsVectorString($Format);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2193
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2194 Returns a B<FingerprintsString> containing vector values and/or IDs in I<FingerprintsVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2195 corresponding to specified I<Format>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2196
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2197 Possible I<Format> values: I<IDsAndValuesString, IDsAndValues, IDsAndValuesPairsString,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2198 IDsAndValuesPairs, ValuesAndIDsString, ValuesAndIDs, ValuesAndIDsPairsString, ValuesAndIDsPairs,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2199 ValueIDsString, ValueIDs, ValuesString, or Values>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2200
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2201 =item B<GetID>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2202
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2203 $ID = $FingerprintsVector->GetID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2204
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2205 Returns I<ID> of I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2206
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2207 =item B<GetVectorType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2208
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2209 $VectorType = $FingerprintsVector->GetVectorType();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2210
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2211 Returns I<VectorType> of I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2212
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2213 =item B<GetIDsAndValuesPairsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2214
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2215 $IDsValuesPairsString = $FingerprintsVector->GetIDsAndValuesPairsString();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2216
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2217 Returns I<FingerprintsVector> value IDs and values as space delimited ID/value pair
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2218 string.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2219
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2220 =item B<GetIDsAndValuesString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2221
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2222 $IDsValuesString = $FingerprintsVector->GetIDsAndValuesString();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2223
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2224 Returns I<FingerprintsVector> value IDs and values as string containing space delimited IDs followed by
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2225 values with semicolon as IDs and values delimiter.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2226
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2227 =item B<GetNumOfNonZeroValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2228
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2229 $NumOfNonZeroValues = $FingerprintsVector->GetNumOfNonZeroValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2230
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2231 Returns number of non-zero values in I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2232
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2233 =item B<GetNumOfValueIDs>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2234
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2235 $NumOfValueIDs = $FingerprintsVector->GetNumOfValueIDs();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2236
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2237 Returns number of value IDs I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2238
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2239 =item B<GetNumOfValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2240
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2241 $NumOfValues = $FingerprintsVector->GetNumOfValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2242
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2243 Returns number of values I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2244
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2245 =item B<GetSupportedDistanceAndSimilarityCoefficients>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2246
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2247 @SupportedDistanceAndSimilarityCoefficientsReturn =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2248 Fingerprints::FingerprintsVector::GetSupportedDistanceAndSimilarityCoefficients();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2249
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2250 Returns an array containing names of supported distance and similarity coefficients.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2251
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2252 =item B<GetSupportedDistanceCoefficients>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2253
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2254 @SupportedDistanceCoefficientsReturn =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2255 Fingerprints::FingerprintsVector::GetSupportedDistanceCoefficients();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2256
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2257 Returns an array containing names of supported disyance coefficients.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2258
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2259 =item B<GetSupportedSimilarityCoefficients>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2260
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2261 @SupportedSimilarityCoefficientsReturn =
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2262 Fingerprints::FingerprintsVector::GetSupportedSimilarityCoefficients();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2263
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2264 Returns an array containing names of supported similarity coefficients.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2265
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2266 =item B<GetType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2267
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2268 $VectorType = $FingerprintsVector->GetType();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2269
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2270 Returns I<FingerprintsVector> vector type.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2271
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2272 =item B<GetValue>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2273
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2274 $Value = $FingerprintsVector->GetValue($Index);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2275
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2276 Returns fingerprints vector B<Value> specified using I<Index> starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2277
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2278 =item B<GetValueID>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2279
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2280 $ValueID = $FingerprintsVector->GetValueID();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2281
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2282 Returns fingerprints vector B<ValueID> specified using I<Index> starting at 0.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2283
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2284 =item B<GetValueIDs>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2285
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2286 $ValueIDs = $FingerprintsVector->GetValueIDs();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2287 @ValueIDs = $FingerprintsVector->GetValueIDs();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2288
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2289 Returns fingerprints vector B<ValueIDs> as an array or reference to an array.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2290
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2291 =item B<GetValueIDsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2292
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2293 $ValueIDsString = $FingerprintsVector->GetValueIDsString();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2294
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2295 Returns fingerprints vector B<ValueIDsString> with value IDs delimited by space.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2296
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2297 =item B<GetValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2298
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2299 $ValuesRef = $FingerprintsVector->GetValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2300 @Values = $FingerprintsVector->GetValues();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2301
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2302 Returns fingerprints vector B<Values> as an array or reference to an array.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2303
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2304 =item B<GetValuesAndIDsPairsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2305
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2306 $ValuesIDsPairsString = $FingerprintsVector->GetValuesAndIDsPairsString();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2307
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2308 Returns I<FingerprintsVector> value and value IDs as space delimited ID/value pair
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2309 string.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2310
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2311 =item B<GetValuesAndIDsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2312
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2313 $ValuesIDsString = $FingerprintsVector->GetValuesAndIDsString();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2314
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2315 Returns I<FingerprintsVector> values and value IDs as string containing space delimited IDs followed by
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2316 values with semicolon as IDs and values delimiter.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2317
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2318 =item B<GetValuesString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2319
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2320 $Return = $FingerprintsVector->GetValuesString();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2321
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2322 Returns I<FingerprintsVector> values as space delimited string.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2323
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2324 =item B<HammingDistanceCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2325
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2326 $Value = $FingerprintsVector->HammingDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2327 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2328 $Value = Fingerprints::FingerprintsVector::HammingDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2329 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2330 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2331
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2332 Returns value of I<Hamming> distance coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2333 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2334
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2335 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2336 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2337
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2338 =item B<IsFingerprintsVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2339
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2340 $Status = Fingerprints::FingerprintsVector::IsFingerprintsVector($Object);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2341
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2342 Returns 1 or 0 based on whether I<Object> is a I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2343
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2344 =item B<JaccardSimilarityCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2345
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2346 $Value = $FingerprintsVector->JaccardSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2347 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2348 $Value = Fingerprints::FingerprintsVector::JaccardSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2349 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2350 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2351
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2352 Returns value of I<Jaccard> similarity coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2353 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2354
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2355 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2356 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2357
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2358 =item B<ManhattanDistanceCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2359
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2360 $Value = $FingerprintsVector->ManhattanDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2361 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2362 $Value = Fingerprints::FingerprintsVector::ManhattanDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2363 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2364 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2365
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2366 Returns value of I<Manhattan> distance coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2367 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2368
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2369 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2370 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2371
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2372 =item B<NewFromIDsAndValuesPairsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2373
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2374 $FingerprintsVector = $FingerprintsVector->NewFromIDsAndValuesPairsString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2375 $ValuesType, $IDsAndValuesPairsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2376 $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromIDsAndValuesPairsString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2377 $ValuesType, $IDsAndValuesPairsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2378
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2379 Creates a new I<FingerprintsVector> of I<ValuesType> using I<IDsAndValuesPairsString> containing
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2380 space delimited value IDs and values pairs and returns new B<FingerprintsVector> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2381 Possible I<ValuesType> values: I<OrderedNumericalValues, NumericalValues, or AlphaNumericalValues>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2382
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2383 =item B<NewFromIDsAndValuesString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2384
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2385 $FingerprintsVector = $FingerprintsVector->NewFromIDsAndValuesString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2386 $ValuesType, $IDsAndValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2387 $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromIDsAndValuesString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2388 $ValuesType, $IDsAndValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2389
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2390 Creates a new I<FingerprintsVector> of I<ValuesType> using I<IDsAndValuesString> containing
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2391 semicolon delimited value IDs string followed by values strings and returns new B<FingerprintsVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2392 object. The values within value and value IDs tring are delimited by spaces. Possible I<ValuesType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2393 values: I<OrderedNumericalValues, NumericalValues, or AlphaNumericalValues>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2394
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2395 =item B<NewFromValuesAndIDsPairsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2396
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2397 $FingerprintsVector = $FingerprintsVector->NewFromValuesAndIDsPairsString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2398 $ValuesType, $ValuesAndIDsPairsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2399 $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromValuesAndIDsPairsString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2400 $ValuesType, $ValuesAndIDsPairsString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2401
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2402 Creates a new I<FingerprintsVector> of I<ValuesType> using I<ValuesAndIDsPairsString> containing
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2403 space delimited value and value IDs pairs and returns new B<FingerprintsVector> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2404 Possible I<ValuesType> values: I<OrderedNumericalValues, NumericalValues, or AlphaNumericalValues>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2405
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2406 =item B<NewFromValuesAndIDsString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2407
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2408 $FingerprintsVector = $FingerprintsVector->NewFromValuesAndIDsString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2409 $ValuesType, $IDsAndValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2410 $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromValuesAndIDsString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2411 $ValuesType, $IDsAndValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2412
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2413 Creates a new I<FingerprintsVector> of I<ValuesType> using I<ValuesAndIDsString> containing
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2414 semicolon delimited values string followed by value IDs strings and returns new B<FingerprintsVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2415 object. The values within values and value IDs tring are delimited by spaces. Possible I<ValuesType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2416 values: I<OrderedNumericalValues, NumericalValues, or AlphaNumericalValues>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2417
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2418 =item B<NewFromValuesString>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2419
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2420 $FingerprintsVector = $FingerprintsVector->NewFromValuesString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2421 $ValuesType, $ValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2422 $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromValuesString(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2423 $ValuesType, $ValuesString);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2424
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2425 Creates a new I<FingerprintsVector> of I<ValuesType> using I<ValuesString> containing space
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2426 delimited values string and returns new B<FingerprintsVector> object. The values within values
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2427 and value IDs tring are delimited by spaces. Possible I<ValuesType> values: I<OrderedNumericalValues,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2428 NumericalValues, or AlphaNumericalValues>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2429
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2430 =item B<OchiaiSimilarityCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2431
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2432 $Value = $FingerprintsVector->OchiaiSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2433 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2434 $Value = Fingerprints::FingerprintsVector::OchiaiSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2435 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2436 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2437
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2438 Returns value of I<Ochiai> similarity coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2439 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2440
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2441 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2442 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2443
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2444 =item B<SetDescription>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2445
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2446 $FingerprintsVector->SetDescription($Description);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2447
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2448 Sets I<Description> of fingerprints vector and returns I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2449
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2450 =item B<SetID>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2451
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2452 $FingerprintsVector->SetID($ID);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2453
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2454 Sets I<ID> of fingerprints vector and returns I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2455
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2456 =item B<SetVectorType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2457
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2458 $FingerprintsVector->SetVectorType($VectorType);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2459
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2460 Sets I<VectorType> of fingerprints vector and returns I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2461
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2462 =item B<SetType>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2463
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2464 $FingerprintsVector->SetType($Type);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2465
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2466 Sets I<FingerprintsVector> values I<Type> and returns I<FingerprintsVector>. Possible I<Type>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2467 values: I<OrderedNumericalValues, NumericalValues, or AlphaNumericalValues>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2468
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2469 During calculation of similarity and distance coefficients between two I<FingerprintsVectors>, the
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2470 following conditions apply to vector type, size, value and value IDs:
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2471
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2472 o For OrderedNumericalValues type, both vectors must be of the same size
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2473 and contain similar types of numerical values in the same order.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2474
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2475 o For NumericalValues type, vector value IDs for both vectors must be
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2476 specified; however, their size and order of IDs and numerical values may
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2477 be different. For each vector, value IDs must correspond to vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2478
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2479 o For AlphaNumericalValues type, vectors may contain both numerical and
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2480 alphanumerical values and their sizes may be different.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2481
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2482 =item B<SetValue>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2483
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2484 $FingerprintsVector->SetValue($Index, $Value, [$SkipIndexCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2485
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2486 Sets a I<FingerprintsVector> value specified by I<Index> starting at 0 to I<Value> along with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2487 optional index range check and returns I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2488
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2489 =item B<SetValueID>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2490
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2491 $FingerprintsVector->SetValueID($Index, $ValueID, [$SkipIndexCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2492
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2493 Sets a I<FingerprintsVector> value ID specified by I<Index> starting at 0 to I<ValueID> along with
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2494 optional index range check and returns I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2495
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2496 =item B<SetValueIDs>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2497
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2498 $FingerprintsVector->SetValueIDs($ValueIDsRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2499 $FingerprintsVector->SetValueIDs(@ValueIDs);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2500
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2501 Sets I<FingerprintsVector> value IDs to specified I<ValueIDs> and returns I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2502
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2503 =item B<SetValues>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2504
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2505 $FingerprintsVector->SetValues($ValuesRef);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2506 $FingerprintsVector->SetValues(@Values);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2507
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2508 Sets I<FingerprintsVector> value to specified I<Values> and returns I<FingerprintsVector>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2509
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2510 =item B<SoergelDistanceCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2511
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2512 $Value = $FingerprintsVector->SoergelDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2513 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2514 $Value = Fingerprints::FingerprintsVector::SoergelDistanceCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2515 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2516 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2517
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2518 Returns value of I<Soergel> distance coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2519 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2520
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2521 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2522 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2523
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2524 =item B<SorensonSimilarityCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2525
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2526 $Value = $FingerprintsVector->SorensonSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2527 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2528 $Value = Fingerprints::FingerprintsVector::SorensonSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2529 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2530 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2531
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2532 Returns value of I<Sorenson> similarity coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2533 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2534
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2535 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2536 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2537
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2538 =item B<TanimotoSimilarityCoefficient>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2539
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2540 $Value = $FingerprintsVector->TanimotoSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2541 $OtherFingerprintVector, [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2542 $Value = Fingerprints::FingerprintsVector::TanimotoSimilarityCoefficient(
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2543 $FingerprintsVectorA, $FingerprintVectorB,
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2544 [$CalculationMode, $SkipValuesCheck]);
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2545
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2546 Returns value of I<Tanimoto> similarity coefficient between two I<FingerprintsVectors> using
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2547 optionally specified I<CalculationMode> and optional checking of vector values.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2548
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2549 Possible I<CalculationMode> values: I<AlgebraicForm, BinaryForm or SetTheoreticForm>. Default
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2550 I<CalculationMode> value: I<AlgebraicForm>. Default I<SkipValuesCheck> value: I<0>.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2551
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2552 =item B<StringifyFingerprintsVector>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2553
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2554 $String = $FingerprintsVector->StringifyFingerprintsVector();
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2555
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2556 Returns a string containing information about I<FingerprintsVector> object.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2557
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2558 =back
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2559
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2560 =head1 AUTHOR
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2561
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2562 Manish Sud <msud@san.rr.com>
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2563
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2564 =head1 SEE ALSO
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2565
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2566 BitVector.pm, FingerprintsStringUtil.pm, FingerprintsBitVector.pm, Vector.pm
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2567
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2568 =head1 COPYRIGHT
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2569
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2570 Copyright (C) 2015 Manish Sud. All rights reserved.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2571
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2572 This file is part of MayaChemTools.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2573
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2574 MayaChemTools is free software; you can redistribute it and/or modify it under
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2575 the terms of the GNU Lesser General Public License as published by the Free
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2576 Software Foundation; either version 3 of the License, or (at your option)
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2577 any later version.
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2578
4816e4a8ae95 Uploaded
deepakjadmin
parents:
diff changeset
2579 =cut