diff mayachemtools/lib/Fingerprints/FingerprintsStringUtil.pm @ 0:73ae111cf86f draft

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 11:55:01 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mayachemtools/lib/Fingerprints/FingerprintsStringUtil.pm	Wed Jan 20 11:55:01 2016 -0500
@@ -0,0 +1,730 @@
+package Fingerprints::FingerprintsStringUtil;
+#
+# $RCSfile: FingerprintsStringUtil.pm,v $
+# $Date: 2015/02/28 20:48:54 $
+# $Revision: 1.24 $
+#
+# Author: Manish Sud <msud@san.rr.com>
+#
+# Copyright (C) 2015 Manish Sud. All rights reserved.
+#
+# This file is part of MayaChemTools.
+#
+# MayaChemTools is free software; you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation; either version 3 of the License, or (at your option) any
+# later version.
+#
+# MayaChemTools is distributed in the hope that it will be useful, but without
+# any warranty; without even the implied warranty of merchantability of fitness
+# for a particular purpose.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
+# write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
+# Boston, MA, 02111-1307, USA.
+#
+
+use strict;
+use Exporter;
+use Carp;
+use TextUtil ();
+use Fingerprints::FingerprintsBitVector;
+use Fingerprints::FingerprintsVector;
+
+use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw(AreFingerprintsStringValuesValid GenerateFingerprintsString GenerateFingerprintsBitVectorString GenerateFingerprintsVectorString GetFingerprintsStringTypeAndDescription GetDefaultBitsOrder GetDefaultBitStringFormat GetDefaultVectorStringFormat GetFingeprintsStringDelimiter GetFingerprintsStringValues ParseFingerprintsString ParseFingerprintsBitVectorString ParseFingerprintsVectorString);
+
+%EXPORT_TAGS = (all  => [@EXPORT, @EXPORT_OK]);
+
+# Fingerprint string values delimiter...
+my($FPStringDelim) = ';';
+
+# Generate fingerprints string...
+#
+sub GenerateFingerprintsString {
+  my($FingerprintsObject) = @_;
+  my($VectorType);
+
+  $VectorType = $FingerprintsObject->GetVectorType();
+
+  VECTORTYPE : {
+    if ($VectorType =~ /^FingerprintsBitVector$/i) { return GenerateFingerprintsBitVectorString(@_); last VECTORTYPE; }
+    if ($VectorType =~ /^FingerprintsVector$/i) { return GenerateFingerprintsVectorString(@_); last VECTORTYPE; }
+    croak "Error: FingerprintsStringUtil::GenerateFingerprintsString: Fingerprints object vector type, $VectorType, is not supported. Valid values: FingerprintsBitVector or FingerprintsVector...";
+  }
+  return '';
+}
+
+# Generate fingerprints bit vector string...
+#
+sub GenerateFingerprintsBitVectorString {
+  my($FingerprintsObject, $BitStringFormat, $BitsOrder) = @_;
+  my($FingerprintsString, $FingerprintsBitVector, @FingerprintsStringValues);
+
+  if (!$BitStringFormat) { $BitStringFormat = GetDefaultBitStringFormat(); }
+  if (!$BitsOrder) {$BitsOrder = GetDefaultBitsOrder(); }
+
+  $FingerprintsString = '';
+  $FingerprintsBitVector = Fingerprints::FingerprintsBitVector::IsFingerprintsBitVector($FingerprintsObject) ? $FingerprintsObject : $FingerprintsObject->GetFingerprintsBitVector();
+
+  # Use specified size instead of size: it corresponds to actual size of the fingerprints bit vector;
+  # size reflects actual internal size including any padding.
+  #
+
+  @FingerprintsStringValues = ();
+  push @FingerprintsStringValues, ($FingerprintsObject->GetVectorType(), _GetFingerprintsDescription($FingerprintsObject), $FingerprintsBitVector->GetSpecifiedSize(), $BitStringFormat, $BitsOrder);
+
+  $FingerprintsString = join("${FPStringDelim}",  @FingerprintsStringValues) . "${FPStringDelim}" . _GetFingerprintBitVectorString($FingerprintsBitVector, $BitStringFormat, $BitsOrder);
+
+  return $FingerprintsString;
+}
+
+# Get fingerprint bit vector string...
+#
+sub _GetFingerprintBitVectorString {
+  my($FingerprintsBitVector, $BitStringFormat, $BitsOrder) = @_;
+  my($FingerprintBitString);
+
+  if (!$BitStringFormat) { $BitStringFormat = GetDefaultBitStringFormat(); }
+  if (!$BitsOrder) {$BitsOrder = GetDefaultBitsOrder(); }
+
+  $FingerprintBitString = '';
+  if (!$FingerprintsBitVector) {return $FingerprintBitString;}
+
+  BITSTRINGFORMAT : {
+    if ($BitStringFormat =~ /^(BinaryString|Binary|Bin)$/i) { return $FingerprintsBitVector->GetBitsAsBinaryString($BitsOrder); last BITSTRINGFORMAT; }
+    if ($BitStringFormat =~ /^(HexadecimalString|Hexadecimal|Hex)$/i) { return $FingerprintsBitVector->GetBitsAsHexadecimalString($BitsOrder); last BITSTRINGFORMAT; }
+    croak "Error: FingerprintsStringUtil::_GetFingerprintBitsAsString: Specified bit vector string format, $BitStringFormat, is not supported. Value values: Binary, Bin, BinaryString, Hexdecimal, Hex, HexadecimalString...";
+  }
+  return $FingerprintBitString;
+}
+
+# Generate fingerprints vector string...
+#
+sub GenerateFingerprintsVectorString {
+  my($FingerprintsObject, $VectorStringFormat) = @_;
+  my($FingerprintsString, $FingerprintsVector, @FingerprintsStringValues);
+
+  $FingerprintsString = '';
+  $FingerprintsVector = Fingerprints::FingerprintsVector::IsFingerprintsVector($FingerprintsObject) ? $FingerprintsObject : $FingerprintsObject->GetFingerprintsVector();
+
+  if (!$VectorStringFormat) { $VectorStringFormat = _GetDefaultVectorStringFormat($FingerprintsVector); }
+
+  @FingerprintsStringValues = ();
+  push @FingerprintsStringValues, ($FingerprintsObject->GetVectorType(), _GetFingerprintsDescription($FingerprintsObject), $FingerprintsVector->GetNumOfValues(), $FingerprintsVector->GetType(), $VectorStringFormat);
+
+  $FingerprintsString = join("${FPStringDelim}",  @FingerprintsStringValues) . "${FPStringDelim}" . _GetFingerprintVectorString($FingerprintsVector, $VectorStringFormat);
+
+  return $FingerprintsString;
+}
+
+# Get fingerprint vector string...
+#
+sub _GetFingerprintVectorString {
+  my($FingerprintsVector, $VectorStringFormat) = @_;
+  my($FingerprintString);
+
+  if (!$VectorStringFormat) { $VectorStringFormat = _GetDefaultVectorStringFormat($FingerprintsVector);}
+
+  $FingerprintString = '';
+  if (!$FingerprintsVector) {return $FingerprintString;}
+
+  VECTORSTRINGFORMAT : {
+    if ($VectorStringFormat =~ /^(IDsAndValuesString|IDsAndValues)$/i) { return $FingerprintsVector->GetIDsAndValuesString(); last VECTORSTRINGFORMAT; }
+    if ($VectorStringFormat =~ /^(IDsAndValuesPairsString|IDsAndValuesPairs)$/i) { return $FingerprintsVector->GetIDsAndValuesPairsString(); last VECTORSTRINGFORMAT; }
+    if ($VectorStringFormat =~ /^(ValuesAndIDsString|ValuesAndIDs)$/i) { return $FingerprintsVector->GetValuesAndIDsString(); last VECTORSTRINGFORMAT; }
+    if ($VectorStringFormat =~ /^(ValuesAndIDsPairsString|ValuesAndIDsPairs)$/i) { return $FingerprintsVector->GetValuesAndIDsPairsString(); last VECTORSTRINGFORMAT; }
+    if ($VectorStringFormat =~ /^(ValuesString|Values)$/i) { return $FingerprintsVector->GetValuesString(); last VECTORSTRINGFORMAT; }
+    croak "Error: FingerprintsStringUtil::_GetFingerprintVectorString: Specified vector string format, $VectorStringFormat, is not supported. Value values: IDsAndValuesString, IDsAndValues, IDsAndValuesPairsString, IDsAndValuesPairs, ValuesAndIDsString, ValuesAndIDs, ValuesAndIDsPairsString, ValuesAndIDsPairs, ValuesString, Values...";
+  }
+  return $FingerprintString;
+}
+
+# Get fingerprints string type and description...
+sub GetFingerprintsStringTypeAndDescription {
+  my($FingerprintsString) = @_;
+  my($Type, $Description);
+
+  ($Type, $Description) = _ParseFingerprintsStringValues($FingerprintsString);
+
+  return ($Type, $Description);
+}
+
+# Get all fingerprints string values...
+sub GetFingerprintsStringValues {
+  my($FingerprintsString) = @_;
+
+  return _ParseFingerprintsStringValues($FingerprintsString);
+}
+
+# Parse fingerprints string and return FingerprintsBitVector or FingerprintsVector object...
+#
+sub ParseFingerprintsString {
+  my($FingerprintsString) = @_;
+
+  VECTORTYPE : {
+    if ($FingerprintsString =~ /^FingerprintsBitVector/i) { return ParseFingerprintsBitVectorString(@_); last VECTORTYPE; }
+    if ($FingerprintsString =~ /^FingerprintsVector/i) { return ParseFingerprintsVectorString(@_); last VECTORTYPE; }
+    croak "Error: FingerprintsStringUtil::ParseFingerprintsString: Fingerprints string vector type is not supported. Valid values: FingerprintsBitVector or FingerprintsVector...";
+  }
+  return undef;
+}
+
+# Parse fingerprints bit vector string and retrun bit vector...
+#
+sub ParseFingerprintsBitVectorString {
+  my($FingerprintsString, $ValidateValues) = @_;
+  my($ErrorMsgPrefix, $VectorType, $Description, $Size, $BitStringFormat, $BitsOrder, $BitVectorString);
+
+  $ErrorMsgPrefix = "Error: ParsePathLengthFingerprintsBitVectorString";
+  ($VectorType, $Description, $Size, $BitStringFormat, $BitsOrder, $BitVectorString) = _ParseFingerprintsStringValues($FingerprintsString);
+  if ($ValidateValues) {
+    _ValidateFingerprintsStringValues($ErrorMsgPrefix, $VectorType, $Size, $BitStringFormat, $BitsOrder, $BitVectorString);
+  }
+
+  return _GenerateFingerprintBitVector($VectorType, $Description, $Size, $BitStringFormat, $BitsOrder, $BitVectorString);
+}
+
+# Generate fingerints bit vector...
+#
+sub _GenerateFingerprintBitVector {
+  my($VectorType, $Description, $Size, $BitStringFormat, $BitsOrder, $BitVectorString) = @_;
+  my($FingerprintsBitVector);
+
+  $FingerprintsBitVector = undef;
+
+  BITSTRINGFORMAT : {
+    if ($BitStringFormat =~ /^(BinaryString|Binary|Bin)$/i) {
+      $FingerprintsBitVector = Fingerprints::FingerprintsBitVector::NewFromBinaryString($BitVectorString, $BitsOrder);
+      last BITSTRINGFORMAT;
+    }
+    if ($BitStringFormat =~ /^(HexadecimalString|Hexadecimal|Hex)$/i) {
+      $FingerprintsBitVector = Fingerprints::FingerprintsBitVector::NewFromHexadecimalString($BitVectorString, $BitsOrder);
+      last BITSTRINGFORMAT;
+    }
+    croak "Error: FingerprintsStringUtil::_GenerateFingerprintBitVector: Specified bit vector string format, $BitStringFormat, is not supported. Value values: Binary, Bin, BinaryString, Hexdecimal, Hex, HexadecimalString...";
+  }
+
+  if (defined $FingerprintsBitVector) {
+    # Set fingerints vector type and description...
+    $FingerprintsBitVector->SetVectorType($VectorType);
+    $FingerprintsBitVector->SetDescription($Description);
+
+    # Set specified size which might be different from the bit string size due to padding
+    # used by Perl vec function to handle bit vectors in BitVectot class...
+    #
+    $FingerprintsBitVector->SetSpecifiedSize($Size);
+  }
+
+  return $FingerprintsBitVector;
+}
+
+# Parse fingerprints vector string and retrun vector...
+#
+sub ParseFingerprintsVectorString {
+  my($FingerprintsString, $ValidateValues) = @_;
+  my($ErrorMsgPrefix, $VectorType, $Description, $NumOfValues, $VectorValuesType, $VectorStringFormat, $VectorString1, $VectorString2);
+
+  $ErrorMsgPrefix = "Error: ParseFingerprintsVectorString";
+  ($VectorType, $Description, $NumOfValues, $VectorValuesType, $VectorStringFormat, $VectorString1, $VectorString2) = _ParseFingerprintsStringValues($FingerprintsString);
+
+  # No need to check $VectorString1 and $VectorString2 values as they would be
+  # checked later during the creation of FingerprintsVector...
+  #
+  if ($ValidateValues) {
+    _ValidateFingerprintsStringValues($ErrorMsgPrefix, $VectorType, $NumOfValues, $VectorValuesType, $VectorStringFormat);
+  }
+
+  return _GenerateFingerprintVector($VectorType, $Description, $VectorValuesType, $VectorStringFormat, $VectorString1, $VectorString2);
+}
+
+# Generate fingerints vector...
+#
+sub _GenerateFingerprintVector {
+  my($VectorType, $Description, $VectorValuesType, $VectorStringFormat, $VectorString1, $VectorString2) = @_;
+  my($FingerprintsVector, $VectorString);
+
+  $VectorString = TextUtil::IsEmpty($VectorString2) ? $VectorString1 : "${VectorString1};${VectorString2}";
+  $FingerprintsVector = undef;
+
+  VECTORSTRINGFORMAT : {
+    if ($VectorStringFormat =~ /^(ValuesString|Values)$/i) {
+      $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromValuesString($VectorValuesType, $VectorString);
+      last VECTORSTRINGFORMAT;
+    }
+    if ($VectorStringFormat =~ /^(IDsAndValuesString|IDsAndValues)$/i) {
+      $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromIDsAndValuesString($VectorValuesType, $VectorString);
+      last VECTORSTRINGFORMAT;
+    }
+    if ($VectorStringFormat =~ /^(IDsAndValuesPairsString|IDsAndValuesPairs)$/i) {
+      $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromIDsAndValuesPairsString($VectorValuesType, $VectorString);
+      last VECTORSTRINGFORMAT;
+    }
+    if ($VectorStringFormat =~ /^(ValuesAndIDsString|ValuesAndIDs)$/i) {
+      $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromValuesAndIDsString($VectorValuesType, $VectorString);
+      last VECTORSTRINGFORMAT;
+    }
+    if ($VectorStringFormat =~ /^(ValuesAndIDsPairsString|ValuesAndIDsPairs)$/i) {
+      $FingerprintsVector = Fingerprints::FingerprintsVector::NewFromValuesAndIDsPairsString($VectorValuesType, $VectorString);
+      last VECTORSTRINGFORMAT;
+    }
+    croak "Error: FingerprintsStringUtil::_GenerateFingerprintVector: Specified vector string format, $VectorStringFormat, is not supported. Value values: IDsAndValuesString, IDsAndValues, IDsAndValuesPairsString, IDsAndValuesPairs, ValuesAndIDsString, ValuesAndIDs, ValuesAndIDsPairsString, ValuesAndIDsPairs, ValuesString, Values...";
+  }
+
+  if (defined $FingerprintsVector) {
+    # Set fingerints vector type and description...
+    $FingerprintsVector->SetVectorType($VectorType);
+    $FingerprintsVector->SetDescription($Description);
+  }
+
+  return $FingerprintsVector;
+}
+
+# Validate fingerint string values...
+#
+sub AreFingerprintsStringValuesValid {
+  my($FingerprintsString) = @_;
+  my($Value);
+
+  for $Value (_ParseFingerprintsStringValues($FingerprintsString)) {
+    if (TextUtil::IsEmpty($Value)) {
+      return 0;
+    }
+  }
+  return 1;
+}
+
+# Get fingerprints description...
+#
+sub _GetFingerprintsDescription {
+  my($FingerprintsObject) = @_;
+  my($Description);
+
+  $Description = $FingerprintsObject->GetDescription();
+
+  return TextUtil::IsEmpty($Description) ? 'No description available for fingerprints' : $Description;
+}
+
+# Parse fingerprints string values...
+#
+sub _ParseFingerprintsStringValues {
+  my($FingerprintsString) = @_;
+
+  return split "${FPStringDelim}", $FingerprintsString;
+}
+
+# Check to make sure already parsed fingerprints string values are valid....
+#
+sub _ValidateFingerprintsStringValues {
+  my($ErrorMsgPrefix, @Values) = @_;
+  my($Value);
+
+  for $Value (@Values) {
+    if (TextUtil::IsEmpty($Value)) {
+      croak("${ErrorMsgPrefix}: _ValidateFingerprintsStringValues: Fingerprints string format is not valid: An empty value found...");
+    }
+  }
+}
+
+# Default bit string format...
+#
+sub GetDefaultBitStringFormat {
+  return 'HexadecimalString';
+}
+
+# Default bit order...
+#
+sub GetDefaultBitsOrder {
+  return 'Ascending';
+}
+
+# Default vector string format using fingerprints or fingerprints vector object...
+#
+sub GetDefaultVectorStringFormat {
+  my($FingerprintsObject) = @_;
+  my($FingerprintsVector);
+
+  $FingerprintsVector = Fingerprints::FingerprintsVector::IsFingerprintsVector($FingerprintsObject) ? $FingerprintsObject : $FingerprintsObject->GetFingerprintsVector();
+
+  return _GetDefaultVectorStringFormat($FingerprintsVector);
+}
+
+# Default vector string format using fingerprits vector object...
+#
+sub _GetDefaultVectorStringFormat {
+  my($FingerprintsVector) = @_;
+  my($Type);
+
+  $Type = $FingerprintsVector->GetType();
+
+  return ($Type =~ /^NumericalValues$/i) ? 'IDsAndValuesString' : 'ValuesString';
+}
+
+# Fingerprints string delimiter...
+#
+sub GetFingeprintsStringDelimiter {
+  return $FPStringDelim;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+FingerprintsStringUtil
+
+=head1 SYNOPSIS
+
+use Fingerprints::FingerprintsStringUtil;
+
+use Fingerprints::FingerprintsStringUtil qw(:all);
+
+=head1 DESCRIPTION
+
+B<FingerprintsStringUtil> module provides the following functions:
+
+AreFingerprintsStringValuesValid, GenerateFingerprintsBitVectorString,
+GenerateFingerprintsString, GenerateFingerprintsVectorString,
+GetDefaultBitStringFormat, GetDefaultBitsOrder, GetDefaultVectorStringFormat,
+GetFingeprintsStringDelimiter, GetFingerprintsStringTypeAndDescription,
+GetFingerprintsStringValues, ParseFingerprintsBitVectorString,
+ParseFingerprintsString, ParseFingerprintsVectorString
+
+The current release of MayaChemTools supports the following types of fingerprint
+bit-vector and vector strings:
+
+    FingerprintsVector;AtomNeighborhoods:AtomicInvariantsAtomTypes:MinRadi
+    us0:MaxRadius2;41;AlphaNumericalValues;ValuesString;NR0-C.X1.BO1.H3-AT
+    C1:NR1-C.X3.BO3.H1-ATC1:NR2-C.X1.BO1.H3-ATC1:NR2-C.X3.BO4-ATC1 NR0-C.X
+    1.BO1.H3-ATC1:NR1-C.X3.BO3.H1-ATC1:NR2-C.X1.BO1.H3-ATC1:NR2-C.X3.BO4-A
+    TC1 NR0-C.X2.BO2.H2-ATC1:NR1-C.X2.BO2.H2-ATC1:NR1-C.X3.BO3.H1-ATC1:NR2
+    -C.X2.BO2.H2-ATC1:NR2-N.X3.BO3-ATC1:NR2-O.X1.BO1.H1-ATC1 NR0-C.X2.B...
+
+    FingerprintsVector;AtomTypesCount:AtomicInvariantsAtomTypes:ArbitraryS
+    ize;10;NumericalValues;IDsAndValuesString;C.X1.BO1.H3 C.X2.BO2.H2 C.X2
+    .BO3.H1 C.X3.BO3.H1 C.X3.BO4 F.X1.BO1 N.X2.BO2.H1 N.X3.BO3 O.X1.BO1.H1
+    O.X1.BO2;2 4 14 3 10 1 1 1 3 2
+
+    FingerprintsVector;AtomTypesCount:SLogPAtomTypes:ArbitrarySize;16;Nume
+    ricalValues;IDsAndValuesString;C1 C10 C11 C14 C18 C20 C21 C22 C5 CS F
+    N11 N4 O10 O2 O9;5 1 1 1 14 4 2 1 2 2 1 1 1 1 3 1
+
+    FingerprintsVector;AtomTypesCount:SLogPAtomTypes:FixedSize;67;OrderedN
+    umericalValues;IDsAndValuesString;C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C
+    12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 CS N1 N
+    2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 N13 N14 NS O1 O2 O3 O4 O5 O6 O7 O8
+    O9 O10 O11 O12 OS F Cl Br I Hal P S1 S2 S3 Me1 Me2;5 0 0 0 2 0 0 0 0 1
+    1 0 0 1 0 0 0 14 0 4 2 1 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0...
+
+    FingerprintsVector;EStateIndicies:ArbitrarySize;11;NumericalValues;IDs
+    AndValuesString;SaaCH SaasC SaasN SdO SdssC SsCH3 SsF SsOH SssCH2 SssN
+    H SsssCH;24.778 4.387 1.993 25.023 -1.435 3.975 14.006 29.759 -0.073 3
+    .024 -2.270
+
+    FingerprintsVector;EStateIndicies:FixedSize;87;OrderedNumericalValues;
+    ValuesString;0 0 0 0 0 0 0 3.975 0 -0.073 0 0 24.778 -2.270 0 0 -1.435
+    4.387 0 0 0 0 0 0 3.024 0 0 0 0 0 0 0 1.993 0 29.759 25.023 0 0 0 0 1
+    4.006 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+    0 0 0 0 0 0 0 0 0 0 0 0 0 0
+
+    FingerprintsVector;ExtendedConnectivity:AtomicInvariantsAtomTypes:Radi
+    us2;60;AlphaNumericalValues;ValuesString;73555770 333564680 352413391
+    666191900 1001270906 1371674323 1481469939 1977749791 2006158649 21414
+    08799 49532520 64643108 79385615 96062769 273726379 564565671 85514103
+    5 906706094 988546669 1018231313 1032696425 1197507444 1331250018 1338
+    532734 1455473691 1607485225 1609687129 1631614296 1670251330 17303...
+
+    FingerprintsVector;ExtendedConnectivityCount:AtomicInvariantsAtomTypes
+    :Radius2;60;NumericalValues;IDsAndValuesString;73555770 333564680 3524
+    13391 666191900 1001270906 1371674323 1481469939 1977749791 2006158649
+    2141408799 49532520 64643108 79385615 96062769 273726379 564565671...;
+    3 2 1 1 14 1 2 10 4 3 1 1 1 1 2 1 2 1 1 1 2 3 1 1 2 1 3 3 8 2 2 2 6 2
+    1 2 1 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2 1 1
+
+    FingerprintsBitVector;ExtendedConnectivityBits:AtomicInvariantsAtomTyp
+    es:Radius2;1024;BinaryString;Ascending;0000000000000000000000000000100
+    0000000001010000000110000011000000000000100000000000000000000000100001
+    1000000110000000000000000000000000010011000000000000000000000000010000
+    0000000000000000000000000010000000000000000001000000000000000000000000
+    0000000000010000100001000000000000101000000000000000100000000000000...
+
+    FingerprintsVector;ExtendedConnectivity:FunctionalClassAtomTypes:Radiu
+    s2;57;AlphaNumericalValues;ValuesString;24769214 508787397 850393286 8
+    62102353 981185303 1231636850 1649386610 1941540674 263599683 32920567
+    1 571109041 639579325 683993318 723853089 810600886 885767127 90326012
+    7 958841485 981022393 1126908698 1152248391 1317567065 1421489994 1455
+    632544 1557272891 1826413669 1983319256 2015750777 2029559552 20404...
+
+    FingerprintsVector;ExtendedConnectivity:EStateAtomTypes:Radius2;62;Alp
+    haNumericalValues;ValuesString;25189973 528584866 662581668 671034184
+    926543080 1347067490 1738510057 1759600920 2034425745 2097234755 21450
+    44754 96779665 180364292 341712110 345278822 386540408 387387308 50430
+    1706 617094135 771528807 957666640 997798220 1158349170 1291258082 134
+    1138533 1395329837 1420277211 1479584608 1486476397 1487556246 1566...
+
+    FingerprintsBitVector;MACCSKeyBits;166;BinaryString;Ascending;00000000
+    0000000000000000000000000000000001001000010010000000010010000000011100
+    0100101010111100011011000100110110000011011110100110111111111111011111
+    11111111111110111000
+
+    FingerprintsBitVector;MACCSKeyBits;322;BinaryString;Ascending;11101011
+    1110011111100101111111000111101100110000000000000011100010000000000000
+    0000000000000000000000000000000000000000000000101000000000000000000000
+    0000000000000000000000000000000000000000000000000000000000000000000000
+    0000000000000000000000000000000000000011000000000000000000000000000000
+    0000000000000000000000000000000000000000
+
+    FingerprintsVector;MACCSKeyCount;166;OrderedNumericalValues;ValuesStri
+    ng;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+    0 0 0 0 0 0 0 1 0 0 3 0 0 0 0 4 0 0 2 0 0 0 0 0 0 0 0 2 0 0 2 0 0 0 0
+    0 0 0 0 1 1 8 0 0 0 1 0 0 1 0 1 0 1 0 3 1 3 1 0 0 0 1 2 0 11 1 0 0 0
+    5 0 0 1 2 0 1 1 0 0 0 0 0 1 1 0 1 1 1 1 0 4 0 0 1 1 0 4 6 1 1 1 2 1 1
+    3 5 2 2 0 5 3 5 1 1 2 5 1 2 1 2 4 8 3 5 5 2 2 0 3 5 4 1
+
+    FingerprintsVector;MACCSKeyCount;322;OrderedNumericalValues;ValuesStri
+    ng;14 8 2 0 2 0 4 4 2 1 4 0 0 2 5 10 5 2 1 0 0 2 0 5 13 3 28 5 5 3 0 0
+    0 4 2 1 1 0 1 1 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 5 3 0 0 0 1 0
+    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 2 0 0 0 0 0 0 0 0 0
+    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
+
+    FingerprintsBitVector;PathLengthBits:AtomicInvariantsAtomTypes:MinLeng
+    th1:MaxLength8;1024;BinaryString;Ascending;001000010011010101011000110
+    0100010101011000101001011100110001000010001001101000001001001001001000
+    0010110100000111001001000001001010100100100000000011000000101001011100
+    0010000001000101010100000100111100110111011011011000000010110111001101
+    0101100011000000010001000011000010100011101100001000001000100000000...
+
+    FingerprintsVector;PathLengthCount:AtomicInvariantsAtomTypes:MinLength
+    1:MaxLength8;432;NumericalValues;IDsAndValuesPairsString;C.X1.BO1.H3 2
+    C.X2.BO2.H2 4 C.X2.BO3.H1 14 C.X3.BO3.H1 3 C.X3.BO4 10 F.X1.BO1 1 N.X
+    2.BO2.H1 1 N.X3.BO3 1 O.X1.BO1.H1 3 O.X1.BO2 2 C.X1.BO1.H3C.X3.BO3.H1
+    2 C.X2.BO2.H2C.X2.BO2.H2 1 C.X2.BO2.H2C.X3.BO3.H1 4 C.X2.BO2.H2C.X3.BO
+    4 1 C.X2.BO2.H2N.X3.BO3 1 C.X2.BO3.H1:C.X2.BO3.H1 10 C.X2.BO3.H1:C....
+
+    FingerprintsVector;PathLengthCount:MMFF94AtomTypes:MinLength1:MaxLengt
+    h8;463;NumericalValues;IDsAndValuesPairsString;C5A 2 C5B 2 C=ON 1 CB 1
+    8 COO 1 CR 9 F 1 N5 1 NC=O 1 O=CN 1 O=CO 1 OC=O 1 OR 2 C5A:C5B 2 C5A:N
+    5 2 C5ACB 1 C5ACR 1 C5B:C5B 1 C5BC=ON 1 C5BCB 1 C=ON=O=CN 1 C=ONNC=O 1
+    CB:CB 18 CBF 1 CBNC=O 1 COO=O=CO 1 COOCR 1 COOOC=O 1 CRCR 7 CRN5 1 CR
+    OR 2 C5A:C5B:C5B 2 C5A:C5BC=ON 1 C5A:C5BCB 1 C5A:N5:C5A 1 C5A:N5CR ...
+
+    FingerprintsVector;TopologicalAtomPairs:AtomicInvariantsAtomTypes:MinD
+    istance1:MaxDistance10;223;NumericalValues;IDsAndValuesString;C.X1.BO1
+    .H3-D1-C.X3.BO3.H1 C.X2.BO2.H2-D1-C.X2.BO2.H2 C.X2.BO2.H2-D1-C.X3.BO3.
+    H1 C.X2.BO2.H2-D1-C.X3.BO4 C.X2.BO2.H2-D1-N.X3.BO3 C.X2.BO3.H1-D1-...;
+    2 1 4 1 1 10 8 1 2 6 1 2 2 1 2 1 2 2 1 2 1 5 1 10 12 2 2 1 2 1 9 1 3 1
+    1 1 2 2 1 3 6 1 6 14 2 2 2 3 1 3 1 8 2 2 1 3 2 6 1 2 2 5 1 3 1 23 1...
+
+    FingerprintsVector;TopologicalAtomPairs:FunctionalClassAtomTypes:MinDi
+    stance1:MaxDistance10;144;NumericalValues;IDsAndValuesString;Ar-D1-Ar
+    Ar-D1-Ar.HBA Ar-D1-HBD Ar-D1-Hal Ar-D1-None Ar.HBA-D1-None HBA-D1-NI H
+    BA-D1-None HBA.HBD-D1-NI HBA.HBD-D1-None HBD-D1-None NI-D1-None No...;
+    23 2 1 1 2 1 1 1 1 2 1 1 7 28 3 1 3 2 8 2 1 1 1 5 1 5 24 3 3 4 2 13 4
+    1 1 4 1 5 22 4 4 3 1 19 1 1 1 1 1 2 2 3 1 1 8 25 4 5 2 3 1 26 1 4 1 ...
+
+    FingerprintsVector;TopologicalAtomTorsions:AtomicInvariantsAtomTypes;3
+    3;NumericalValues;IDsAndValuesString;C.X1.BO1.H3-C.X3.BO3.H1-C.X3.BO4-
+    C.X3.BO4 C.X1.BO1.H3-C.X3.BO3.H1-C.X3.BO4-N.X3.BO3 C.X2.BO2.H2-C.X2.BO
+    2.H2-C.X3.BO3.H1-C.X2.BO2.H2 C.X2.BO2.H2-C.X2.BO2.H2-C.X3.BO3.H1-O...;
+    2 2 1 1 2 2 1 1 3 4 4 8 4 2 2 6 2 2 1 2 1 1 2 1 1 2 6 2 4 2 1 3 1
+
+    FingerprintsVector;TopologicalAtomTorsions:EStateAtomTypes;36;Numerica
+    lValues;IDsAndValuesString;aaCH-aaCH-aaCH-aaCH aaCH-aaCH-aaCH-aasC aaC
+    H-aaCH-aasC-aaCH aaCH-aaCH-aasC-aasC aaCH-aaCH-aasC-sF aaCH-aaCH-aasC-
+    ssNH aaCH-aasC-aasC-aasC aaCH-aasC-aasC-aasN aaCH-aasC-ssNH-dssC a...;
+    4 4 8 4 2 2 6 2 2 2 4 3 2 1 3 3 2 2 2 1 2 1 1 1 2 1 1 1 1 1 1 1 2 1 1 2
+
+    FingerprintsVector;TopologicalAtomTriplets:AtomicInvariantsAtomTypes:M
+    inDistance1:MaxDistance10;3096;NumericalValues;IDsAndValuesString;C.X1
+    .BO1.H3-D1-C.X1.BO1.H3-D1-C.X3.BO3.H1-D2 C.X1.BO1.H3-D1-C.X2.BO2.H2-D1
+    0-C.X3.BO4-D9 C.X1.BO1.H3-D1-C.X2.BO2.H2-D3-N.X3.BO3-D4 C.X1.BO1.H3-D1
+    -C.X2.BO2.H2-D4-C.X2.BO2.H2-D5 C.X1.BO1.H3-D1-C.X2.BO2.H2-D6-C.X3....;
+    1 2 2 2 2 2 2 2 8 8 4 8 4 4 2 2 2 2 4 2 2 2 4 2 2 2 2 1 2 2 4 4 4 2 2
+    2 4 4 4 8 4 4 2 4 4 4 2 4 4 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 8...
+
+    FingerprintsVector;TopologicalAtomTriplets:SYBYLAtomTypes:MinDistance1
+    :MaxDistance10;2332;NumericalValues;IDsAndValuesString;C.2-D1-C.2-D9-C
+    .3-D10 C.2-D1-C.2-D9-C.ar-D10 C.2-D1-C.3-D1-C.3-D2 C.2-D1-C.3-D10-C.3-
+    D9 C.2-D1-C.3-D2-C.3-D3 C.2-D1-C.3-D2-C.ar-D3 C.2-D1-C.3-D3-C.3-D4 C.2
+    -D1-C.3-D3-N.ar-D4 C.2-D1-C.3-D3-O.3-D2 C.2-D1-C.3-D4-C.3-D5 C.2-D1-C.
+    3-D5-C.3-D6 C.2-D1-C.3-D5-O.3-D4 C.2-D1-C.3-D6-C.3-D7 C.2-D1-C.3-D7...
+
+    FingerprintsVector;TopologicalPharmacophoreAtomPairs:ArbitrarySize:Min
+    Distance1:MaxDistance10;54;NumericalValues;IDsAndValuesString;H-D1-H H
+    -D1-NI HBA-D1-NI HBD-D1-NI H-D2-H H-D2-HBA H-D2-HBD HBA-D2-HBA HBA-D2-
+    HBD H-D3-H H-D3-HBA H-D3-HBD H-D3-NI HBA-D3-NI HBD-D3-NI H-D4-H H-D4-H
+    BA H-D4-HBD HBA-D4-HBA HBA-D4-HBD HBD-D4-HBD H-D5-H H-D5-HBA H-D5-...;
+    18 1 2 1 22 12 8 1 2 18 6 3 1 1 1 22 13 6 5 7 2 28 9 5 1 1 1 36 16 10
+    3 4 1 37 10 8 1 35 10 9 3 3 1 28 7 7 4 18 16 12 5 1 2 1
+
+    FingerprintsVector;TopologicalPharmacophoreAtomPairs:FixedSize:MinDist
+    ance1:MaxDistance10;150;OrderedNumericalValues;ValuesString;18 0 0 1 0
+    0 0 2 0 0 1 0 0 0 0 22 12 8 0 0 1 2 0 0 0 0 0 0 0 0 18 6 3 1 0 0 0 1
+    0 0 1 0 0 0 0 22 13 6 0 0 5 7 0 0 2 0 0 0 0 0 28 9 5 1 0 0 0 1 0 0 1 0
+    0 0 0 36 16 10 0 0 3 4 0 0 1 0 0 0 0 0 37 10 8 0 0 0 0 1 0 0 0 0 0 0
+    0 35 10 9 0 0 3 3 0 0 1 0 0 0 0 0 28 7 7 4 0 0 0 0 0 0 0 0 0 0 0 18...
+
+    FingerprintsVector;TopologicalPharmacophoreAtomTriplets:ArbitrarySize:
+    MinDistance1:MaxDistance10;696;NumericalValues;IDsAndValuesString;Ar1-
+    Ar1-Ar1 Ar1-Ar1-H1 Ar1-Ar1-HBA1 Ar1-Ar1-HBD1 Ar1-H1-H1 Ar1-H1-HBA1 Ar1
+    -H1-HBD1 Ar1-HBA1-HBD1 H1-H1-H1 H1-H1-HBA1 H1-H1-HBD1 H1-HBA1-HBA1 H1-
+    HBA1-HBD1 H1-HBA1-NI1 H1-HBD1-NI1 HBA1-HBA1-NI1 HBA1-HBD1-NI1 Ar1-...;
+    46 106 8 3 83 11 4 1 21 5 3 1 2 2 1 1 1 100 101 18 11 145 132 26 14 23
+    28 3 3 5 4 61 45 10 4 16 20 7 5 1 3 4 5 3 1 1 1 1 5 4 2 1 2 2 2 1 1 1
+    119 123 24 15 185 202 41 25 22 17 3 5 85 95 18 11 23 17 3 1 1 6 4 ...
+
+    FingerprintsVector;TopologicalPharmacophoreAtomTriplets:FixedSize:MinD
+    istance1:MaxDistance10;2692;OrderedNumericalValues;ValuesString;46 106
+    8 3 0 0 83 11 4 0 0 0 1 0 0 0 0 0 0 0 0 21 5 3 0 0 1 2 2 0 0 1 0 0 0
+    0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 101 18 11 0 0 145 132 26
+    14 0 0 23 28 3 3 0 0 5 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 45 10 4 0
+    0 16 20 7 5 1 0 3 4 5 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 5 ...
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item B<AreFingerprintsStringValuesValid>
+
+    $Status = AreFingerprintsStringValuesValid($FPString);
+
+Returns 0 or 1 based on whether I<FingerprintsString> contains valid values.
+
+=item B<GetDefaultBitStringFormat>
+
+    $BitStringFormat = GetDefaultBitStringFormat();
+
+Returns default B<BitStringFormat> for fingerprints bit-vector strings.
+
+=item B<GetDefaultBitsOrder>
+
+    $BitsOrder = GetDefaultBitsOrder();
+
+Returns default B<BitsOrder> for fingerprints bit-vector fingerprints.
+
+=item B<GetDefaultVectorStringFormat>
+
+    $StringFormat = GetDefaultVectorStringFormat();
+
+Returns default B<VectorStringFormat> for fingerprints vector strings.
+
+=item B<GetFingeprintsStringDelimiter>
+
+    $Delimiter = GetFingeprintsStringDelimiter();
+
+Returns string B<Delimiter> used to generate fingerprints bit-vector and vector strings.
+
+=item B<GenerateFingerprintsBitVectorString>
+
+    $FPString = GenerateFingerprintsBitVectorString($FPBitVectorObject,
+                [$BitStringFormat, $BitsOrder]);
+
+Returns a B<FingerprintsString> generated using I<FingerprintsBitVectorObject> and
+optionally specified I<BitStringFormat> and I<BitsOrder> values.
+
+Possible I<BitStringFormat> values: I<BinaryString, Binary, Bin, HexadecimalString,
+Hexadecimal, or Hex>. Default I<BitStringFormat> value: I<BinaryString>.
+
+Possible I<BitsOrder> values: I<Ascending or Descending>. Default I<BitsOrder> value:
+I<Ascending>.
+
+=item B<GenerateFingerprintsVectorString>
+
+    $FPString = GenerateFingerprintsVectorString($FPVectorObject,
+                [$VectorStringFormat]);
+
+Returns a B<FingerprintsString> generated using I<FingerprintsVectorObject> and optionally
+specified I<VectorStringFormat>.
+
+Possible I<VectorStringFormat> values: I<IDsAndValuesString, IDsAndValues,
+IDsAndValuesPairsString, IDsAndValuesPairs, ValuesAndIDsString, ValuesAndIDs,
+ValuesAndIDsPairsString, ValuesAndIDsPairs, ValuesString, Values>.
+
+Default I<VectorStringFormat> value: for I<NumericalValues> I<FPVectorType> -
+I<IDsAndValuesString>; for all other I<FPVectorType>s - I<ValuesString>.
+
+=item B<GenerateFingerprintsString>
+
+    $FPString = GenerateFingerprintsBitVectorString($FPBitVectorObject,
+                [$BitStringFormat, $BitsOrder]);
+
+    $FPString = GenerateFingerprintsVectorString($FPVectorObject,
+                [$VectorStringFormat]);
+
+Returns a B<FingerprintsString> generated using I<FingerprintsBitVectorObject> or
+I<FingerprintsVectorObject> and optionally specified parameters.
+
+=item B<GetFingerprintsStringTypeAndDescription>
+
+    ($FPType, $FPDescription) = GetFingerprintsStringTypeAndDescription(
+                                $FPString);
+
+Returns B<FingerprintsStringType> and I<FingerprintsStringDescription> strings for
+B<FingerprintsString> corresponding to B<FingerprintsBitVectorObject> or
+B<FingerprintsVectorObject>.
+
+=item B<GetFingerprintsStringValues>
+
+    @FPStringValues = GetFingerprintsStringValues($FPString);
+
+Parses B<FingerprintsString> corresponding to B<FingerprintsBitVectorObject> or
+B<FingerprintsVectorObject> and returns its individual component values as an
+array.
+
+=item B<ParseFingerprintsBitVectorString>
+
+    $FPBitVectorObject = ParseFingerprintsBitVectorString($FPBitVectorString,
+                         [$ValidateValues]);
+
+Returns B<FingerprintsBitVectorObject> generated by parsing I<FingerprintsBitVectorString>
+with optional validation of its component values.
+
+=item B<ParseFingerprintsString>
+
+    $FPBitVectorObject = ParseFingerprintsBitVectorString($FPBitVectorString,
+                         [$ValidateValues]);
+
+    $FPVectorObject = ParseFingerprintsVectorString($FPVectorString,
+                      [$ValidateValues]);
+
+Returns B<FingerprintsBitVectorObject> or I<B<FingerprintsVectorObject>> generated
+by parsing I<FingerprintsBitVectorString> or I<FingerprintsVectorString> with
+optional validation of its component values.
+
+=item B<ParseFingerprintsVectorString>
+
+    $FPVectorObject = ParseFingerprintsVectorString($FPVectorString,
+                      [$ValidateValues]);
+
+Returns B<FingerprintsVectorObject> generated by parsing I<FingerprintsVectorString>
+with optional validation of its component values.
+
+=back
+
+=head1 AUTHOR
+
+Manish Sud <msud@san.rr.com>
+
+=head1 SEE ALSO
+
+BitVector.pm, FingerprintsBitVector.pm, FingerprintsVector.pm, Vector.pm
+
+=head1 COPYRIGHT
+
+Copyright (C) 2015 Manish Sud. All rights reserved.
+
+This file is part of MayaChemTools.
+
+MayaChemTools is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free
+Software Foundation; either version 3 of the License, or (at your option)
+any later version.
+
+=cut