diff mayachemtools/bin/SimilarityMatricesFingerprints.pl @ 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/bin/SimilarityMatricesFingerprints.pl	Wed Jan 20 11:55:01 2016 -0500
@@ -0,0 +1,2206 @@
+#!/usr/bin/perl -w
+#
+# $RCSfile: SimilarityMatricesFingerprints.pl,v $
+# $Date: 2015/02/28 20:46:20 $
+# $Revision: 1.21 $
+#
+# 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 FindBin; use lib "$FindBin::Bin/../lib";
+use Getopt::Long;
+use File::Basename;
+use File::Copy;
+use Text::ParseWords;
+use Benchmark;
+use FileUtil;
+use TextUtil;
+use Fingerprints::FingerprintsFileUtil;
+use Fingerprints::FingerprintsBitVector;
+use Fingerprints::FingerprintsVector;
+
+my($ScriptName, %Options, $StartTime, $EndTime, $TotalTime);
+
+# Autoflush STDOUT
+$| = 1;
+
+# Starting message...
+$ScriptName = basename($0);
+print "\n$ScriptName: Starting...\n\n";
+$StartTime = new Benchmark;
+
+# Get the options and setup script...
+SetupScriptUsage();
+if ($Options{help} || @ARGV < 1) {
+  die GetUsageFromPod("$FindBin::Bin/$ScriptName");
+}
+
+my(@FingerprintsFilesList);
+@FingerprintsFilesList = ExpandFileNames(\@ARGV, "sdf sd fpf fp csv tsv");
+
+# Process options...
+print "Processing options...\n";
+my(%OptionsInfo);
+ProcessOptions();
+
+# Setup information about input files...
+print "Checking input fingerprints file(s)...\n";
+my(%FingerprintsFilesInfo);
+RetrieveFingerprintsFilesInfo();
+
+# Process input files..
+my($FileIndex);
+if (@FingerprintsFilesList > 1) {
+  print "\nProcessing fingerprints files...\n";
+}
+for $FileIndex (0 .. $#FingerprintsFilesList) {
+  if ($FingerprintsFilesInfo{FileOkay}[$FileIndex]) {
+    print "\nProcessing file $FingerprintsFilesList[$FileIndex]...\n";
+    GenerateSimilarityMatrices($FileIndex);
+  }
+}
+print "\n$ScriptName:Done...\n\n";
+
+$EndTime = new Benchmark;
+$TotalTime = timediff ($EndTime, $StartTime);
+print "Total time: ", timestr($TotalTime), "\n";
+
+###############################################################################
+
+# Generate similarity matrices using fingerprints data in text file...
+#
+sub GenerateSimilarityMatrices {
+  my($FileIndex) = @_;
+
+  ProcessFingerprintsData($FileIndex);
+
+  if ($FingerprintsFilesInfo{FingerprintsBitVectorStringMode}[$FileIndex]) {
+    GenerateSimilarityMatricesForFingerprintsBitVectors($FileIndex);
+  }
+  elsif ($FingerprintsFilesInfo{FingerprintsVectorStringMode}[$FileIndex]) {
+    GenerateSimilarityMatricesForFingerprintsVectors($FileIndex);
+  }
+
+  CleanupFingerprintsData($FileIndex);
+}
+
+# Generate bit vector similarity matrices...
+#
+sub GenerateSimilarityMatricesForFingerprintsBitVectors {
+  my($FileIndex) = @_;
+  my($SpecifiedComparisonMeasure, $ComparisonMeasure, $NewTextFile, $SimilarityMatrixRef, $MethodName, @MethodParameters);
+
+  for $SpecifiedComparisonMeasure (@{$OptionsInfo{SpecifiedBitVectorComparisonsRef}}) {
+    $ComparisonMeasure = $OptionsInfo{SpecifiedBitVectorComparisonsNameRef}->{lc($SpecifiedComparisonMeasure)};
+    $NewTextFile = $FingerprintsFilesInfo{OutFileRoot}[$FileIndex] . "${ComparisonMeasure}." . $FingerprintsFilesInfo{OutFileExt}[$FileIndex];
+
+    $MethodName = $OptionsInfo{SpecifiedBitVectorComparisonsMethodRef}->{lc($ComparisonMeasure)};
+
+    @MethodParameters = ();
+    @MethodParameters = @{$OptionsInfo{SpecifiedBitVectorComparisonsParameterRef}->{lc($ComparisonMeasure)}};
+
+    GenerateSimilarityMatrix($FileIndex, $NewTextFile, $MethodName, \@MethodParameters);
+  }
+}
+
+# Generate vector similarity and/or distance matrices...
+#
+sub GenerateSimilarityMatricesForFingerprintsVectors {
+  my($FileIndex) = @_;
+  my($SpecifiedComparisonMeasure, $ComparisonMode, $ComparisonMeasure, $NewTextFile, $MethodName, @MethodParameters);
+
+  for $SpecifiedComparisonMeasure (@{$OptionsInfo{SpecifiedVectorComparisonsRef}}) {
+    $ComparisonMeasure = $OptionsInfo{SpecifiedVectorComparisonsNameRef}->{lc($SpecifiedComparisonMeasure)};
+
+    for $ComparisonMode (@{$OptionsInfo{SpecifiedVectorComparisonModesRef}}) {
+      $NewTextFile = $FingerprintsFilesInfo{OutFileRoot}[$FileIndex] . "${ComparisonMeasure}${ComparisonMode}." . $FingerprintsFilesInfo{OutFileExt}[$FileIndex];
+
+      $MethodName = $OptionsInfo{SpecifiedVectorComparisonsMethodRef}->{lc($ComparisonMeasure)};
+
+      @MethodParameters = ();
+      push @MethodParameters, $ComparisonMode;
+      push @MethodParameters, @{$OptionsInfo{SpecifiedVectorComparisonsParameterRef}->{lc($ComparisonMeasure)}};
+
+      GenerateSimilarityMatrix($FileIndex, $NewTextFile, $MethodName, \@MethodParameters);
+    }
+  }
+}
+
+# Calculate similarity matrix and write it out...
+#
+sub GenerateSimilarityMatrix {
+  my($FileIndex, $NewTextFile, $MethodName, $MethodParametersRef) = @_;
+
+  print "\nGenerating $NewTextFile...\n";
+
+  # Open new file and write out column labels...
+  open NEWTEXTFILE, ">$NewTextFile" or die "Error: Can't open $NewTextFile: $! \n";
+  WriteColumnLabels($FileIndex, \*NEWTEXTFILE);
+
+  # Calculate and write out similarity matrix values...
+  if ($OptionsInfo{InputDataMode} =~ /^LoadInMemory$/i) {
+    GenerateSimilarityMatrixUsingMemoryData($FileIndex, \*NEWTEXTFILE, $MethodName, $MethodParametersRef);
+  }
+  elsif ($OptionsInfo{InputDataMode} =~ /^ScanFile$/i) {
+    GenerateSimilarityMatrixUsingFileData($FileIndex, \*NEWTEXTFILE, $MethodName, $MethodParametersRef);
+  }
+  else {
+    warn "Warning: Input data mode, $OptionsInfo{InputDataMode}, is not supported.\n";
+  }
+
+  # Close new text file...
+  close NEWTEXTFILE;
+
+}
+
+# Calculate and write out similarity values using fingerprints data already loaded in
+# memory...
+#
+sub GenerateSimilarityMatrixUsingMemoryData {
+  my($FileIndex, $NewTextFileRef, $MethodName, $MethodParametersRef) = @_;
+  my($RowIndex, $ColIndex, $CmpdID1, $CmpdID2, $FingerprintsObject1, $FingerprintsObject2, $Value, $Line, @LineWords);
+
+  for $RowIndex (0 .. $#{$FingerprintsFilesInfo{FingerprintsObjectsRef}}) {
+    $FingerprintsObject1 = $FingerprintsFilesInfo{FingerprintsObjectsRef}->[$RowIndex];
+    $CmpdID1 = $FingerprintsFilesInfo{CompundIDsRef}->[$RowIndex];
+
+    if ($OptionsInfo{WriteRowsAndColumns}) {
+      print $NewTextFileRef "$OptionsInfo{OutQuoteValue}${CmpdID1}$OptionsInfo{OutQuoteValue}";
+    }
+
+    COLINDEX: for $ColIndex (0 .. $#{$FingerprintsFilesInfo{FingerprintsObjectsRef}}) {
+      if (SkipMatrixData($RowIndex, $ColIndex)) {
+	next COLINDEX;
+      }
+
+      $FingerprintsObject2 = $FingerprintsFilesInfo{FingerprintsObjectsRef}->[$ColIndex];
+
+      $Value = $FingerprintsObject1->$MethodName($FingerprintsObject2, @{$MethodParametersRef});
+      $Value = (defined($Value) && length($Value)) ? (sprintf("%.$OptionsInfo{Precision}f", $Value) + 0) : '';
+
+      if ($OptionsInfo{WriteRowsAndColumns}) {
+	print $NewTextFileRef "$OptionsInfo{OutDelim}$OptionsInfo{OutQuoteValue}${Value}$OptionsInfo{OutQuoteValue}";
+      }
+      elsif ($OptionsInfo{WriteIDPairsAndValue}) {
+	$CmpdID2 = $FingerprintsFilesInfo{CompundIDsRef}->[$ColIndex];
+
+	@LineWords = ();
+	push @LineWords,  ($CmpdID1, $CmpdID2, $Value);
+	$Line = JoinWords(\@LineWords, $OptionsInfo{OutDelim}, $OptionsInfo{OutQuote});
+	print $NewTextFileRef "$Line\n";
+      }
+    }
+    if ($OptionsInfo{WriteRowsAndColumns}) {
+      print $NewTextFileRef "\n";
+    }
+  }
+}
+
+# Calculate and write out similarity values by retrieving and prcessing data
+# from fingerprint file...
+#
+sub GenerateSimilarityMatrixUsingFileData {
+  my($FileIndex, $NewTextFileRef, $MethodName, $MethodParametersRef) = @_;
+  my($RowIndex, $ColIndex, $FingerprintsFileIO, $TmpFingerprintsFileIO, $FingerprintsObject1, $FingerprintsObject2, $CmpdID1, $CmpdID2, $FingerprintsCount, $IgnoredFingerprintsCount, $Value, $Line, @LineWords);
+
+  print "\nReading and processing fingerprints data...\n";
+
+  $FingerprintsFileIO = Fingerprints::FingerprintsFileUtil::NewFingerprintsFileIO(%{$FingerprintsFilesInfo{FingerprintsFileIOParameters}[$FileIndex]});
+  $FingerprintsFileIO->Open();
+
+  $RowIndex = 0; $ColIndex = 0;
+  $FingerprintsCount = 0; $IgnoredFingerprintsCount = 0;
+
+  FINGERPRINTSFILEIO: while ($FingerprintsFileIO->Read()) {
+    $FingerprintsCount++;
+
+    if (!$FingerprintsFileIO->IsFingerprintsDataValid()) {
+      $IgnoredFingerprintsCount++;
+      next FINGERPRINTSFILEIO;
+    }
+    $RowIndex++;
+    $FingerprintsObject1 = $FingerprintsFileIO->GetFingerprints();
+    $CmpdID1 = $FingerprintsFileIO->GetCompoundID();
+
+    if ($OptionsInfo{WriteRowsAndColumns}) {
+      print $NewTextFileRef "$OptionsInfo{OutQuoteValue}${CmpdID1}$OptionsInfo{OutQuoteValue}";
+    }
+
+    # Force detail level of 1 to avoid duplicate printing of diagnostic messages for invalid
+    # fingerprints data...
+    $TmpFingerprintsFileIO = Fingerprints::FingerprintsFileUtil::NewFingerprintsFileIO(%{$FingerprintsFilesInfo{TmpFingerprintsFileIOParameters}[$FileIndex]}, "DetailLevel" => 1);
+    $TmpFingerprintsFileIO->Open();
+
+    $ColIndex = 0;
+    TMPFINGERPRINTSFILEIO: while ($TmpFingerprintsFileIO->Read()) {
+      if (!$TmpFingerprintsFileIO->IsFingerprintsDataValid()) {
+	next TMPFINGERPRINTSFILEIO;
+      }
+      $ColIndex++;
+
+      if (SkipMatrixData($RowIndex, $ColIndex)) {
+	next TMPFINGERPRINTSFILEIO;
+      }
+
+      $FingerprintsObject2 = $TmpFingerprintsFileIO->GetFingerprints();
+
+      $Value = $FingerprintsObject1->$MethodName($FingerprintsObject2, @{$MethodParametersRef});
+      $Value = (defined($Value) && length($Value)) ? (sprintf("%.$OptionsInfo{Precision}f", $Value) + 0) : '';
+
+      if ($OptionsInfo{WriteRowsAndColumns}) {
+	print $NewTextFileRef "$OptionsInfo{OutDelim}$OptionsInfo{OutQuoteValue}${Value}$OptionsInfo{OutQuoteValue}";
+      }
+      elsif ($OptionsInfo{WriteIDPairsAndValue}) {
+	$CmpdID2 = $TmpFingerprintsFileIO->GetCompoundID();
+
+	@LineWords = ();
+	push @LineWords,  ($CmpdID1, $CmpdID2, $Value);
+	$Line = JoinWords(\@LineWords, $OptionsInfo{OutDelim}, $OptionsInfo{OutQuote});
+	print $NewTextFileRef "$Line\n";
+      }
+    }
+    $TmpFingerprintsFileIO->Close();
+
+    if ($OptionsInfo{WriteRowsAndColumns}) {
+      print $NewTextFileRef "\n";
+    }
+  }
+
+  $FingerprintsFileIO->Close();
+
+  print "Number of fingerprints data entries in database fingerprints file: $FingerprintsCount\n";
+  print "Number of fingerprints date entries processed successfully: ", ($FingerprintsCount - $IgnoredFingerprintsCount)  , "\n";
+  print "Number of fingerprints data entries ignored due to missing/invalid data: $IgnoredFingerprintsCount\n\n";
+}
+
+# Check whether matrix data need to be skipped...
+#
+sub SkipMatrixData {
+  my($RowIndex, $ColIndex) = @_;
+
+  if ($OptionsInfo{WriteFullMatrix}) {
+    return 0;
+  }
+  elsif ($OptionsInfo{WriteUpperTriangularMatrix}) {
+    return ($RowIndex > $ColIndex) ? 1 : 0;
+  }
+  elsif ($OptionsInfo{WriteLowerTriangularMatrix}) {
+    return ($RowIndex < $ColIndex) ? 1 : 0;
+  }
+
+  return 0;
+}
+
+# Write out column labels...
+#
+sub WriteColumnLabels {
+  my($FileIndex, $NewTextFileRef) = @_;
+  my($Line, @LineWords);
+
+  if ($OptionsInfo{OutMatrixFormat} =~ /^IDPairsAndValue$/i) {
+    @LineWords = ();
+    push @LineWords, ('CmpdID1', 'CmpdID2', 'Coefficient Value');
+    $Line = JoinWords(\@LineWords, $OptionsInfo{OutDelim}, $OptionsInfo{OutQuote});
+    print $NewTextFileRef "$Line\n";
+  }
+  elsif ($OptionsInfo{OutMatrixFormat} =~ /^RowsAndColumns$/i) {
+    if ($OptionsInfo{InputDataMode} =~ /^LoadInMemory$/i) {
+      @LineWords = ();
+      push @LineWords, '';
+      push @LineWords, @{$FingerprintsFilesInfo{CompundIDsRef}};
+      $Line = JoinWords(\@LineWords, $OptionsInfo{OutDelim}, $OptionsInfo{OutQuote});
+      print $NewTextFileRef "$Line\n";
+    }
+    elsif ($OptionsInfo{InputDataMode} =~ /^ScanFile$/i) {
+      my( $FingerprintsFileIO, $CmpdID);
+
+      # Scan file to retrieve compound IDs...
+      #
+      print "\nProcessing fingerprints file to generate compound IDs...\n";
+
+      # Force detail level of 1 to avoid diagnostics messages for invalid fingeprints data during
+      # retrieval of compound IDs as these get printed out during calculation of matrix...
+      #
+      $FingerprintsFileIO = Fingerprints::FingerprintsFileUtil::NewFingerprintsFileIO(%{$FingerprintsFilesInfo{FingerprintsFileIOParameters}[$FileIndex]}, "DetailLevel" => 1);
+      $FingerprintsFileIO->Open();
+
+      print $NewTextFileRef "$OptionsInfo{OutQuoteValue}$OptionsInfo{OutQuoteValue}";
+
+      FINGERPRINTSFILEIO: while ($FingerprintsFileIO->Read()) {
+	if (!$FingerprintsFileIO->IsFingerprintsDataValid()) {
+	  next FINGERPRINTSFILEIO;
+	}
+	$CmpdID = $FingerprintsFileIO->GetCompoundID();
+	print $NewTextFileRef "$OptionsInfo{OutDelim}$OptionsInfo{OutQuoteValue}${CmpdID}$OptionsInfo{OutQuoteValue}";
+      }
+      $FingerprintsFileIO->Close();
+
+      print $NewTextFileRef "\n";
+
+      print "Processing fingerprints file to generate matrix...\n";
+    }
+  }
+  else {
+    warn "Warning: Output matrix format, $OptionsInfo{OutMatrixFormat}, is not supported.\n";
+  }
+}
+
+# Process fingerprints data...
+#
+sub ProcessFingerprintsData {
+  my($FileIndex) = @_;
+  my($FingerprintsFileIO);
+
+  $FingerprintsFilesInfo{CompundIDsRef}  = undef;
+  $FingerprintsFilesInfo{FingerprintsObjectsRef} = undef;
+
+  if ($OptionsInfo{InputDataMode} =~ /^LoadInMemory$/i) {
+    my($FingerprintsFileIO);
+
+    $FingerprintsFileIO = Fingerprints::FingerprintsFileUtil::NewFingerprintsFileIO(%{$FingerprintsFilesInfo{FingerprintsFileIOParameters}[$FileIndex]});
+    ($FingerprintsFilesInfo{CompundIDsRef}, $FingerprintsFilesInfo{FingerprintsObjectsRef}) = Fingerprints::FingerprintsFileUtil::ReadAndProcessFingerpritsData($FingerprintsFileIO);
+  }
+  elsif ($OptionsInfo{InputDataMode} =~ /^ScanFile$/i) {
+    my($FingerprintsFile, $TmpFingerprintsFile);
+
+    $FingerprintsFile = $FingerprintsFilesList[$FileIndex];
+    $TmpFingerprintsFile = $FingerprintsFilesInfo{TmpFingerprintsFile}[$FileIndex];
+
+    # Copy fingerprints file to a tmp file for calculating similarity matrix...
+    print "\nCopying fingerprints file, $FingerprintsFile, to temporary fingperints file, $TmpFingerprintsFile...\n";
+    copy $FingerprintsFile, $TmpFingerprintsFile or die "Error: Couldn't copy $FingerprintsFile to $TmpFingerprintsFile: $! \n";
+  }
+}
+
+# Clean up fingerprints data...
+#
+sub CleanupFingerprintsData {
+  my($FileIndex) = @_;
+
+  if ($OptionsInfo{InputDataMode} =~ /^LoadInMemory$/i) {
+    $FingerprintsFilesInfo{CompundIDsRef}  = undef;
+    $FingerprintsFilesInfo{FingerprintsObjectsRef} = undef;
+  }
+  elsif ($OptionsInfo{InputDataMode} =~ /^ScanFile$/i) {
+    my($TmpFingerprintsFile);
+
+    # Delete temporary fingerprints file...
+    $TmpFingerprintsFile = $FingerprintsFilesInfo{TmpFingerprintsFile}[$FileIndex];
+
+    print "\nDeleting temporary fingerprints file $TmpFingerprintsFile...\n";
+    unlink $TmpFingerprintsFile or die "Error: Couldn't unlink $TmpFingerprintsFile: $! \n";
+  }
+}
+
+# Retrieve information about fingerprints files...
+#
+sub RetrieveFingerprintsFilesInfo {
+  my($FingerprintsFile, $TmpFingerprintsFile, $FingerprintsFileIO, $FingerprintsBitVectorStringMode, $FingerprintsVectorStringMode, $FileType, $Index, $FileDir, $FileExt, $FileName, $InDelim, $OutFileRoot, $OutFileExt, %FingerprintsFileIOParameters);
+
+  %FingerprintsFilesInfo = ();
+  @{$FingerprintsFilesInfo{FileOkay}} = ();
+  @{$FingerprintsFilesInfo{FileType}} = ();
+  @{$FingerprintsFilesInfo{InDelim}} = ();
+  @{$FingerprintsFilesInfo{OutFileRoot}} = ();
+  @{$FingerprintsFilesInfo{OutFileExt}} = ();
+
+  @{$FingerprintsFilesInfo{TmpFingerprintsFile}} = ();
+
+  @{$FingerprintsFilesInfo{FingerprintsFileIOParameters}} = ();
+  @{$FingerprintsFilesInfo{TmpFingerprintsFileIOParameters}} = ();
+
+  @{$FingerprintsFilesInfo{FingerprintsBitVectorStringMode}} = ();
+  @{$FingerprintsFilesInfo{FingerprintsVectorStringMode}} = ();
+
+  FILELIST: for $Index (0 .. $#FingerprintsFilesList) {
+    $FingerprintsFilesInfo{FileOkay}[$Index] = 0;
+    $FingerprintsFilesInfo{FileType}[$Index] = '';
+    $FingerprintsFilesInfo{InDelim}[$Index] = "";
+    $FingerprintsFilesInfo{OutFileRoot}[$Index] = '';
+    $FingerprintsFilesInfo{OutFileExt}[$Index] = '';
+
+    %{$FingerprintsFilesInfo{FingerprintsFileIOParameters}[$Index]} = ();
+
+    $FingerprintsFilesInfo{TmpFingerprintsFile}[$Index] = "";
+    %{$FingerprintsFilesInfo{TmpFingerprintsFileIOParameters}[$Index]} = ();
+
+    $FingerprintsFilesInfo{FingerprintsBitVectorStringMode}[$Index] = 0;
+    $FingerprintsFilesInfo{FingerprintsVectorStringMode}[$Index] = 0;
+
+    $FingerprintsFile = $FingerprintsFilesList[$Index];
+    if (!(-e $FingerprintsFile)) {
+      warn "Warning: Ignoring file $FingerprintsFile: It doesn't exist\n";
+      next FILELIST;
+    }
+
+    $FileType = Fingerprints::FingerprintsFileUtil::GetFingerprintsFileType($FingerprintsFile);
+    if (IsEmpty($FileType)) {
+      warn "Warning: Ignoring file $FingerprintsFile: It's not a fingerprints file\n";
+      next FILELIST;
+    }
+
+    $FileDir = ""; $FileName = ""; $FileExt = "";
+    ($FileDir, $FileName, $FileExt) = ParseFileName($FingerprintsFile);
+
+    # Setup temporary fingerprints file name for scan file mode...
+    $TmpFingerprintsFile = "${FileName}Tmp.${FileExt}";
+
+    $InDelim = ($FileExt =~ /^tsv$/i) ? 'Tab' : $OptionsInfo{InDelim};
+
+    # Setup output file names...
+    $OutFileExt = "csv";
+    if ($Options{outdelim} =~ /^tab$/i) {
+      $OutFileExt = "tsv";
+    }
+
+    $OutFileRoot = $FileName;
+    if ($OptionsInfo{OutFileRoot} && (@FingerprintsFilesList == 1)) {
+      my ($RootFileDir, $RootFileName, $RootFileExt) = ParseFileName($OptionsInfo{OutFileRoot});
+      if ($RootFileName && $RootFileExt) {
+	$FileName = $RootFileName;
+      }
+      else {
+	$FileName = $OptionsInfo{OutFileRoot};
+      }
+      $OutFileRoot = $FileName;
+    }
+
+    if (!$Options{overwrite}) {
+      # Similarity matrices output file names for bit-vector strings...
+      my($SpecifiedComparisonMeasure, $ComparisonMeasure);
+      for $SpecifiedComparisonMeasure (@{$OptionsInfo{SpecifiedBitVectorComparisonsRef}}) {
+	$ComparisonMeasure = $OptionsInfo{SpecifiedBitVectorComparisonsNameRef}->{lc($SpecifiedComparisonMeasure)};
+	if (-e "${OutFileRoot}${ComparisonMeasure}.${OutFileExt}") {
+	  warn "Warning: Ignoring file $FingerprintsFile: The file ${OutFileRoot}${ComparisonMeasure}.${OutFileExt} already exists.\n";
+	  next FILELIST;
+	}
+      }
+      # Similarity matrices output file names for vector strings...
+      my($ComparisonMode);
+      for $SpecifiedComparisonMeasure (@{$OptionsInfo{SpecifiedVectorComparisonsRef}}) {
+	$ComparisonMeasure = $OptionsInfo{SpecifiedVectorComparisonsNameRef}->{lc($SpecifiedComparisonMeasure)};
+	for $ComparisonMode (@{$OptionsInfo{SpecifiedVectorComparisonModesRef}}) {
+	  if (-e "${OutFileRoot}${ComparisonMeasure}${ComparisonMode}.${OutFileExt}") {
+	    warn "Warning: Ignoring file $FingerprintsFile: The file ${OutFileRoot}${ComparisonMeasure}${ComparisonMode}.${OutFileExt} already exists.\n";
+	    next FILELIST;
+	  }
+	}
+      }
+    }
+
+    # Setup FingerprintsFileIO parameters...
+    %FingerprintsFileIOParameters = ();
+    FILEIOPARAMETERS: {
+      if ($FileType =~ /^SD$/i) {
+	%FingerprintsFileIOParameters = ('Name' => $FingerprintsFile, 'Mode' => 'Read', 'FingerprintsStringMode' => $OptionsInfo{Mode}, 'ValidateData' => $OptionsInfo{ValidateData}, 'DetailLevel' =>  $OptionsInfo{Detail}, 'FingerprintsFieldLabel' => $OptionsInfo{FingerprintsField}, 'CompoundIDMode' => $OptionsInfo{CompoundIDMode}, 'CompoundIDFieldLabel' => $OptionsInfo{CompoundIDField}, 'CompoundIDPrefix' => $OptionsInfo{CompoundIDPrefix});
+	last FILEIOPARAMETERS;
+      }
+      if ($FileType =~ /^FP$/i) {
+	%FingerprintsFileIOParameters = ('Name' => $FingerprintsFile, 'Mode' => 'Read', 'FingerprintsStringMode' => $OptionsInfo{Mode}, 'ValidateData' => $OptionsInfo{ValidateData}, 'DetailLevel' =>  $OptionsInfo{Detail});
+	last FILEIOPARAMETERS;
+      }
+      if ($FileType =~ /^Text$/i) {
+	%FingerprintsFileIOParameters = ('Name' => $FingerprintsFile, 'Mode' => 'Read', 'FingerprintsStringMode' => $OptionsInfo{Mode}, 'ValidateData' => $OptionsInfo{ValidateData}, 'DetailLevel' =>  $OptionsInfo{Detail}, 'FingerprintsCol' => $OptionsInfo{FingerprintsCol}, 'ColMode' => $OptionsInfo{ColMode}, 'CompoundIDCol' => $OptionsInfo{CompoundIDCol}, 'CompoundIDPrefix' => $OptionsInfo{CompoundIDPrefix}, 'InDelim' => $OptionsInfo{InDelim});
+	last FILEIOPARAMETERS;
+      }
+      warn "Warning: File type for fingerprints file, $FingerprintsFile, is not valid. Supported file types: SD, FP or Text\n";
+      next FILELIST;
+    }
+
+    # Retrieve fingerints file string mode information...
+    $FingerprintsFileIO = Fingerprints::FingerprintsFileUtil::NewFingerprintsFileIO(%FingerprintsFileIOParameters);
+
+    if (!$FingerprintsFileIO) {
+      warn "Warning: Ignoring fingerprints file $FingerprintsFile: It contains invalid fingerprints data\n";
+      next FILELIST;
+    }
+    if (!$FingerprintsFileIO->IsFingerprintsFileDataValid()) {
+      warn "Warning: Ignoring fingerprints file $FingerprintsFile: It contains invalid fingerprints data\n";
+      next FILELIST;
+    }
+    $FingerprintsBitVectorStringMode = $FingerprintsFileIO->GetFingerprintsBitVectorStringMode();
+    $FingerprintsVectorStringMode = $FingerprintsFileIO->GetFingerprintsVectorStringMode();
+
+
+    $FingerprintsFilesInfo{FileOkay}[$Index] = 1;
+    $FingerprintsFilesInfo{FileType}[$Index] = $FileType;
+
+    $FingerprintsFilesInfo{InDelim}[$Index] = $InDelim;
+
+    $FingerprintsFilesInfo{OutFileRoot}[$Index] = $OutFileRoot;
+    $FingerprintsFilesInfo{OutFileExt}[$Index] = $OutFileExt;
+
+    %{$FingerprintsFilesInfo{FingerprintsFileIOParameters}[$Index]} = %FingerprintsFileIOParameters;
+
+    $FingerprintsFilesInfo{TmpFingerprintsFile}[$Index] = $TmpFingerprintsFile;
+
+    $FingerprintsFileIOParameters{Name} = $TmpFingerprintsFile;
+    %{$FingerprintsFilesInfo{TmpFingerprintsFileIOParameters}[$Index]} = %FingerprintsFileIOParameters;
+
+    $FingerprintsFilesInfo{FingerprintsBitVectorStringMode}[$Index] = $FingerprintsBitVectorStringMode;
+    $FingerprintsFilesInfo{FingerprintsVectorStringMode}[$Index] = $FingerprintsVectorStringMode;
+  }
+}
+
+# Process option values...
+sub ProcessOptions {
+  %OptionsInfo = ();
+
+  $OptionsInfo{Mode} = $Options{mode};
+
+  $OptionsInfo{InputDataMode} = $Options{inputdatamode};
+
+  ProcessBitVectorComparisonOptions();
+  ProcessVectorComparisonOptions();
+
+  $OptionsInfo{CompoundIDPrefix} = $Options{compoundidprefix} ? $Options{compoundidprefix} : 'Cmpd';
+
+  # Compound ID and fingerprints column options for text files...
+  $OptionsInfo{ColMode} = $Options{colmode};
+
+  if (IsNotEmpty($Options{compoundidcol})) {
+    if ($Options{colmode} =~ /^ColNum$/i) {
+      if (!IsPositiveInteger($Options{compoundidcol})) {
+	die "Error: Column value, $Options{compoundidcol}, specified using \"--CompoundIDCol\" is not valid: Allowed integer values: > 0\n";
+      }
+    }
+    $OptionsInfo{CompoundIDCol} = $Options{compoundidcol};
+  }
+  else {
+    $OptionsInfo{CompoundIDCol} = 'AutoDetect';
+  }
+
+  if (IsNotEmpty($Options{fingerprintscol})) {
+    if ($Options{colmode} =~ /^ColNum$/i) {
+      if (!IsPositiveInteger($Options{fingerprintscol})) {
+	die "Error: Column value, $Options{fingerprintscol}, specified using \"--FingerprintsCol\" is not valid: Allowed integer values: > 0\n";
+      }
+    }
+    $OptionsInfo{FingerprintsCol} = $Options{fingerprintscol};
+  }
+  else {
+    $OptionsInfo{FingerprintsCol} = 'AutoDetect';
+  }
+
+  if (IsNotEmpty($Options{compoundidcol}) && IsNotEmpty($Options{fingerprintscol})) {
+    if (IsPositiveInteger($Options{compoundidcol}) && IsPositiveInteger($Options{fingerprintscol})) {
+      if (($Options{compoundidcol} == $Options{fingerprintscol})) {
+	die "Error: Values specified using \"--CompoundIDCol\" and \"--FingerprintsCol\", $Options{compoundidcol}, must be different.\n";
+      }
+    }
+    else {
+      if (($Options{compoundidcol} eq $Options{fingerprintscol})) {
+	die "Error: Values specified using \"--CompoundIDCol\" and \"--FingerprintsCol\", $Options{compoundidcol}, must be different.\n";
+      }
+    }
+  }
+
+  # Compound ID and fingerprints field options for SD files...
+  $OptionsInfo{CompoundIDMode} = $Options{compoundidmode};
+  $OptionsInfo{CompoundIDField} = '';
+
+  if ($Options{compoundidmode} =~ /^DataField$/i) {
+    if (!$Options{compoundidfield}) {
+      die "Error: You must specify a value for \"--CompoundIDField\" option in \"DataField\" \"--CompoundIDMode\". \n";
+    }
+    $OptionsInfo{CompoundIDField} = $Options{compoundidfield};
+  }
+
+
+  if (IsNotEmpty($Options{fingerprintsfield})) {
+    $OptionsInfo{FingerprintsField} = $Options{fingerprintsfield};
+  }
+  else {
+    $OptionsInfo{FingerprintsField} = 'AutoDetect';
+  }
+
+  if ($Options{compoundidfield} && IsNotEmpty($Options{fingerprintsfield})) {
+    if (($Options{compoundidfield} eq $Options{fingerprintsfield})) {
+      die "Error: Values specified using \"--CompoundIDField\" and \"--Fingerprintsfield\", $Options{compoundidfield}, must be different.\n";
+    }
+  }
+
+  $OptionsInfo{Detail} = $Options{detail};
+
+  $OptionsInfo{InDelim} = $Options{indelim};
+  $OptionsInfo{OutDelim} = ($Options{outdelim} =~ /tab/i ) ? "\t" : (($Options{outdelim} =~ /semicolon/i) ? "\;" : "\,");
+  $OptionsInfo{OutQuote} = ($Options{quote} =~ /^Yes$/i) ? 1 : 0;
+  $OptionsInfo{OutQuoteValue} = ($Options{quote} =~ /^Yes$/i) ? '"' : '';
+
+  $OptionsInfo{OutMatrixFormat} = $Options{outmatrixformat};
+
+  $OptionsInfo{WriteRowsAndColumns} = 0; $OptionsInfo{WriteIDPairsAndValue} = 0;
+  OUTMATRIXFORMAT: {
+    if ($OptionsInfo{OutMatrixFormat} =~ /^RowsAndColumns$/i) {
+      $OptionsInfo{WriteRowsAndColumns} = 1; last OUTMATRIXFORMAT;
+    }
+    if ($OptionsInfo{OutMatrixFormat} =~ /^IDPairsAndValue$/i) {
+      $OptionsInfo{WriteIDPairsAndValue} = 1; last OUTMATRIXFORMAT;
+    }
+    die "Error: The value specified, $Options{outmatrixformat}, for option \"--OutMatrixFormat\" is not valid. Allowed values: RowsAndColumns or IDPairsAndValue\n";
+  }
+
+  $OptionsInfo{OutMatrixType} = $Options{outmatrixtype};
+
+  $OptionsInfo{WriteFullMatrix} = 0;
+  $OptionsInfo{WriteUpperTriangularMatrix} = 0; $OptionsInfo{WriteLowerTriangularMatrix} = 0;
+  OUTMATRIXTYPE: {
+    if ($OptionsInfo{OutMatrixType} =~ /^FullMatrix$/i) {
+      $OptionsInfo{WriteFullMatrix} = 1; last OUTMATRIXTYPE;
+    }
+    if ($OptionsInfo{OutMatrixType} =~ /^UpperTriangularMatrix$/i) {
+      $OptionsInfo{WriteUpperTriangularMatrix} = 1; last OUTMATRIXTYPE;
+    }
+    if ($OptionsInfo{OutMatrixType} =~ /^LowerTriangularMatrix$/i) {
+      $OptionsInfo{WriteLowerTriangularMatrix} = 1; last OUTMATRIXTYPE;
+    }
+    die "Error: The value specified, $Options{outmatrixtype}, for option \"--OutMatrixType\" is not valid. Allowed values: FullMatrix, UpperTriangularMatrix or LowerTriangularMatrix\n";
+  }
+
+  $OptionsInfo{OverwriteFiles} = $Options{overwrite} ? 1 : 0;
+  $OptionsInfo{OutFileRoot} = $Options{root} ? $Options{root} : 0;
+
+  $OptionsInfo{Fast} = $Options{fast} ? 1 : 0;
+  $OptionsInfo{ValidateData} = $Options{fast} ? 0 : 1;
+
+  $OptionsInfo{Precision} = $Options{precision};
+
+}
+
+# Process options related to comparion of bit vector strings...
+#
+sub ProcessBitVectorComparisonOptions {
+  # Setup supported bit vector similarity coefficients for bit vector strings...
+  my($ComparisonMeasure, $SupportedComparisonMeasure, @SupportedComparisonMeasures, %SupportedComparisonMeasuresNameMap, %SupportedComparisonMeasuresMethodMap);
+
+  @SupportedComparisonMeasures = ();
+  %SupportedComparisonMeasuresNameMap = ();
+  %SupportedComparisonMeasuresMethodMap = ();
+
+  for $SupportedComparisonMeasure (Fingerprints::FingerprintsBitVector::GetSupportedSimilarityCoefficients()) {
+    # Similarity coefficient function/method names contain "Coefficient" in their names.
+    # So take 'em out and setup a map to original function/method name...
+    $ComparisonMeasure = $SupportedComparisonMeasure;
+    $ComparisonMeasure =~ s/Coefficient$//;
+
+    push @SupportedComparisonMeasures, $ComparisonMeasure;
+    $SupportedComparisonMeasuresNameMap{lc($ComparisonMeasure)} = $ComparisonMeasure;
+    $SupportedComparisonMeasuresMethodMap{lc($ComparisonMeasure)} = $SupportedComparisonMeasure;
+  }
+
+  # Setup a list of similarity coefficients to use for calculating similarity matrices for bit vector strings...
+  my($SpecifiedMeasure, @SpecifiedComparisonMeasures, %SpecifiedComparisonMeasuresNameMap, %SpecifiedComparisonMeasuresMethodMap, %SpecifiedComparisonMeasuresParameterMap);
+
+  @SpecifiedComparisonMeasures = ();
+  %SpecifiedComparisonMeasuresNameMap = ();
+  %SpecifiedComparisonMeasuresMethodMap = ();
+  %SpecifiedComparisonMeasuresParameterMap = ();
+
+  if ($Options{bitvectorcomparisonmode} =~ /^All$/i) {
+    push @SpecifiedComparisonMeasures, @SupportedComparisonMeasures;
+  }
+  else {
+    # Comma delimited list of similarity coefficients...
+    my($BitVectorComparisonMode, @SpecifiedMeasures, @UnsupportedSpecifiedMeasures);
+
+    $BitVectorComparisonMode = $Options{bitvectorcomparisonmode};
+    $BitVectorComparisonMode =~ s/ //g;
+    @SpecifiedMeasures = split ",", $BitVectorComparisonMode;
+    @UnsupportedSpecifiedMeasures = ();
+
+    for $SpecifiedMeasure (@SpecifiedMeasures) {
+      if (exists($SupportedComparisonMeasuresMethodMap{lc($SpecifiedMeasure)})) {
+	push @SpecifiedComparisonMeasures, $SpecifiedMeasure;
+      }
+      else {
+	push @UnsupportedSpecifiedMeasures, $SpecifiedMeasure;
+      }
+    }
+    if (@UnsupportedSpecifiedMeasures) {
+      if (@UnsupportedSpecifiedMeasures > 1) {
+	warn "Error: The values specified - ", JoinWords(\@UnsupportedSpecifiedMeasures, ", ", 0)," - for option \"-b --BitVectorComparisonMode\" are not valid.\n";
+      }
+      else {
+	warn "Error: The value specified, @UnsupportedSpecifiedMeasures, for option \"-b --BitVectorComparisonMode\" is not valid.\n";
+      }
+      die "Allowed values:", JoinWords(\@SupportedComparisonMeasures, ", ", 0), "\n";
+    }
+  }
+  for $SpecifiedMeasure (@SpecifiedComparisonMeasures) {
+    $SpecifiedComparisonMeasuresMethodMap{lc($SpecifiedMeasure)} = $SupportedComparisonMeasuresMethodMap{lc($SpecifiedMeasure)};
+    $SpecifiedComparisonMeasuresNameMap{lc($SpecifiedMeasure)} = $SupportedComparisonMeasuresNameMap{lc($SpecifiedMeasure)};
+  }
+
+  $OptionsInfo{BitVectorComparisonMode} = $Options{bitvectorcomparisonmode};
+  $OptionsInfo{SpecifiedBitVectorComparisonsRef} = \@SpecifiedComparisonMeasures;
+  $OptionsInfo{SpecifiedBitVectorComparisonsNameRef} = \%SpecifiedComparisonMeasuresNameMap;
+  $OptionsInfo{SpecifiedBitVectorComparisonsMethodRef} = \%SpecifiedComparisonMeasuresMethodMap;
+
+  # Make sure valid alpha parameter is specified for Tversky calculation...
+  my($SpecifiedMeasure1, $SpecifiedMeasure2);
+  $OptionsInfo{Alpha} = '';
+  $SpecifiedMeasure1 = 'TverskySimilarity';
+  $SpecifiedMeasure2 = 'WeightedTverskySimilarity';
+  if ($SpecifiedComparisonMeasuresNameMap{lc($SpecifiedMeasure1)} || $SpecifiedComparisonMeasuresNameMap{lc($SpecifiedMeasure2)}) {
+    if (IsEmpty($Options{alpha})) {
+      die "Error: You must specify a value for \"-a, --alpha\" option in \"$SpecifiedMeasure1, $SpecifiedMeasure2, or All\" \"-m --mode\". \n";
+    }
+    my($Alpha);
+    $Alpha = $Options{alpha};
+    if (!(IsFloat($Alpha) && $Alpha >=0 && $Alpha <= 1)) {
+      die "Error: The value specified, $Options{alpha}, for option \"-a, --alpha\" is not valid. Allowed values: >= 0 and <= 1\n";
+    }
+    $OptionsInfo{Alpha} = $Alpha;
+  }
+
+  # Make sure valid beta parameter is specified for WeightedTanimoto and WeightedTversky
+  # calculations...
+  $OptionsInfo{Beta} = '';
+  $SpecifiedMeasure1 = 'WeightedTverskySimilarity';
+  $SpecifiedMeasure2 = 'WeightedTanimotoSimilarity';
+  if ($SpecifiedComparisonMeasuresNameMap{lc($SpecifiedMeasure1)} || $SpecifiedComparisonMeasuresNameMap{lc($SpecifiedMeasure2)}) {
+    if (IsEmpty($Options{beta})) {
+      die "Error: You must specify a value for \"-b, --beta\" option in \"$SpecifiedMeasure1, $SpecifiedMeasure2, or All\" \"-m --mode\". \n";
+    }
+    my($Beta);
+    $Beta = $Options{beta};
+    if (!(IsFloat($Beta) && $Beta >=0 && $Beta <= 1)) {
+      die "Error: The value specified, $Options{beta}, for option \"-b, --beta\" is not valid. Allowed values: >= 0 and <= 1\n";
+    }
+    $OptionsInfo{Beta} = $Beta;
+  }
+
+  # Setup any parameters required for specified comparison menthod...
+  for $SpecifiedMeasure (@SpecifiedComparisonMeasures) {
+    @{$SpecifiedComparisonMeasuresParameterMap{lc($SpecifiedMeasure)}} = ();
+    if ($SpecifiedMeasure =~ /^TverskySimilarity$/i) {
+      push @{$SpecifiedComparisonMeasuresParameterMap{lc($SpecifiedMeasure)}}, $OptionsInfo{Alpha};
+    }
+    elsif ($SpecifiedMeasure =~ /^WeightedTverskySimilarity$/i) {
+      push @{$SpecifiedComparisonMeasuresParameterMap{lc($SpecifiedMeasure)}}, $OptionsInfo{Alpha};
+      push @{$SpecifiedComparisonMeasuresParameterMap{lc($SpecifiedMeasure)}}, $OptionsInfo{Beta};
+    }
+    elsif ($SpecifiedMeasure =~ /^WeightedTanimotoSimilarity$/i) {
+      push @{$SpecifiedComparisonMeasuresParameterMap{lc($SpecifiedMeasure)}}, $OptionsInfo{Beta};
+    }
+  }
+  $OptionsInfo{SpecifiedBitVectorComparisonsParameterRef} = \%SpecifiedComparisonMeasuresParameterMap;
+}
+
+# Process options related to comparion of vector strings...
+#
+sub ProcessVectorComparisonOptions {
+  # Setup specified similarity coefficients for vector strings..
+  my($ComparisonMeasure, $SupportedComparisonMeasure, @SupportedComparisonMeasures, %SupportedComparisonMeasuresNameMap, %SupportedComparisonMeasuresMethodMap);
+
+  @SupportedComparisonMeasures = ();
+  %SupportedComparisonMeasuresNameMap = ();
+  %SupportedComparisonMeasuresMethodMap = ();
+  for $SupportedComparisonMeasure (Fingerprints::FingerprintsVector::GetSupportedDistanceAndSimilarityCoefficients()) {
+    # Similarity and distance coefficient function/method names contain "Coefficient" in their names.
+    # So take 'em out and setup a map to original function/method name...
+    $ComparisonMeasure = $SupportedComparisonMeasure;
+    if ($ComparisonMeasure =~ /Coefficient$/i) {
+      $ComparisonMeasure =~ s/Coefficient$//i;
+    }
+    push @SupportedComparisonMeasures, $ComparisonMeasure;
+    $SupportedComparisonMeasuresNameMap{lc($ComparisonMeasure)} = $ComparisonMeasure;
+    $SupportedComparisonMeasuresMethodMap{lc($ComparisonMeasure)} = $SupportedComparisonMeasure;
+  }
+
+  # Setup a list of similarity coefficients to use for calculating similarity matrices for bit vector strings...
+  my($SpecifiedMeasure, @SpecifiedComparisonMeasures, %SpecifiedComparisonMeasuresNameMap, %SpecifiedComparisonMeasuresMethodMap, %SpecifiedComparisonMeasuresParameterMap);
+
+  @SpecifiedComparisonMeasures = ();
+  %SpecifiedComparisonMeasuresNameMap = ();
+  %SpecifiedComparisonMeasuresMethodMap = ();
+
+  if ($Options{vectorcomparisonmode} =~ /^All$/i) {
+    push @SpecifiedComparisonMeasures, @SupportedComparisonMeasures;
+  }
+  else {
+    # Comma delimited list of similarity coefficients...
+    my($VectorComparisonMode, @SpecifiedMeasures, @UnsupportedSpecifiedMeasures);
+
+    $VectorComparisonMode = $Options{vectorcomparisonmode};
+    $VectorComparisonMode =~ s/ //g;
+    @SpecifiedMeasures = split ",", $VectorComparisonMode;
+    @UnsupportedSpecifiedMeasures = ();
+
+    for $SpecifiedMeasure (@SpecifiedMeasures) {
+      if (exists($SupportedComparisonMeasuresMethodMap{lc($SpecifiedMeasure)})) {
+	push @SpecifiedComparisonMeasures, $SpecifiedMeasure;
+      }
+      else {
+	push @UnsupportedSpecifiedMeasures, $SpecifiedMeasure;
+      }
+    }
+    if (@UnsupportedSpecifiedMeasures) {
+      if (@UnsupportedSpecifiedMeasures > 1) {
+	warn "Error: The values specified - ", JoinWords(\@UnsupportedSpecifiedMeasures, ", ", 0)," - for option \"-v --VectorComparisonMode\" are not valid.\n";
+      }
+      else {
+	warn "Error: The value specified, @UnsupportedSpecifiedMeasures, for option \"-v --VectorComparisonMode\" is not valid.\n";
+      }
+      die "Allowed values:", JoinWords(\@SupportedComparisonMeasures, ", ", 0), "\n";
+    }
+  }
+  for $SpecifiedMeasure (@SpecifiedComparisonMeasures) {
+    $SpecifiedComparisonMeasuresMethodMap{lc($SpecifiedMeasure)} = $SupportedComparisonMeasuresMethodMap{lc($SpecifiedMeasure)};
+    $SpecifiedComparisonMeasuresNameMap{lc($SpecifiedMeasure)} = $SupportedComparisonMeasuresNameMap{lc($SpecifiedMeasure)};
+  }
+
+  $OptionsInfo{VectorComparisonMode} = $Options{vectorcomparisonmode};
+  $OptionsInfo{SpecifiedVectorComparisonsRef} = \@SpecifiedComparisonMeasures;
+  $OptionsInfo{SpecifiedVectorComparisonsNameRef} = \%SpecifiedComparisonMeasuresNameMap;
+  $OptionsInfo{SpecifiedVectorComparisonsMethodRef} = \%SpecifiedComparisonMeasuresMethodMap;
+
+  # Setup specified vector comparison calculation modes...
+  my(@SpecifiedVectorComparisonModes);
+  @SpecifiedVectorComparisonModes = ();
+  if ($Options{vectorcomparisonformulism} =~ /^All$/i) {
+    push @SpecifiedVectorComparisonModes, ("AlgebraicForm", "BinaryForm", "SetTheoreticForm");
+  }
+  else {
+    my($SpecifiedFormulism, @SpecifiedFormulismWords);
+
+    @SpecifiedFormulismWords = split /\,/, $Options{vectorcomparisonformulism};
+    for $SpecifiedFormulism (@SpecifiedFormulismWords) {
+      if ($SpecifiedFormulism !~ /^(AlgebraicForm|BinaryForm|SetTheoreticForm)$/i) {
+	die "Error: The value specified, $SpecifiedFormulism, for option \"--VectorComparisonFormulism\" is not valid. Allowed values: AlgebraicForm, BinaryForm or SetTheoreticForm\n";
+      }
+      push @SpecifiedVectorComparisonModes, $SpecifiedFormulism;
+    }
+  }
+  $OptionsInfo{VectorComparisonFormulism} = $Options{vectorcomparisonformulism};
+  $OptionsInfo{SpecifiedVectorComparisonModesRef} = \@SpecifiedVectorComparisonModes;
+
+  # Setup any parameters required for specified comparison menthod...
+  for $SpecifiedMeasure (@SpecifiedComparisonMeasures) {
+    @{$SpecifiedComparisonMeasuresParameterMap{lc($SpecifiedMeasure)}} = ();
+    push @{$SpecifiedComparisonMeasuresParameterMap{lc($SpecifiedMeasure)}}, ($Options{fast} ? 1 : 0);
+  }
+  $OptionsInfo{SpecifiedVectorComparisonsParameterRef} = \%SpecifiedComparisonMeasuresParameterMap;
+}
+
+# Setup script usage  and retrieve command line arguments specified using various options...
+sub SetupScriptUsage {
+
+  # Retrieve all the options...
+  %Options = ();
+
+  $Options{alpha} = 0.5;
+  $Options{beta} = 1;
+
+  $Options{bitvectorcomparisonmode} = "TanimotoSimilarity";
+
+  $Options{colmode} = 'colnum';
+
+  $Options{compoundidprefix} = 'Cmpd';
+  $Options{compoundidmode} = 'LabelPrefix';
+
+  $Options{detail} = 1;
+
+  $Options{indelim} = 'comma';
+  $Options{outdelim} = 'comma';
+
+  $Options{inputdatamode} = 'LoadInMemory';
+
+  $Options{mode} = 'AutoDetect';
+
+  $Options{outmatrixformat} = 'RowsAndColumns';
+
+  $Options{outmatrixtype} = 'FullMatrix';
+
+  $Options{quote} = 'yes';
+  $Options{precision} = 2;
+
+  $Options{vectorcomparisonmode} = "TanimotoSimilarity";
+  $Options{vectorcomparisonformulism} = "AlgebraicForm";
+
+  if (!GetOptions(\%Options, "alpha=f", "beta=f", "bitvectorcomparisonmode|b=s", "colmode|c=s", "compoundidcol=s", "compoundidprefix=s", "compoundidfield=s", "compoundidmode=s", "detail|d=i", "fast|f", "fingerprintscol=s", "fingerprintsfield=s", "help|h", "indelim=s", "inputdatamode=s", "mode|m=s", "outdelim=s", "overwrite|o", "outmatrixformat=s", "outmatrixtype=s", "precision|p=s", "quote|q=s", "root|r=s", "vectorcomparisonmode|v=s", "vectorcomparisonformulism=s", "workingdir|w=s")) {
+    die "\nTo get a list of valid options and their values, use \"$ScriptName -h\" or\n\"perl -S $ScriptName -h\" command and try again...\n";
+  }
+  if ($Options{workingdir}) {
+    if (! -d $Options{workingdir}) {
+      die "Error: The value specified, $Options{workingdir}, for option \"-w --workingdir\" is not a directory name.\n";
+    }
+    chdir $Options{workingdir} or die "Error: Couldn't chdir $Options{workingdir}: $! \n";
+  }
+  if ($Options{colmode} !~ /^(ColNum|ColLabel)$/i) {
+    die "Error: The value specified, $Options{colmode}, for option \"-c, --ColMode\" is not valid. Allowed values: ColNum, or ColLabel\n";
+  }
+  if ($Options{compoundidmode} !~ /^(DataField|MolName|LabelPrefix|MolNameOrLabelPrefix)$/i) {
+    die "Error: The value specified, $Options{compoundidmode}, for option \"--CompoundIDMode\" is not valid. Allowed values: DataField, MolName, LabelPrefix or MolNameOrLabelPrefix\n";
+  }
+  if (!IsPositiveInteger($Options{detail})) {
+    die "Error: The value specified, $Options{detail}, for option \"-d, --detail\" is not valid. Allowed values: > 0 \n";
+  }
+  if ($Options{inputdatamode} !~ /^(LoadInMemory|ScanFile)$/i) {
+    die "Error: The value specified, $Options{inputdatamode}, for option \"--InputDataMode\" is not valid. Allowed values: LoadInMemory or ScanFile\n";
+  }
+  if ($Options{mode} !~ /^(AutoDetect|FingerprintsBitVectorString|FingerprintsVectorString)$/i) {
+    die "Error: The value specified, $Options{mode}, for option \"-m, --mode\" is not valid. Allowed values: AutoDetect, FingerprintsBitVectorString or FingerprintsVectorString \n";
+  }
+  if ($Options{indelim} !~ /^(comma|semicolon)$/i) {
+    die "Error: The value specified, $Options{indelim}, for option \"--InDelim\" is not valid. Allowed values: comma, or semicolon\n";
+  }
+  if ($Options{outdelim} !~ /^(comma|semicolon|tab)$/i) {
+    die "Error: The value specified, $Options{outdelim}, for option \"--OutDelim\" is not valid. Allowed values: comma, tab, or semicolon\n";
+  }
+  if ($Options{outmatrixformat} !~ /^(RowsAndColumns|IDPairsAndValue)$/i) {
+    die "Error: The value specified, $Options{outmatrixformat}, for option \"--OutMatrixFormat\" is not valid. Allowed values: RowsAndColumns or IDPairsAndValue\n";
+  }
+  if ($Options{outmatrixtype} !~ /^(FullMatrix|UpperTriangularMatrix|LowerTriangularMatrix)$/i) {
+    die "Error: The value specified, $Options{outmatrixtype}, for option \"--OutMatrixType\" is not valid. Allowed values: FullMatrix, UpperTriangularMatrix or LowerTriangularMatrix\n";
+  }
+  if ($Options{quote} !~ /^(Yes|No)$/i) {
+    die "Error: The value specified, $Options{quote}, for option \"-q --quote\" is not valid. Allowed values: Yes or No\n";
+  }
+  if (!IsPositiveInteger($Options{precision})) {
+    die "Error: The value specified, $Options{precision}, for option \"--precision\" is not valid. Allowed values: > 0 \n";
+  }
+}
+
+__END__
+
+=head1 NAME
+
+SimilarityMatricesFingerprints.pl - Calculate similarity matrices using fingerprints strings data in SD, FP and CSV/TSV text file(s)
+
+=head1 SYNOPSIS
+
+SimilarityMatricesFingerprints.pl SDFile(s) FPFile(s) TextFile(s)...
+
+SimilarityMatricesFingerprints.pl [B<--alpha> I<number>] [B<--beta> I<number>]
+[B<-b, --BitVectorComparisonMode> I<All | "TanimotoSimilarity,[ TverskySimilarity, ... ]">]
+[B<-c, --ColMode> I<ColNum | ColLabel>] [B<--CompoundIDCol> I<col number | col name>]
+[B<--CompoundIDPrefix> I<text>] [B<--CompoundIDField> I<DataFieldName>]
+[B<--CompoundIDMode> I<DataField | MolName | LabelPrefix | MolNameOrLabelPrefix>]
+[B<-d, --detail> I<InfoLevel>] [B<-f, --fast>] [B<--FingerprintsCol> I<col number | col name>]
+[B<--FingerprintsField> I<FieldLabel>] [B<-h, --help>]  [B<--InDelim> I<comma | semicolon>]
+[B<--InputDataMode> I<LoadInMemory | ScanFile>]
+[B<-m, --mode> I<AutoDetect | FingerprintsBitVectorString | FingerprintsVectorString>]
+[B<--OutDelim> I<comma | tab | semicolon>] [B<--OutMatrixFormat> I<RowsAndColumns | IDPairsAndValue>]
+[B<--OutMatrixType> I<FullMatrix | UpperTriangularMatrix | LowerTriangularMatrix>]
+[B<-o, --overwrite>] [B<-p, --precision> I<number>]
+[B<-q, --quote> I<Yes | No>] [B<-r, --root> I<RootName>]
+[B<-v, --VectorComparisonMode> I<All | "TanimotoSimilairy, [ ManhattanDistance, ...]">]
+[B<--VectorComparisonFormulism> I<All | "AlgebraicForm, [BinaryForm, SetTheoreticForm]">]
+[B<-w, --WorkingDir> dirname] SDFile(s) FPFile(s) TextFile(s)...
+
+=head1 DESCRIPTION
+
+Calculate similarity matrices using fingerprint bit-vector or vector strings data in I<SD, FP
+and CSV/TSV> text file(s) and generate CSV/TSV text file(s) containing values for specified
+similarity and distance coefficients.
+
+The scripts SimilarityMatrixSDFiles.pl and SimilarityMatrixTextFiles.pl have been removed from the
+current release of MayaChemTools and their functionality merged with this script.
+
+The valid I<SDFile> extensions are I<.sdf> and I<.sd>. All SD files in a current directory
+can be specified either by I<*.sdf> or the current directory name.
+
+The valid I<FPFile> extensions are I<.fpf> and I<.fp>. All FP files in a current directory
+can be specified either by I<*.fpf> or the current directory name.
+
+The valid I<TextFile> extensions are I<.csv> and I<.tsv> for comma/semicolon and tab
+delimited text files respectively. All other file names are ignored. All text files in a
+current directory can be specified by I<*.csv>, I<*.tsv>, or the current directory
+name. The B<--indelim> option determines the format of I<TextFile(s)>. Any file
+which doesn't correspond to the format indicated by B<--indelim> option is ignored.
+
+Example of I<FP> file containing fingerprints bit-vector string data:
+
+    #
+    # Package = MayaChemTools 7.4
+    # ReleaseDate = Oct 21, 2010
+    #
+    # TimeStamp =  Mon Mar 7 15:14:01 2011
+    #
+    # FingerprintsStringType = FingerprintsBitVector
+    #
+    # Description = PathLengthBits:AtomicInvariantsAtomTypes:MinLength1:...
+    # Size = 1024
+    # BitStringFormat = HexadecimalString
+    # BitsOrder = Ascending
+    #
+    Cmpd1 9c8460989ec8a49913991a6603130b0a19e8051c89184414953800cc21510...
+    Cmpd2 000000249400840040100042011001001980410c000000001010088001120...
+    ... ...
+    ... ..
+
+Example of I<FP> file containing fingerprints vector string data:
+
+    #
+    # Package = MayaChemTools 7.4
+    # ReleaseDate = Oct 21, 2010
+    #
+    # TimeStamp =  Mon Mar 7 15:14:01 2011
+    #
+    # FingerprintsStringType = FingerprintsVector
+    #
+    # Description = PathLengthBits:AtomicInvariantsAtomTypes:MinLength1:...
+    # VectorStringFormat = IDsAndValuesString
+    # VectorValuesType = NumericalValues
+    #
+    Cmpd1 338;C F N O C:C C:N C=O CC CF CN CO C:C:C C:C:N C:CC C:CF C:CN C:
+    N:C C:NC CC:N CC=O CCC CCN CCO CNC NC=O O=CO C:C:C:C C:C:C:N C:C:CC...;
+    33 1 2 5 21 2 2 12 1 3 3 20 2 10 2 2 1 2 2 2 8 2 5 1 1 1 19 2 8 2 2 2 2
+    6 2 2 2 2 2 2 2 2 3 2 2 1 4 1 5 1 1 18 6 2 2 1 2 10 2 1 2 1 2 2 2 2 ...
+    Cmpd2 103;C N O C=N C=O CC CN CO CC=O CCC CCN CCO CNC N=CN NC=O NCN O=C
+    O C CC=O CCCC CCCN CCCO CCNC CNC=N CNC=O CNCN CCCC=O CCCCC CCCCN CC...;
+    15 4 4 1 2 13 5 2 2 15 5 3 2 2 1 1 1 2 17 7 6 5 1 1 1 2 15 8 5 7 2 2 2 2
+    1 2 1 1 3 15 7 6 8 3 4 4 3 2 2 1 2 3 14 2 4 7 4 4 4 4 1 1 1 2 1 1 1 ...
+    ... ...
+    ... ...
+
+Example of I<SD> file containing fingerprints bit-vector string data:
+
+    ... ...
+    ... ...
+    $$$$
+    ... ...
+    ... ...
+    ... ...
+    41 44  0  0  0  0  0  0  0  0999 V2000
+     -3.3652    1.4499    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
+    ... ...
+    2  3  1  0  0  0  0
+    ... ...
+    M  END
+    >  <CmpdID>
+    Cmpd1
+
+    >  <PathLengthFingerprints>
+    FingerprintsBitVector;PathLengthBits:AtomicInvariantsAtomTypes:MinLengt
+    h1:MaxLength8;1024;HexadecimalString;Ascending;9c8460989ec8a49913991a66
+    03130b0a19e8051c89184414953800cc2151082844a201042800130860308e8204d4028
+    00831048940e44281c00060449a5000ac80c894114e006321264401600846c050164462
+    08190410805000304a10205b0100e04c0038ba0fad0209c0ca8b1200012268b61c0026a
+    aa0660a11014a011d46
+
+    $$$$
+    ... ...
+    ... ...
+
+Example of CSV I<Text> file containing fingerprints bit-vector string data:
+
+    "CompoundID","PathLengthFingerprints"
+    "Cmpd1","FingerprintsBitVector;PathLengthBits:AtomicInvariantsAtomTypes
+    :MinLength1:MaxLength8;1024;HexadecimalString;Ascending;9c8460989ec8a4
+    9913991a6603130b0a19e8051c89184414953800cc2151082844a20104280013086030
+    8e8204d402800831048940e44281c00060449a5000ac80c894114e006321264401..."
+    ... ...
+    ... ...
+
+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 OPTIONS
+
+=over 4
+
+=item B<--alpha> I<number>
+
+Value of alpha parameter for calculating I<Tversky> similarity coefficient specified for
+B<-b, --BitVectorComparisonMode> option. It corresponds to weights assigned for bits set
+to "1" in a pair of fingerprint bit-vectors during the calculation of similarity coefficient. Possible
+values: I<0 to 1>. Default value: <0.5>.
+
+=item B<--beta> I<number>
+
+Value of beta parameter for calculating I<WeightedTanimoto> and  I<WeightedTversky>
+similarity coefficients specified for B<-b, --BitVectorComparisonMode> option. It is used to
+weight the contributions of bits set to "0" during the calculation of similarity coefficients. Possible
+values: I<0 to 1>. Default value of <1> makes I<WeightedTanimoto> and  I<WeightedTversky>
+equivalent to I<Tanimoto> and  I<Tversky>.
+
+=item B<-b, --BitVectorComparisonMode> I<All | "TanimotoSimilarity,[TverskySimilarity,...]">
+
+Specify what similarity coefficients to use for calculating similarity matrices for fingerprints bit-vector
+strings data values in I<TextFile(s)>: calculate similarity matrices for all supported similarity
+coefficients or specify a comma delimited list of similarity coefficients. Possible values:
+I<All | "TanimotoSimilarity,[TverskySimilarity,...]>. Default: I<TanimotoSimilarity>
+
+I<All> uses complete list of supported similarity coefficients: I<BaroniUrbaniSimilarity, BuserSimilarity,
+CosineSimilarity, DiceSimilarity, DennisSimilarity, ForbesSimilarity, FossumSimilarity, HamannSimilarity, JacardSimilarity,
+Kulczynski1Similarity, Kulczynski2Similarity, MatchingSimilarity, McConnaugheySimilarity, OchiaiSimilarity,
+PearsonSimilarity, RogersTanimotoSimilarity, RussellRaoSimilarity, SimpsonSimilarity, SkoalSneath1Similarity,
+SkoalSneath2Similarity, SkoalSneath3Similarity, TanimotoSimilarity, TverskySimilarity, YuleSimilarity,
+WeightedTanimotoSimilarity, WeightedTverskySimilarity>. These similarity coefficients are described below.
+
+For two fingerprint bit-vectors A and B of same size, let:
+
+    Na = Number of bits set to "1" in A
+    Nb = Number of bits set to "1" in B
+    Nc = Number of bits set to "1" in both A and B
+    Nd = Number of bits set to "0" in both A and B
+
+    Nt = Number of bits set to "1" or "0" in A or B (Size of A or B)
+    Nt = Na + Nb - Nc + Nd
+
+    Na - Nc = Number of bits set to "1" in A but not in B
+    Nb - Nc = Number of bits set to "1" in B but not in A
+
+Then, various similarity coefficients [ Ref. 40 - 42 ] for a pair of bit-vectors A and B are
+defined as follows:
+
+I<BaroniUrbaniSimilarity>: ( SQRT( Nc * Nd ) + Nc ) / (  SQRT ( Nc * Nd ) + Nc + ( Na - Nc )  + ( Nb - Nc ) ) ( same as Buser )
+
+I<BuserSimilarity>: ( SQRT ( Nc * Nd ) + Nc ) / (  SQRT ( Nc * Nd ) + Nc + ( Na - Nc )  + ( Nb - Nc ) ) ( same as BaroniUrbani )
+
+I<CosineSimilarity>: Nc / SQRT ( Na * Nb ) (same as Ochiai)
+
+I<DiceSimilarity>: (2 * Nc) / ( Na + Nb )
+
+I<DennisSimilarity>: ( Nc * Nd - ( ( Na - Nc ) * ( Nb - Nc ) ) ) / SQRT ( Nt * Na * Nb)
+
+I<ForbesSimilarity>: ( Nt * Nc ) / ( Na * Nb )
+
+I<FossumSimilarity>: ( Nt * ( ( Nc - 1/2 ) ** 2 ) / ( Na * Nb )
+
+I<HamannSimilarity>: ( ( Nc + Nd ) - ( Na - Nc ) - ( Nb - Nc ) ) / Nt
+
+I<JaccardSimilarity>: Nc /  ( ( Na - Nc) + ( Nb - Nc ) + Nc ) = Nc / ( Na + Nb - Nc ) (same as Tanimoto)
+
+I<Kulczynski1Similarity>: Nc / ( ( Na - Nc ) + ( Nb - Nc) ) = Nc / ( Na + Nb - 2Nc )
+
+I<Kulczynski2Similarity>: ( ( Nc / 2 ) * ( 2 * Nc + ( Na - Nc ) + ( Nb - Nc) ) ) / ( ( Nc + ( Na - Nc ) ) * ( Nc + ( Nb - Nc ) ) ) = 0.5 * ( Nc / Na + Nc / Nb )
+
+I<MatchingSimilarity>: ( Nc + Nd ) / Nt
+
+I<McConnaugheySimilarity>: ( Nc ** 2 - ( Na - Nc ) * ( Nb - Nc) ) / (  Na * Nb )
+
+I<OchiaiSimilarity>: Nc / SQRT ( Na * Nb ) (same as Cosine)
+
+I<PearsonSimilarity>: ( ( Nc * Nd ) - ( ( Na - Nc ) * ( Nb - Nc ) ) / SQRT ( Na * Nb * (  Na - Nc + Nd ) * ( Nb - Nc + Nd ) )
+
+I<RogersTanimotoSimilarity>: ( Nc + Nd ) / ( ( Na - Nc)  + ( Nb  - Nc) + Nt) = ( Nc + Nd ) / ( Na  + Nb  - 2Nc + Nt)
+
+I<RussellRaoSimilarity>: Nc / Nt
+
+I<SimpsonSimilarity>: Nc / MIN ( Na, Nb)
+
+I<SkoalSneath1Similarity>: Nc / ( Nc + 2 * ( Na - Nc)  + 2 * ( Nb - Nc) ) = Nc / ( 2 * Na + 2 * Nb - 3 * Nc )
+
+I<SkoalSneath2Similarity>: ( 2 * Nc + 2 * Nd ) / ( Nc + Nd + Nt )
+
+I<SkoalSneath3Similarity>: ( Nc + Nd ) / ( ( Na - Nc ) + ( Nb - Nc ) ) = ( Nc + Nd ) / ( Na + Nb - 2 * Nc  )
+
+I<TanimotoSimilarity>: Nc /  ( ( Na - Nc) + ( Nb - Nc ) + Nc ) = Nc / ( Na + Nb - Nc ) (same as Jaccard)
+
+I<TverskySimilarity>: Nc / ( alpha * ( Na - Nc ) + ( 1 - alpha) * ( Nb - Nc) + Nc ) = Nc / ( alpha * ( Na - Nb )  + Nb)
+
+I<YuleSimilarity>: ( ( Nc * Nd ) - ( ( Na - Nc ) * ( Nb - Nc ) ) ) / ( ( Nc * Nd ) + ( ( Na - Nc ) * ( Nb - Nc ) )  )
+
+Values of Tanimoto/Jaccard and Tversky coefficients are dependent on only those bit which
+are set to "1" in both A and B. In order to take into account all bit positions, modified versions
+of Tanimoto [ Ref. 42 ] and Tversky [  Ref. 43 ] have been developed.
+
+Let:
+
+    Na' = Number of bits set to "0" in A
+    Nb' = Number of bits set to "0" in B
+    Nc' = Number of bits set to "0" in both A and B
+
+Tanimoto': Nc' /  ( ( Na' - Nc') + ( Nb' - Nc' ) + Nc' ) = Nc' / ( Na' + Nb' - Nc' )
+
+Tversky': Nc' / ( alpha * ( Na' - Nc' ) + ( 1 - alpha) * ( Nb' - Nc' ) + Nc' ) = Nc' / ( alpha * ( Na' - Nb' )  + Nb')
+
+Then:
+
+I<WeightedTanimotoSimilarity> = beta * Tanimoto + (1 - beta) * Tanimoto'
+
+I<WeightedTverskySimilarity> = beta * Tversky + (1 - beta) * Tversky'
+
+=item B<-c, --ColMode> I<ColNum | ColLabel>
+
+Specify how columns are identified in I<TextFile(s)>: using column number or column
+label. Possible values: I<ColNum or ColLabel>. Default value: I<ColNum>.
+
+=item B<--CompoundIDCol> I<col number | col name>
+
+This value is B<-c, --ColMode> mode specific. It specifies input I<TextFile(s)> column to use for
+generating compound ID for similarity matrices  in output I<TextFile(s)>. Possible values: I<col number
+or col label>. Default value: I<first column containing the word compoundID in its column label or sequentially
+generated IDs>.
+
+=item B<--CompoundIDPrefix> I<text>
+
+Specify compound ID prefix to use during sequential generation of compound IDs for input I<SDFile(s)>
+and I<TextFile(s)>. Default value: I<Cmpd>. The default value generates compound IDs which look
+like Cmpd<Number>.
+
+For input I<SDFile(s)>, this value is only used during I<LabelPrefix | MolNameOrLabelPrefix> values
+of B<--CompoundIDMode> option; otherwise, it's ignored.
+
+Examples for I<LabelPrefix> or I<MolNameOrLabelPrefix> value of B<--CompoundIDMode>:
+
+    Compound
+
+The values specified above generates compound IDs which correspond to Compound<Number>
+instead of default value of Cmpd<Number>.
+
+=item B<--CompoundIDField> I<DataFieldName>
+
+Specify input I<SDFile(s)> datafield label for generating compound IDs. This value is only used
+during I<DataField> value of B<--CompoundIDMode> option.
+
+Examples for I<DataField> value of B<--CompoundIDMode>:
+
+    MolID
+    ExtReg
+
+=item B<--CompoundIDMode> I<DataField | MolName | LabelPrefix | MolNameOrLabelPrefix>
+
+Specify how to generate compound IDs from input I<SDFile(s)> for similarity matrix CSV/TSV text
+file(s): use a I<SDFile(s)> datafield value; use molname line from I<SDFile(s)>; generate a sequential ID
+with specific prefix; use combination of both MolName and LabelPrefix with usage of LabelPrefix values
+for empty molname lines.
+
+Possible values: I<DataField | MolName | LabelPrefix | MolNameOrLabelPrefix>.
+Default: I<LabelPrefix>.
+
+For I<MolNameAndLabelPrefix> value of B<--CompoundIDMode>, molname line in I<SDFile(s)> takes
+precedence over sequential compound IDs generated using I<LabelPrefix> and only empty molname
+values are replaced with sequential compound IDs.
+
+=item B<-d, --detail> I<InfoLevel>
+
+Level of information to print about lines being ignored. Default: I<1>. Possible values:
+I<1, 2 or 3>.
+
+=item B<-f, --fast>
+
+In this mode, fingerprints columns specified using B<--FingerprintsCol> for I<TextFile(s)> and
+B<--FingerprintsField> for I<SDFile(s)> are assumed to contain valid fingerprints data and no
+checking is performed before calculating similarity matrices. By default, fingerprints data is
+validated before computing pairwise similarity and distance coefficients.
+
+=item B<--FingerprintsCol> I<col number | col name>
+
+This value is B<-c, --colmode> specific. It specifies fingerprints column to use during
+calculation similarity matrices for I<TextFile(s)>. Possible values: I<col number or col label>.
+Default value: I<first column containing the word Fingerprints in its column label>.
+
+=item B<--FingerprintsField> I<FieldLabel>
+
+Fingerprints field label to use during calculation similarity matrices for I<SDFile(s)>.
+Default value: I<first data field label containing the word Fingerprints in its label>
+
+=item B<-h, --help>
+
+Print this help message.
+
+=item B<--InDelim> I<comma | semicolon>
+
+Input delimiter for CSV I<TextFile(s)>. Possible values: I<comma or semicolon>.
+Default value: I<comma>. For TSV files, this option is ignored and I<tab> is used as a
+delimiter.
+
+=item B<--InputDataMode> I<LoadInMemory | ScanFile>
+
+Specify how fingerprints bit-vector or vector strings data from I<SD, FP and CSV/TSV>
+fingerprint file(s) is processed: Retrieve, process and load all available fingerprints
+data in memory; Retrieve and process data for fingerprints one at a time. Possible values
+: I<LoadInMemory | ScanFile>. Default: I<LoadInMemory>.
+
+During I<LoadInMemory> value of B<--InputDataMode>, fingerprints bit-vector or vector
+strings data from input file is retrieved, processed, and loaded into memory all at once
+as fingerprints objects for generation for similarity matrices.
+
+During I<ScanFile> value of  B<--InputDataMode>, multiple passes over the input fingerprints
+file are performed to retrieve and process fingerprints bit-vector or vector strings data one at
+a time to generate fingerprints objects used during generation of similarity matrices. A temporary
+copy of the input fingerprints file is made at the start and deleted after generating the matrices.
+
+I<ScanFile> value of  B<--InputDataMode> allows processing of arbitrary large fingerprints files
+without any additional memory requirement.
+
+=item B<-m, --mode> I<AutoDetect | FingerprintsBitVectorString | FingerprintsVectorString>
+
+Format of fingerprint strings data in  I<TextFile(s)>: automatically detect format of fingerprints
+string created by MayaChemTools fingerprints generation scripts or explicitly specify its format.
+Possible values: I<AutoDetect | FingerprintsBitVectorString | FingerprintsVectorString>. Default
+value: I<AutoDetect>.
+
+=item B<--OutDelim> I<comma | tab | semicolon>
+
+Delimiter for output CSV/TSV text file(s). Possible values: I<comma, tab, or semicolon>
+Default value: I<comma>.
+
+=item B<--OutMatrixFormat> I<RowsAndColumns | IDPairsAndValue>
+
+Specify how similarity or distance values calculated for fingerprints vector and bit-vector strings
+are written to the output CSV/TSV text file(s): Generate text files containing rows and columns
+with their labels corresponding to compound IDs and each matrix element value corresponding to
+similarity or distance between corresponding compounds; Generate text files containing rows containing
+compoundIDs for two compounds followed by similarity or distance value between these compounds.
+
+Possible values: I<RowsAndColumns, or IDPairsAndValue>. Default value: I<RowsAndColumns>.
+
+The value of B<--OutMatrixFormat> in conjunction with B<--OutMatrixType> determines type
+of data written to output files and allows generation of up to 6 different output data formats:
+
+    OutMatrixFormat OutMatrixType
+
+    RowsAndColumns  FullMatrix   [ DEFAULT ]
+    RowsAndColumns  UpperTriangularMatrix
+    RowsAndColumns  LowerTriangularMatrix
+
+    IDPairsAndValue FullMatrix
+    IDPairsAndValue UpperTriangularMatrix
+    IDPairsAndValue LowerTriangularMatrix
+
+Example of data in output file for I<RowsAndColumns> B<--OutMatrixFormat> value for
+I<FullMatrix> valueof B<--OutMatrixType>:
+
+    "","Cmpd1","Cmpd2","Cmpd3","Cmpd4","Cmpd5","Cmpd6",... ...
+    "Cmpd1","1","0.04","0.25","0.13","0.11","0.2",... ...
+    "Cmpd2","0.04","1","0.06","0.05","0.19","0.07",... ...
+    "Cmpd3","0.25","0.06","1","0.12","0.22","0.25",... ...
+    "Cmpd4","0.13","0.05","0.12","1","0.11","0.13",... ...
+    "Cmpd5","0.11","0.19","0.22","0.11","1","0.17",... ...
+    "Cmpd6","0.2","0.07","0.25","0.13","0.17","1",... ...
+    ... ... ..
+    ... ... ..
+    ... ... ..
+
+Example of data in output file for I<RowsAndColumns> B<--OutMatrixFormat> value for
+I<UpperTriangularMatrix> value of B<--OutMatrixType>:
+
+    "","Cmpd1","Cmpd2","Cmpd3","Cmpd4","Cmpd5","Cmpd6",... ...
+    "Cmpd1","1","0.04","0.25","0.13","0.11","0.2",... ...
+    "Cmpd2","1","0.06","0.05","0.19","0.07",... ...
+    "Cmpd3","1","0.12","0.22","0.25",... ...
+    "Cmpd4","1","0.11","0.13",... ...
+    "Cmpd5","1","0.17",... ...
+    "Cmpd6","1",... ...
+    ... ... ..
+    ... ... ..
+    ... ... ..
+
+Example of data in output file for I<RowsAndColumns> B<--OutMatrixFormat> value for
+I<LowerTriangularMatrix> value of B<--OutMatrixType>:
+
+    "","Cmpd1","Cmpd2","Cmpd3","Cmpd4","Cmpd5","Cmpd6",... ...
+    "Cmpd1","1"
+    "Cmpd2","0.04","1"
+    "Cmpd3","0.25","0.06","1"
+    "Cmpd4","0.13","0.05","0.12","1"
+    "Cmpd5","0.11","0.19","0.22","0.11","1"
+    "Cmpd6","0.2","0.07","0.25","0.13","0.17","1"
+    ... ... ..
+    ... ... ..
+    ... ... ..
+
+
+Example of data in output file for I<IDPairsAndValue> B<--OutMatrixFormat> value for
+<FullMatrix> value of  B<OutMatrixType>:
+
+    "CmpdID1","CmpdID2","Coefficient Value"
+    "Cmpd1","Cmpd1","1"
+    "Cmpd1","Cmpd2","0.04"
+    "Cmpd1","Cmpd3","0.25"
+    "Cmpd1","Cmpd4","0.13"
+    ... ... ...
+    ... ... ...
+    ... ... ...
+    "Cmpd2","Cmpd1","0.04"
+    "Cmpd2","Cmpd2","1"
+    "Cmpd2","Cmpd3","0.06"
+    "Cmpd2","Cmpd4","0.05"
+    ... ... ...
+    ... ... ...
+    ... ... ...
+    "Cmpd3","Cmpd1","0.25"
+    "Cmpd3","Cmpd2","0.06"
+    "Cmpd3","Cmpd3","1"
+    "Cmpd3","Cmpd4","0.12"
+    ... ... ...
+    ... ... ...
+    ... ... ...
+
+Example of data in output file for I<IDPairsAndValue> B<--OutMatrixFormat> value for
+<UpperTriangularMatrix> value of B<--OutMatrixType>:
+
+    "CmpdID1","CmpdID2","Coefficient Value"
+    "Cmpd1","Cmpd1","1"
+    "Cmpd1","Cmpd2","0.04"
+    "Cmpd1","Cmpd3","0.25"
+    "Cmpd1","Cmpd4","0.13"
+    ... ... ...
+    ... ... ...
+    ... ... ...
+    "Cmpd2","Cmpd2","1"
+    "Cmpd2","Cmpd3","0.06"
+    "Cmpd2","Cmpd4","0.05"
+    ... ... ...
+    ... ... ...
+    ... ... ...
+    "Cmpd3","Cmpd3","1"
+    "Cmpd3","Cmpd4","0.12"
+    ... ... ...
+    ... ... ...
+    ... ... ...
+
+Example of data in output file for I<IDPairsAndValue> B<--OutMatrixFormat> value for
+<LowerTriangularMatrix> value of B<--OutMatrixType>:
+
+    "CmpdID1","CmpdID2","Coefficient Value"
+    "Cmpd1","Cmpd1","1"
+    "Cmpd2","Cmpd1","0.04"
+    "Cmpd2","Cmpd2","1"
+    "Cmpd3","Cmpd1","0.25"
+    "Cmpd3","Cmpd2","0.06"
+    "Cmpd3","Cmpd3","1"
+    "Cmpd4","Cmpd1","0.13"
+    "Cmpd4","Cmpd2","0.05"
+    "Cmpd4","Cmpd3","0.12"
+    "Cmpd4","Cmpd4","1"
+    ... ... ...
+    ... ... ...
+    ... ... ...
+
+=item B<--OutMatrixType> I<FullMatrix | UpperTriangularMatrix | LowerTriangularMatrix>
+
+Type of similarity or distance matrix to calculate for fingerprints vector and bit-vector strings:
+Calculate full matrix; Calculate lower triangular matrix including diagonal; Calculate upper triangular
+matrix including diagonal.
+
+Possible values: I<FullMatrix, UpperTriangularMatrix, or LowerTriangularMatrix>. Default value:
+I<FullMatrix>.
+
+The value of B<--OutMatrixType> in conjunction with B<--OutMatrixFormat> determines type
+of data written to output files.
+
+=item B<-o, --overwrite>
+
+Overwrite existing files
+
+=item B<-p, --precision> I<number>
+
+Precision of calculated values in the output file. Default: up to I<2> decimal places.
+Valid values: positive integers.
+
+=item B<-q, --quote> I<Yes | No>
+
+Put quote around column values in output CSV/TSV text file(s). Possible values:
+I<Yes or No>. Default value: I<Yes>.
+
+=item B<-r, --root> I<RootName>
+
+New file name is generated using the root: <Root><BitVectorComparisonMode>.<Ext> or
+<Root><VectorComparisonMode><VectorComparisonFormulism>.<Ext>.
+The csv, and tsv <Ext> values are used for comma/semicolon, and tab delimited text files
+respectively. This option is ignored for multiple input files.
+
+=item B<-v, --VectorComparisonMode> I<All | "TanimotoSimilarity,[ManhattanDistance,...]">
+
+Specify what similarity or distance coefficients to use for calculating similarity matrices for
+fingerprint vector strings data values in I<TextFile(s)>: calculate similarity matrices for all
+supported similarity and distance coefficients or specify a comma delimited list of similarity
+and distance coefficients. Possible values: I<All | "TanimotoSimilairy,[ManhattanDistance,..]">.
+Default: I<TanimotoSimilarity>.
+
+The value of B<-v, --VectorComparisonMode>, in conjunction with B<--VectorComparisonFormulism>,
+decides which type of similarity and distance coefficient formulism gets used.
+
+I<All> uses complete list of supported similarity and distance coefficients: I<CosineSimilarity,
+CzekanowskiSimilarity, DiceSimilarity, OchiaiSimilarity, JaccardSimilarity, SorensonSimilarity, TanimotoSimilarity,
+CityBlockDistance, EuclideanDistance, HammingDistance, ManhattanDistance, SoergelDistance>. These
+similarity and distance coefficients are described below.
+
+B<FingerprintsVector.pm> module, used to calculate similarity and distance coefficients,
+provides support to perform comparison between vectors containing three different types of
+values:
+
+Type I: OrderedNumericalValues
+
+    . Size of two vectors are same
+    . Vectors contain real values in a specific order. For example: MACCS keys
+      count, Topological pharmnacophore atom pairs and so on.
+
+Type II: UnorderedNumericalValues
+
+    . Size of two vectors might not be same
+    . Vectors contain unordered real value identified by value IDs. For example:
+      Toplogical atom pairs, Topological atom torsions and so on
+
+Type III: AlphaNumericalValues
+
+    . Size of two vectors might not be same
+    . Vectors contain unordered alphanumerical values. For example: Extended
+      connectivity fingerprints, atom neighborhood fingerprints.
+
+Before performing similarity or distance calculations between vectors containing UnorderedNumericalValues
+or AlphaNumericalValues, the vectors are transformed into vectors containing unique OrderedNumericalValues
+using value IDs for UnorderedNumericalValues and values itself for AlphaNumericalValues.
+
+Three forms of similarity and distance calculation between two vectors, specified using B<--VectorComparisonFormulism>
+option, are supported: I<AlgebraicForm, BinaryForm or SetTheoreticForm>.
+
+For I<BinaryForm>, the ordered list of processed final vector values containing the value or
+count of each unique value type is simply converted into a binary vector containing 1s and 0s
+corresponding to presence or absence of values before calculating similarity or distance between
+two vectors.
+
+For two fingerprint vectors A and B of same size containing OrderedNumericalValues, let:
+
+    N = Number values in A or B
+
+    Xa = Values of vector A
+    Xb = Values of vector B
+
+    Xai = Value of ith element in A
+    Xbi = Value of ith element in B
+
+   SUM = Sum of i over N values
+
+For SetTheoreticForm of calculation between two vectors, let:
+
+    SetIntersectionXaXb = SUM ( MIN ( Xai, Xbi ) )
+    SetDifferenceXaXb = SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) )
+
+For BinaryForm of calculation between two vectors, let:
+
+    Na = Number of bits set to "1" in A = SUM ( Xai )
+    Nb = Number of bits set to "1" in B = SUM ( Xbi )
+    Nc = Number of bits set to "1" in both A and B = SUM ( Xai * Xbi )
+    Nd = Number of bits set to "0" in both A and B
+       = SUM ( 1 - Xai - Xbi + Xai * Xbi)
+
+    N = Number of bits set to "1" or "0" in A or B = Size of A or B = Na + Nb - Nc + Nd
+
+Additionally, for BinaryForm various values also correspond to:
+
+    Na = | Xa |
+    Nb = | Xb |
+    Nc = | SetIntersectionXaXb |
+    Nd = N - | SetDifferenceXaXb |
+
+    | SetDifferenceXaXb | = N - Nd = Na + Nb - Nc + Nd - Nd = Na + Nb - Nc
+                          =  | Xa | + | Xb | - | SetIntersectionXaXb |
+
+Various similarity and distance coefficients [ Ref 40, Ref 62, Ref 64 ] for a pair of vectors A and B
+in I<AlgebraicForm, BinaryForm and SetTheoreticForm> are defined as follows:
+
+B<CityBlockDistance>: ( same as HammingDistance and ManhattanDistance)
+
+I<AlgebraicForm>: SUM ( ABS ( Xai - Xbi ) )
+
+I<BinaryForm>: ( Na - Nc ) + ( Nb - Nc ) = Na + Nb - 2 * Nc
+
+I<SetTheoreticForm>: | SetDifferenceXaXb | - | SetIntersectionXaXb | = SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) )
+
+B<CosineSimilarity>:  ( same as OchiaiSimilarityCoefficient)
+
+I<AlgebraicForm>: SUM ( Xai * Xbi ) / SQRT ( SUM ( Xai ** 2) * SUM ( Xbi ** 2) )
+
+I<BinaryForm>: Nc / SQRT ( Na * Nb)
+
+I<SetTheoreticForm>: | SetIntersectionXaXb | / SQRT ( |Xa| * |Xb| ) = SUM ( MIN ( Xai, Xbi ) ) / SQRT ( SUM ( Xai ) * SUM ( Xbi ) )
+
+B<CzekanowskiSimilarity>: ( same as DiceSimilarity and SorensonSimilarity)
+
+I<AlgebraicForm>: ( 2 * ( SUM ( Xai * Xbi ) )  ) / ( SUM ( Xai ** 2) + SUM ( Xbi **2 ) )
+
+I<BinaryForm>: 2 * Nc / ( Na + Nb )
+
+I<SetTheoreticForm>: 2 * | SetIntersectionXaXb | / ( |Xa| + |Xb| ) = 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) )
+
+B<DiceSimilarity>: ( same as CzekanowskiSimilarity and SorensonSimilarity)
+
+I<AlgebraicForm>: ( 2 * ( SUM ( Xai * Xbi ) )  ) / ( SUM ( Xai ** 2) + SUM ( Xbi **2 ) )
+
+I<BinaryForm>: 2 * Nc / ( Na + Nb )
+
+I<SetTheoreticForm>: 2 * | SetIntersectionXaXb | / ( |Xa| + |Xb| ) = 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) )
+
+B<EuclideanDistance>:
+
+I<AlgebraicForm>: SQRT ( SUM ( ( ( Xai - Xbi ) ** 2 ) ) )
+
+I<BinaryForm>: SQRT ( ( Na - Nc ) + ( Nb - Nc ) ) = SQRT ( Na + Nb - 2 * Nc )
+
+I<SetTheoreticForm>: SQRT ( | SetDifferenceXaXb | - | SetIntersectionXaXb | ) = SQRT (  SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) )
+
+B<HammingDistance>:  ( same as CityBlockDistance and ManhattanDistance)
+
+I<AlgebraicForm>: SUM ( ABS ( Xai - Xbi ) )
+
+I<BinaryForm>: ( Na - Nc ) + ( Nb - Nc ) = Na + Nb - 2 * Nc
+
+I<SetTheoreticForm>: | SetDifferenceXaXb | - | SetIntersectionXaXb | = SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) )
+
+B<JaccardSimilarity>: ( same as TanimotoSimilarity)
+
+I<AlgebraicForm>:  SUM ( Xai * Xbi ) / ( SUM ( Xai ** 2 ) + SUM ( Xbi ** 2 ) - SUM ( Xai * Xbi ) )
+
+I<BinaryForm>:  Nc / ( ( Na - Nc ) + ( Nb - Nc ) + Nc ) = Nc / ( Na + Nb - Nc )
+
+I<SetTheoreticForm>: | SetIntersectionXaXb | / | SetDifferenceXaXb | = SUM ( MIN ( Xai, Xbi ) ) / (  SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) ) )
+
+B<ManhattanDistance>:  ( same as CityBlockDistance and HammingDistance)
+
+I<AlgebraicForm>: SUM ( ABS ( Xai - Xbi ) )
+
+I<BinaryForm>: ( Na - Nc ) + ( Nb - Nc ) = Na + Nb - 2 * Nc
+
+I<SetTheoreticForm>: | SetDifferenceXaXb | - | SetIntersectionXaXb | = SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) )
+
+B<OchiaiSimilarity>:  ( same as CosineSimilarity)
+
+I<AlgebraicForm>: SUM ( Xai * Xbi ) / SQRT ( SUM ( Xai ** 2) * SUM ( Xbi ** 2) )
+
+I<BinaryForm>: Nc / SQRT ( Na * Nb)
+
+I<SetTheoreticForm>: | SetIntersectionXaXb | / SQRT ( |Xa| * |Xb| ) = SUM ( MIN ( Xai, Xbi ) ) / SQRT ( SUM ( Xai ) * SUM ( Xbi ) )
+
+B<SorensonSimilarity>: ( same as CzekanowskiSimilarity and DiceSimilarity)
+
+I<AlgebraicForm>: ( 2 * ( SUM ( Xai * Xbi ) )  ) / ( SUM ( Xai ** 2) + SUM ( Xbi **2 ) )
+
+I<BinaryForm>: 2 * Nc / ( Na + Nb )
+
+I<SetTheoreticForm>: 2 * | SetIntersectionXaXb | / ( |Xa| + |Xb| ) = 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) )
+
+B<SoergelDistance>:
+
+I<AlgebraicForm>:  SUM ( ABS ( Xai - Xbi ) ) / SUM ( MAX ( Xai, Xbi ) )
+
+I<BinaryForm>: 1 - Nc / ( Na + Nb - Nc ) = ( Na + Nb - 2 * Nc ) / ( Na + Nb - Nc )
+
+I<SetTheoreticForm>: ( | SetDifferenceXaXb | - | SetIntersectionXaXb | ) / | SetDifferenceXaXb | = ( SUM ( Xai ) + SUM ( Xbi ) - 2 * ( SUM ( MIN ( Xai, Xbi ) ) ) ) / ( SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) ) )
+
+B<TanimotoSimilarity>:  ( same as JaccardSimilarity)
+
+I<AlgebraicForm>:  SUM ( Xai * Xbi ) / ( SUM ( Xai ** 2 ) + SUM ( Xbi ** 2 ) - SUM ( Xai * Xbi ) )
+
+I<BinaryForm>:  Nc / ( ( Na - Nc ) + ( Nb - Nc ) + Nc ) = Nc / ( Na + Nb - Nc )
+
+I<SetTheoreticForm>: | SetIntersectionXaXb | / | SetDifferenceXaXb | = SUM ( MIN ( Xai, Xbi ) ) / (  SUM ( Xai ) + SUM ( Xbi ) - SUM ( MIN ( Xai, Xbi ) ) )
+
+=item B<--VectorComparisonFormulism> I<All | "AlgebraicForm,[BinaryForm,SetTheoreticForm]">
+
+Specify fingerprints vector comparison formulism to use for calculation similarity and distance
+coefficients during B<-v, --VectorComparisonMode>: use all supported comparison formulisms
+or specify a comma delimited. Possible values: I<All | "AlgebraicForm,[BinaryForm,SetTheoreticForm]">.
+Default value: I<AlgebraicForm>.
+
+I<All> uses all three forms of supported vector comparison formulism for values of B<-v, --VectorComparisonMode>
+option.
+
+For fingerprint vector strings containing B<AlphaNumericalValues> data values - B<ExtendedConnectivityFingerprints>,
+B<AtomNeighborhoodsFingerprints> and so on - all three formulism result in same value during similarity and distance
+calculations.
+
+=item B<-w, --WorkingDir> I<DirName>
+
+Location of working directory. Default: current directory.
+
+=back
+
+=head1 EXAMPLES
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints in text file present in a column
+name containing Fingerprint substring by loading all fingerprints data into memory and create a
+SampleFPHexTanimotoSimilarity.csv file containing compound IDs retrieved from column name
+containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -o SampleFPHex.csv
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints in SD File present in a data field
+with Fingerprint substring in its label by loading all fingerprints data into memory and create a
+SampleFPHexTanimotoSimilarity.csv file containing sequentially generated compound IDs with
+Cmpd prefix, type:
+
+    % SimilarityMatricesFingerprints.pl -o SampleFPHex.sdf
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints in FP file by loading all fingerprints
+data into memory and create a SampleFPHexTanimotoSimilarity.csv file along with compound IDs
+retrieved from FP file, type:
+
+    % SimilarityMatricesFingerprints.pl -o SampleFPHex.fpf
+
+To generate a lower triangular similarity matrix corresponding to Tanimoto similarity coefficient for
+fingerprints bit-vector strings data corresponding to supported fingerprints in text file present in a
+column name containing Fingerprint substring by loading all fingerprints data into memory  and create
+a SampleFPHexTanimotoSimilarity.csv file containing compound IDs retrieved from column name
+containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -o --InputDataMode LoadInMemory
+      --OutMatrixFormat RowsAndColumns --OutMatrixType LowerTriangularMatrix
+      SampleFPHex.csv
+
+To generate a upper triangular similarity matrix corresponding to Tanimoto similarity coefficient for
+fingerprints bit-vector strings data corresponding to supported fingerprints in text file present in a
+column name containing Fingerprint substring by loading all fingerprints data into memory  and create
+a SampleFPHexTanimotoSimilarity.csv file in IDPairsAndValue format containing compound IDs retrieved
+from column name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -o --InputDataMode LoadInMemory
+      --OutMatrixFormat IDPairsAndValue --OutMatrixType UpperTriangularMatrix
+      SampleFPHex.csv
+
+To generate a full similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints in text file present in a column
+name containing Fingerprint substring by scanning file without loading all fingerprints data into memory
+and create a SampleFPHexTanimotoSimilarity.csv file containing compound IDs retrieved from
+column name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -o --InputDataMode ScanFile
+      --OutMatrixFormat RowsAndColumns --OutMatrixType FullMatrix
+      SampleFPHex.csv
+
+To generate a lower triangular similarity matrix corresponding to Tanimoto similarity coefficient for
+fingerprints bit-vector strings data corresponding to supported fingerprints in text file present in a
+column name containing Fingerprint substring by scanning file without loading all fingerprints data into
+memory and create a SampleFPHexTanimotoSimilarity.csv file in IDPairsAndValue format containing
+compound IDs retrieved from column name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -o --InputDataMode ScanFile
+      --OutMatrixFormat IDPairsAndValue --OutMatrixType LowerTriangularMatrix
+      SampleFPHex.csv
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient using algebraic formulism
+for fingerprints vector strings data corresponding to supported fingerprints in text file present in a column name
+containing Fingerprint substring and create a SampleFPCountTanimotoSimilarityAlgebraicForm.csv file
+containing compound IDs retrieved from column name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -o SampleFPCount.csv
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient using algebraic formulism
+for fingerprints vector strings data corresponding to supported fingerprints in SD file present in a data field with
+Fingerprint substring in its label and create a SampleFPCountTanimotoSimilarityAlgebraicForm.csv file
+containing sequentially generated compound IDs with Cmpd prefix, type:
+
+    % SimilarityMatricesFingerprints.pl -o SampleFPCount.sdf
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient using algebraic formulism
+vector strings data corresponding to supported fingerprints in FP file and create a
+SampleFPCountTanimotoSimilarityAlgebraicForm.csv file along with compound IDs retrieved from FP file, type:
+
+    % SimilarityMatricesFingerprints.pl -o SampleFPCount.fpf
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints in text file present in a column name
+containing Fingerprint substring and create a SampleFPHexTanimotoSimilarity.csv file in
+IDPairsAndValue format containing compound IDs retrieved from column name containing
+CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl --OutMatrixFormat IDPairsAndValue -o
+      SampleFPHex.csv
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints in SD file present in a data field with
+Fingerprint substring in its label and create a SampleFPHexTanimotoSimilarity.csv file in
+IDPairsAndValue format containing sequentially generated compound IDs with Cmpd prefix,
+type:
+
+    % SimilarityMatricesFingerprints.pl --OutMatrixFormat IDPairsAndValue -o
+      SampleFPHex.sdf
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints in FP file and create a
+SampleFPHexTanimotoSimilarity.csv file in IDPairsAndValue format along with compound IDs retrieved
+from FP file, type:
+
+    % SimilarityMatricesFingerprints.pl --OutMatrixFormat IDPairsAndValue -o
+      SampleFPHex.fpf
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints in SD file present in a data field with
+Fingerprint substring in its label and create a SampleFPHexTanimotoSimilarity.csv file
+containing compound IDs from mol name line, type:
+
+    % SimilarityMatricesFingerprints.pl --CompoundIDMode MolName -o
+      SampleFPHex.sdf
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints present in a data field with
+Fingerprint substring in its label and create a SampleFPHexTanimotoSimilarity.csv file
+containing compound IDs from data field name Mol_ID, type:
+
+    % SimilarityMatricesFingerprints.pl --CompoundIDMode DataField
+      --CompoundIDField Mol_ID -o SampleFPBin.sdf
+
+To generate similarity matrices corresponding to Buser, Dice and Tanimoto similarity coefficient
+for fingerprints bit-vector strings data corresponding to supported fingerprints present in a column
+name containing Fingerprint substring and create SampleFPBin[CoefficientName]Similarity.csv files
+containing compound IDs retrieved from column name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -b "BuserSimilarity,DiceSimilarity,
+      TanimotoSimilarity" -o SampleFPBin.csv
+
+To generate similarity matrices corresponding to Buser, Dice and Tanimoto similarity coefficient
+for fingerprints bit-vector strings data corresponding to supported fingerprints present in a data field with
+Fingerprint substring in its label and create SampleFPBin[CoefficientName]Similarity.csv files
+containing sequentially generated compound IDs with Cmpd prefix, type:
+
+    % SimilarityMatricesFingerprints.pl -b "BuserSimilarity,DiceSimilarity,
+      TanimotoSimilarity" -o SampleFPBin.sdf
+
+To generate similarity matrices corresponding to CityBlock distance and Tanimoto similarity coefficients using
+algebraic formulism for fingerprints vector strings data corresponding to supported fingerprints present in
+a column name containing Fingerprint substring and create  SampleFPCount[CoefficientName]AlgebraicForm.csv
+files containing compound IDs retrieved from column name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -v "CityBlockDistance,
+      TanimotoSimilarity" -o SampleFPCount.csv
+
+To generate similarity matrices corresponding to CityBlock distance and Tanimoto similarity coefficients using
+algebraic formulism for fingerprints vector strings data corresponding to supported fingerprints present in
+a data field with Fingerprint substring in its label and create SampleFPCount[CoefficientName]AlgebraicForm.csv
+files containing sequentially generated compound IDs with Cmpd prefix, type:
+
+    % SimilarityMatricesFingerprints.pl -v "CityBlockDistance,
+      TanimotoSimilarity" -o SampleFPCount.sdf
+
+To generate similarity matrices corresponding to CityBlock distance Tanimoto similarity coefficients using
+binary formulism for fingerprints vector strings data corresponding to supported fingerprints present in
+a column name containing Fingerprint substring and create SampleFPCount[CoefficientName]Binary.csv
+files containing compound IDs retrieved from column name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -v "CityBlockDistance,
+      TanimotoSimilarity" --VectorComparisonFormulism BinaryForm -o
+      SampleFPCount.csv
+
+To generate similarity matrices corresponding to CityBlock distance Tanimoto similarity coefficients using
+binary formulism for fingerprints vector strings data corresponding to supported fingerprints present in
+a data field with Fingerprint substring in its label  and create SampleFPCount[CoefficientName]Binary.csv
+files containing sequentially generated compound IDs with Cmpd prefix, type:
+
+    % SimilarityMatricesFingerprints.pl -v "CityBlockDistance,
+      TanimotoSimilarity" --VectorComparisonFormulism BinaryForm -o
+      SampleFPCount.sdf
+
+To generate similarity matrices corresponding to CityBlock distance Tanimoto similarity coefficients using
+all supported comparison formulisms for fingerprints vector strings data corresponding to supported
+fingerprints present in a column name containing Fingerprint substring and create
+SampleFPCount[CoefficientName][FormulismName].csv files containing compound IDs retrieved from column
+name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -v "CityBlockDistance,
+      TanimotoSimilarity" --VectorComparisonFormulism All -o SampleFPCount.csv
+
+To generate similarity matrices corresponding to CityBlock distance Tanimoto similarity coefficients using
+all supported comparison formulisms for fingerprints vector strings data corresponding to supported
+fingerprints present in a data field with Fingerprint substring in its label and create
+SampleFPCount[CoefficientName][FormulismName].csv files containing  sequentially generated
+compound IDs with Cmpd prefix, type:
+
+    % SimilarityMatricesFingerprints.pl -v "CityBlockDistance,TanimotoSimilarity"
+      --VectorComparisonFormulism All -o SampleFPCount.sdf
+
+To generate similarity matrices corresponding to all available similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints present in a column name
+containing Fingerprint substring and create SampleFPHex[CoefficientName].csv files
+containing compound IDs retrieved from column name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -m AutoDetect --BitVectorComparisonMode
+      All --alpha 0.5 -beta 0.5 -o SampleFPHex.csv
+
+To generate similarity matrices corresponding to all available similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints present in a data field with Fingerprint
+substring in its label and create SampleFPHex[CoefficientName].csv files containing  sequentially
+generated compound IDs with Cmpd prefix, type
+
+    % SimilarityMatricesFingerprints.pl -m AutoDetect --BitVectorComparisonMode
+      All --alpha 0.5 -beta 0.5 -o SampleFPHex.sdf
+
+To generate similarity matrices corresponding to all available similarity and distance coefficients using
+all comparison formulism for fingerprints vector strings data corresponding to supported fingerprints
+present in a column name containing Fingerprint substring and create
+SampleFPCount[CoefficientName][FormulismName].csv files containing compound IDs
+retrieved from column name containing CompoundID substring, type:
+
+    % SimilarityMatricesFingerprints.pl -m AutoDetect --VectorComparisonMode
+      All --VectorComparisonFormulism All -o SampleFPCount.csv
+
+To generate similarity matrices corresponding to all available similarity and distance coefficients using
+all comparison formulism for fingerprints vector strings data corresponding to supported fingerprints
+present in a data field with Fingerprint substring in its label and create
+SampleFPCount[CoefficientName][FormulismName].csv files containing  sequentially generated
+compound IDs with Cmpd prefix, type:
+
+    % SimilarityMatricesFingerprints.pl -m AutoDetect --VectorComparisonMode
+      All --VectorComparisonFormulism All -o SampleFPCount.sdf
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints present in a column number 2
+and create a SampleFPHexTanimotoSimilarity.csv file containing compound IDs retrieved column
+number 1, type:
+
+    % SimilarityMatricesFingerprints.pl --ColMode ColNum --CompoundIDCol 1
+      --FingerprintsCol 2 -o SampleFPHex.csv
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints present in a data field name
+Fingerprints and create a SampleFPHexTanimotoSimilarity.csv file containing compound IDs
+present in data field name Mol_ID, type:
+
+    % SimilarityMatricesFingerprints.pl --FingerprintsField Fingerprints
+      --CompoundIDMode DataField --CompoundIDField Mol_ID -o SampleFPHex.sdf
+
+To generate a similarity matrix corresponding to Tversky similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints present in a column named Fingerprints
+and create a SampleFPHexTverskySimilarity.tsv file containing compound IDs retrieved column named
+CompoundID, type:
+
+    % SimilarityMatricesFingerprints.pl --BitVectorComparisonMode
+      TverskySimilarity --alpha 0.5 --ColMode ColLabel --CompoundIDCol
+      CompoundID --FingerprintsCol Fingerprints --OutDelim Tab --quote No
+      -o SampleFPHex.csv
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints present in a data field
+with Fingerprint substring in its label and create a SampleFPHexTanimotoSimilarity.csv file
+containing compound IDs from molname line or sequentially generated compound IDs
+with Mol prefix, type:
+
+    % SimilarityMatricesFingerprints.pl --CompoundIDMode MolnameOrLabelPrefix
+      --CompoundIDPrefix Mol -o SampleFPHex.sdf
+
+To generate a similarity matrix corresponding to Tanimoto similarity coefficient for fingerprints
+bit-vector strings data corresponding to supported fingerprints present in a data field with
+Fingerprint substring in its label and create a SampleFPHexTanimotoSimilarity.tsv file
+containing sequentially generated compound IDs with Cmpd prefix, type:
+
+    % SimilarityMatricesFingerprints.pl -OutDelim Tab --quote No -o SampleFPHex.sdf
+
+=head1 AUTHOR
+
+Manish Sud <msud@san.rr.com>
+
+=head1 SEE ALSO
+
+InfoFingerprintsFiles.pl, SimilaritySearchingFingerprints.pl, AtomNeighborhoodsFingerprints.pl,
+ExtendedConnectivityFingerprints.pl, MACCSKeysFingerprints.pl, PathLengthFingerprints.pl,
+TopologicalAtomPairsFingerprints.pl, TopologicalAtomTorsionsFingerprints.pl,
+TopologicalPharmacophoreAtomPairsFingerprints.pl, TopologicalPharmacophoreAtomTripletsFingerprints.pl
+
+=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