MayaChemTools

   1 #!/usr/bin/perl -w
   2 #
   3 # $RCSfile: InfoFingerprintsFiles.pl,v $
   4 # $Date: 2015/02/28 20:46:20 $
   5 # $Revision: 1.20 $
   6 #
   7 # Author: Manish Sud <msud@san.rr.com>
   8 #
   9 # Copyright (C) 2015 Manish Sud. All rights reserved.
  10 #
  11 # This file is part of MayaChemTools.
  12 #
  13 # MayaChemTools is free software; you can redistribute it and/or modify it under
  14 # the terms of the GNU Lesser General Public License as published by the Free
  15 # Software Foundation; either version 3 of the License, or (at your option) any
  16 # later version.
  17 #
  18 # MayaChemTools is distributed in the hope that it will be useful, but without
  19 # any warranty; without even the implied warranty of merchantability of fitness
  20 # for a particular purpose.  See the GNU Lesser General Public License for more
  21 # details.
  22 #
  23 # You should have received a copy of the GNU Lesser General Public License
  24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
  25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
  26 # Boston, MA, 02111-1307, USA.
  27 #
  28 
  29 use strict;
  30 use FindBin; use lib "$FindBin::Bin/../lib";
  31 use Getopt::Long;
  32 use File::Basename;
  33 use Text::ParseWords;
  34 use Benchmark;
  35 use FileUtil;
  36 use TextUtil;
  37 use Fingerprints::FingerprintsFileUtil;
  38 use Fingerprints::FingerprintsStringUtil;
  39 
  40 my($ScriptName, %Options, $StartTime, $EndTime, $TotalTime);
  41 
  42 # Autoflush STDOUT
  43 $| = 1;
  44 
  45 # Starting message...
  46 $ScriptName = basename($0);
  47 print "\n$ScriptName: Starting...\n\n";
  48 $StartTime = new Benchmark;
  49 
  50 # Get the options and setup script...
  51 SetupScriptUsage();
  52 if ($Options{help} || @ARGV < 1) {
  53   die GetUsageFromPod("$FindBin::Bin/$ScriptName");
  54 }
  55 
  56 my(@FingerprintsFilesList);
  57 @FingerprintsFilesList = ExpandFileNames(\@ARGV, "sdf sd fpf fp csv tsv");
  58 
  59 # Process options...
  60 print "Processing options...\n";
  61 my(%OptionsInfo);
  62 ProcessOptions();
  63 
  64 # Setup information about input files...
  65 print "Checking input fingerprints file(s)...\n";
  66 my(%FingerprintsFilesInfo);
  67 RetrieveFingerprintsFilesInfo();
  68 
  69 # Process input files..
  70 my($FileIndex);
  71 if (@FingerprintsFilesList > 1) {
  72   print "\nProcessing fingerprints files...\n";
  73 }
  74 for $FileIndex (0 .. $#FingerprintsFilesList) {
  75   if ($FingerprintsFilesInfo{FileOkay}[$FileIndex]) {
  76     print "\nProcessing file $FingerprintsFilesList[$FileIndex]...\n";
  77     ListFingerprintsFileInfo($FileIndex);
  78   }
  79 }
  80 ListTotalSizeOfFiles();
  81 
  82 print "\n$ScriptName:Done...\n\n";
  83 
  84 $EndTime = new Benchmark;
  85 $TotalTime = timediff ($EndTime, $StartTime);
  86 print "Total time: ", timestr($TotalTime), "\n";
  87 
  88 ###############################################################################
  89 
  90 # List approptiate information...
  91 #
  92 sub ListFingerprintsFileInfo {
  93   my($FileIndex) = @_;
  94   my($FileName, $FingerprintsFileIO, $InvalidFingerprintsFileData, $InvalidFingerprintsData, $DataEntryCount, $ValidDataEntryCount, $InvalidDataEntryCount, $MissingDataEntryCount, $BitVectorDataEntryCount, $VectorDataEntryCount, $FingerprintsObject, $FingerprintsType, $TotalBitDensity, $FileType, $DataEntryLabel);
  95 
  96   $FileType = $FingerprintsFilesInfo{FileType}[$FileIndex];
  97   $DataEntryLabel = ($FileType =~ /^SD$/i) ? 'compounds' : 'lines';
  98 
  99   ($DataEntryCount, $ValidDataEntryCount, $InvalidDataEntryCount, $MissingDataEntryCount, $BitVectorDataEntryCount, $VectorDataEntryCount, $TotalBitDensity) = (0) x 7;
 100 
 101   $FingerprintsFileIO = Fingerprints::FingerprintsFileUtil::NewFingerprintsFileIO(%{$FingerprintsFilesInfo{FingerprintsFileIOParameters}[$FileIndex]});
 102   $FingerprintsFileIO->Open();
 103 
 104   $InvalidFingerprintsFileData = $FingerprintsFileIO->IsFingerprintsFileDataValid() ? 0 : 1;
 105 
 106   FINGERPRINTS: while ($FingerprintsFileIO->Read()) {
 107     $DataEntryCount++;
 108 
 109     # Missing data...
 110     if ($InvalidFingerprintsFileData) {
 111       $MissingDataEntryCount++;
 112       if ($OptionsInfo{ValidateData} || $OptionsInfo{CountEmptyFingerprints}) {
 113         ListEmptyOrInvalidFingerprintsDataInfo('EmptyData', $FingerprintsFileIO, $FileType);
 114       }
 115       next FINGERPRINTS;
 116     }
 117     $InvalidFingerprintsData = $FingerprintsFileIO->IsFingerprintsDataValid() ? 0 : 1;
 118 
 119     # Invalid data...
 120     if ($InvalidFingerprintsData) {
 121       $InvalidDataEntryCount++;
 122       if ($OptionsInfo{ValidateData}) {
 123         ListEmptyOrInvalidFingerprintsDataInfo('InvalidData', $FingerprintsFileIO, $FileType);
 124       }
 125       next FINGERPRINTS;
 126     }
 127     $ValidDataEntryCount++;
 128 
 129     $FingerprintsObject = $FingerprintsFileIO->GetFingerprints();
 130     $FingerprintsType = $FingerprintsObject->GetVectorType();
 131 
 132     if ($FingerprintsType =~ /^FingerprintsBitVector$/i) {
 133       $BitVectorDataEntryCount++;
 134       if ($OptionsInfo{ListAverageBitDensity}) {
 135         $TotalBitDensity += $FingerprintsObject->GetFingerprintsBitDensity();
 136       }
 137     }
 138     elsif ($FingerprintsType =~ /^FingerprintsVector$/i) {
 139       $VectorDataEntryCount++;
 140     }
 141 
 142     if ($OptionsInfo{ListFingerprintsDataEntryInfo}) {
 143       ListFingerprintsDataEntryInfo($FingerprintsFileIO, $FileType);
 144     }
 145 
 146   }
 147   $FingerprintsFileIO->Close();
 148 
 149   print "\nFingerprints file type: $FileType\n";
 150   if ($FileType =~ /^SD$/i) {
 151     print "Number of compounds: $DataEntryCount\n";
 152   }
 153   else {
 154     print "Number of data lines: $DataEntryCount\n";
 155   }
 156 
 157   ListFileTypeHeaderInfo($FingerprintsFileIO, $FileType);
 158 
 159   print "\nNumber of $DataEntryLabel with valid fingerprints string data: $ValidDataEntryCount\n";
 160   print "Number of $DataEntryLabel with bit-vector fingerprints string data: $BitVectorDataEntryCount\n";
 161   print "Number of $DataEntryLabel with vector fingerprints string data: $VectorDataEntryCount\n";
 162 
 163   if ($OptionsInfo{CountEmptyFingerprints}) {
 164     print "Number of $DataEntryLabel with missing fingerprints data: $MissingDataEntryCount\n";
 165     print "Number of $DataEntryLabel with invalid fingerprints data: $InvalidDataEntryCount\n";
 166   }
 167 
 168   if ($OptionsInfo{ListAverageBitDensity} && $BitVectorDataEntryCount) {
 169     my($AverageBitDensity);
 170     $AverageBitDensity = $TotalBitDensity/$BitVectorDataEntryCount;
 171     $AverageBitDensity = sprintf("%.2f", $AverageBitDensity) + 0;
 172     print "\nAverage bit density: $AverageBitDensity\n";
 173   }
 174 
 175 
 176   # File size and modification information...
 177   print "\nFile size: ", FormatFileSize($FingerprintsFilesInfo{FileSize}[$FileIndex]), " \n";
 178   print "Last modified: ", $FingerprintsFilesInfo{FileLastModified}[$FileIndex], " \n";
 179 }
 180 
 181 # List empty or invalid fingerprints file data information...
 182 #
 183 sub ListEmptyOrInvalidFingerprintsDataInfo {
 184   my($Mode, $FingerprintsFileIO, $FileType) = @_;
 185   my($ModeInfo);
 186 
 187   $ModeInfo = ($Mode =~ /^EmptyData$/i) ? "no" : "invalid";
 188 
 189   if ($FileType =~ /^SD$/i) {
 190     my($CmpdNum, $CmpdString);
 191 
 192     $CmpdNum = $FingerprintsFileIO->GetCompoundNum();
 193     if ($OptionsInfo{DetailLevel} >= 3 ) {
 194       $CmpdString = $FingerprintsFileIO->GetCompoundString();
 195       print "Compound number $CmpdNum contains $ModeInfo fingerprints data: $CmpdString \n";
 196     }
 197     elsif ($OptionsInfo{DetailLevel} >= 1 ) {
 198       print "Compound number $CmpdNum contains $ModeInfo fingerprints data...\n";
 199     }
 200   }
 201   else {
 202     my($LineNum, $DataLine);
 203 
 204     $LineNum = $FingerprintsFileIO->GetLineNum();
 205     if ($OptionsInfo{DetailLevel} >= 3 ) {
 206       $DataLine = $FingerprintsFileIO->GetDataLine();
 207       print "Data line number $LineNum contains $ModeInfo fingerprints data: $DataLine \n";
 208     }
 209     elsif ($OptionsInfo{DetailLevel} >= 1 ) {
 210       print "Data line number $LineNum contains $ModeInfo fingerprints data...\n";
 211     }
 212   }
 213 }
 214 
 215 # List detailed information about fingerprints data entry...
 216 #
 217 sub ListFingerprintsDataEntryInfo {
 218   my($FingerprintsFileIO, $FileType) = @_;
 219   my($FingerprintsObject, $FingerprintsString, $FingerprintsType, $FingerprintsDescription, $FingerprintsSize, $FingerprintsBitStringFormat, $FingerprintsBitOrder, $BitDensity, $NumOfOnBits, $FingerprintsVectorValuesType, $FingerprintsVectorValuesFormat, $NumOfNonZeroValues);
 220 
 221   $FingerprintsObject = $FingerprintsFileIO->GetFingerprints();
 222   $FingerprintsString = $FingerprintsFileIO->GetFingerprintsString();
 223 
 224   $FingerprintsType = $FingerprintsObject->GetVectorType();
 225 
 226   if ($FingerprintsType =~ /^FingerprintsBitVector$/i) {
 227     $BitDensity = '';
 228     $NumOfOnBits = '';
 229 
 230     ($FingerprintsType, $FingerprintsDescription, $FingerprintsSize, $FingerprintsBitStringFormat, $FingerprintsBitOrder) = Fingerprints::FingerprintsStringUtil::GetFingerprintsStringValues($FingerprintsString);
 231 
 232     if ($OptionsInfo{ListBitDensity} || $OptionsInfo{ListNumOfOnBits}) {
 233       if ($OptionsInfo{ListBitDensity}) {
 234         $BitDensity = $FingerprintsObject->GetFingerprintsBitDensity();
 235       }
 236       if ($OptionsInfo{ListNumOfOnBits}) {
 237         $NumOfOnBits = $FingerprintsObject->GetNumOfSetBits();
 238       }
 239     }
 240   }
 241   elsif ($FingerprintsType =~ /^FingerprintsVector$/i) {
 242     $NumOfNonZeroValues = '';
 243 
 244     ($FingerprintsType, $FingerprintsDescription, $FingerprintsSize, $FingerprintsVectorValuesType, $FingerprintsVectorValuesFormat) = Fingerprints::FingerprintsStringUtil::GetFingerprintsStringValues($FingerprintsString);
 245 
 246     if ($OptionsInfo{ListNumOfNonZeroValues}) {
 247       if ($FingerprintsVectorValuesType =~ /^AlphaNumericalValues$/i) {
 248         $NumOfNonZeroValues = 'NA';
 249       }
 250       else {
 251         $NumOfNonZeroValues = $FingerprintsObject->GetNumOfNonZeroValues();
 252       }
 253     }
 254   }
 255 
 256   if ($FileType =~ /^SD$/i) {
 257     print "Compound number: " . $FingerprintsFileIO->GetCompoundNum();
 258   }
 259   else {
 260     print "Data line number: " . $FingerprintsFileIO->GetLineNum();
 261   }
 262 
 263   if ($OptionsInfo{ListFingerprintsType}) {
 264     print "; FPType: $FingerprintsType";
 265   }
 266   if ($OptionsInfo{ListFingerprintsDescription}) {
 267     print "; FPDescription: $FingerprintsDescription";
 268   }
 269   if ($OptionsInfo{ListFingerprintsSize}) {
 270     print "; FPSize: $FingerprintsSize";
 271   }
 272 
 273   if ($FingerprintsType =~ /^FingerprintsBitVector$/i) {
 274     if ($OptionsInfo{ListFingerprintsBitStringFormat}) {
 275       print "; FPBitStringFormat: $FingerprintsBitStringFormat";
 276     }
 277     if ($OptionsInfo{ListFingerprintsBitOrder}) {
 278       print "; FPBitOrder: $FingerprintsBitOrder";
 279     }
 280     if ($OptionsInfo{ListBitDensity}) {
 281       print "; BitDensity: $BitDensity";
 282     }
 283     if ($OptionsInfo{ListNumOfOnBits}) {
 284       print "; NumOfOnBits: $NumOfOnBits";
 285     }
 286   }
 287   elsif ($FingerprintsType =~ /^FingerprintsVector$/i) {
 288     if ($OptionsInfo{ListFingerprintsVectorValuesType}) {
 289       print "; FPVectorValuesType: $FingerprintsVectorValuesType";
 290     }
 291     if ($OptionsInfo{ListFingerprintsVectorValuesFormat}) {
 292       print "; FPVectorValuesFormat: $FingerprintsVectorValuesFormat";
 293     }
 294     if ($OptionsInfo{ListNumOfNonZeroValues}) {
 295       print "; NumOfNonZeroValues: $NumOfNonZeroValues";
 296     }
 297   }
 298   print "\n";
 299 }
 300 
 301 # List file type header information...
 302 #
 303 sub ListFileTypeHeaderInfo {
 304   my($FingerprintsFileIO, $FileType) = @_;
 305   my($Key, $Value, @DataColLabels, %HeaderDataKeysAndValues);
 306 
 307   if ($FileType =~ /^Text$/i) {
 308     @DataColLabels = $FingerprintsFileIO->GetDataColLabels();
 309     print "Number of columns: " . scalar @DataColLabels . "\n";
 310     print "Column labels: ", JoinWords(\@DataColLabels, ", ", 1), "\n";
 311   }
 312   elsif ($FileType =~ /^FP$/i) {
 313     %HeaderDataKeysAndValues = $FingerprintsFileIO->GetHeaderDataKeysAndValues();
 314 
 315     print "\nFP file header data keys and values: \n#\n";
 316     for $Key ($FingerprintsFileIO->GetHeaderDataKeys()) {
 317       $Value = $HeaderDataKeysAndValues{$Key};
 318       print "# $Key = $Value\n";
 319     }
 320     print "#\n";
 321   }
 322 }
 323 
 324 # Total size of all the fiels...
 325 sub ListTotalSizeOfFiles {
 326   my($FileOkayCount, $TotalSize, $Index);
 327 
 328   $FileOkayCount = 0;
 329   $TotalSize = 0;
 330 
 331   for $Index (0 .. $#FingerprintsFilesList) {
 332     if ($FingerprintsFilesList[$Index]) {
 333       $FileOkayCount++;
 334       $TotalSize += $FingerprintsFilesInfo{FileSize}[$Index];
 335     }
 336   }
 337   if ($FileOkayCount > 1) {
 338     print "\nTotal size of $FileOkayCount files: ", FormatFileSize($TotalSize), "\n";
 339   }
 340 }
 341 
 342 # Retrieve information about fingerprints files...
 343 #
 344 sub RetrieveFingerprintsFilesInfo {
 345   my($FingerprintsFile, $Index, $FileDir, $FileExt, $FileName, $FileType, $InDelim, $ModifiedTimeString, $ModifiedDateString, %FingerprintsFileIOParameters);
 346 
 347   %FingerprintsFilesInfo = ();
 348   @{$FingerprintsFilesInfo{FileOkay}} = ();
 349   @{$FingerprintsFilesInfo{FileType}} = ();
 350   @{$FingerprintsFilesInfo{FileSize}} = ();
 351   @{$FingerprintsFilesInfo{FileLastModified}} = ();
 352   @{$FingerprintsFilesInfo{InDelim}} = ();
 353 
 354   @{$FingerprintsFilesInfo{FingerprintsFileIOParameters}} = ();
 355 
 356   FILELIST: for $Index (0 .. $#FingerprintsFilesList) {
 357     $FingerprintsFile = $FingerprintsFilesList[$Index];
 358 
 359     $FingerprintsFilesInfo{FileOkay}[$Index] = 0;
 360     $FingerprintsFilesInfo{FileType}[$Index] = '';
 361     $FingerprintsFilesInfo{FileSize}[$Index] = 0;
 362     $FingerprintsFilesInfo{FileLastModified}[$Index] = '';
 363     $FingerprintsFilesInfo{InDelim}[$Index] = "";
 364 
 365     %{$FingerprintsFilesInfo{FingerprintsFileIOParameters}[$Index]} = ();
 366 
 367     $FingerprintsFile = $FingerprintsFilesList[$Index];
 368     if (!(-e $FingerprintsFile)) {
 369       warn "Warning: Ignoring file $FingerprintsFile: It doesn't exist\n";
 370       next FILELIST;
 371     }
 372 
 373     $FileType = Fingerprints::FingerprintsFileUtil::GetFingerprintsFileType($FingerprintsFile);
 374     if (IsEmpty($FileType)) {
 375       warn "Warning: Ignoring file $FingerprintsFile: It's not a fingerprints file\n";
 376       next FILELIST;
 377     }
 378 
 379     $FileDir = ""; $FileName = ""; $FileExt = "";
 380     ($FileDir, $FileName, $FileExt) = ParseFileName($FingerprintsFile);
 381 
 382     $InDelim = ($FileExt =~ /^tsv$/i) ? 'Tab' : $OptionsInfo{InDelim};
 383 
 384     # Setup FingerprintsFileIO parameters...
 385     %FingerprintsFileIOParameters = ();
 386     FILEIOPARAMETERS: {
 387       if ($FileType =~ /^SD$/i) {
 388         %FingerprintsFileIOParameters = ('Name' => $FingerprintsFile, 'Mode' => 'Read', 'ValidateData' => $OptionsInfo{ValidateData}, 'DetailLevel' => 1, 'FingerprintsFieldLabel' => $OptionsInfo{FingerprintsFieldLabel});
 389         last FILEIOPARAMETERS;
 390       }
 391       if ($FileType =~ /^FP$/i) {
 392         %FingerprintsFileIOParameters = ('Name' => $FingerprintsFile, 'Mode' => 'Read', 'ValidateData' => $OptionsInfo{ValidateData}, 'DetailLevel' => 1);
 393         last FILEIOPARAMETERS;
 394       }
 395       if ($FileType =~ /^Text$/i) {
 396         %FingerprintsFileIOParameters = ('Name' => $FingerprintsFile, 'Mode' => 'Read', 'ValidateData' => $OptionsInfo{ValidateData}, 'DetailLevel' => 1, 'FingerprintsCol' => $OptionsInfo{FingerprintsCol}, 'ColMode' => $OptionsInfo{ColMode}, 'InDelim' => $OptionsInfo{InDelim});
 397         last FILEIOPARAMETERS;
 398       }
 399       warn "Warning: File type for fingerprints file, $FingerprintsFile, is not valid. Supported file types: SD, FP or Text\n";
 400       next FILELIST;
 401     }
 402 
 403     $FingerprintsFilesInfo{FileOkay}[$Index] = 1;
 404     $FingerprintsFilesInfo{FileType}[$Index] = $FileType;
 405 
 406     $FingerprintsFilesInfo{FileSize}[$Index] = FileSize($FingerprintsFile);
 407     ($ModifiedTimeString, $ModifiedDateString) = FormattedFileModificationTimeAndDate($FingerprintsFile);
 408     $FingerprintsFilesInfo{FileLastModified}[$Index] = "$ModifiedTimeString; $ModifiedDateString";
 409 
 410     $FingerprintsFilesInfo{InDelim}[$Index] = $InDelim;
 411 
 412     %{$FingerprintsFilesInfo{FingerprintsFileIOParameters}[$Index]} = %FingerprintsFileIOParameters;
 413   }
 414 }
 415 
 416 # Process option values...
 417 sub ProcessOptions {
 418   %OptionsInfo = ();
 419 
 420   $OptionsInfo{ListAverageBitDensity} = ($Options{all} || $Options{averagebitdensity}) ? 1 :0;
 421   $OptionsInfo{ListBitDensity} = ($Options{all} || $Options{bitdensity}) ? 1 :0;
 422 
 423   if ($OptionsInfo{ListAverageBitDensity}) {
 424     # List bit density as well...
 425     $OptionsInfo{ListBitDensity} = 1;
 426   }
 427 
 428   # By default, count number of rows containing fingerprints data...
 429   $OptionsInfo{CountFingerprints} = 1;
 430   $OptionsInfo{CountEmptyFingerprints} = ($Options{all} || $Options{empty}) ? 1 :0;
 431 
 432   $OptionsInfo{ColMode} = $Options{colmode};
 433   if (IsNotEmpty($Options{fingerprintscol})) {
 434     if ($Options{colmode} =~ /^ColNum$/i) {
 435       if (!IsPositiveInteger($Options{fingerprintscol})) {
 436         die "Error: Column value, $Options{fingerprintscol}, specified using \"--FingerprintsCol\" is not valid: Allowed integer values: > 0.\n";
 437       }
 438     }
 439     $OptionsInfo{FingerprintsCol} = $Options{fingerprintscol};
 440   }
 441   else {
 442     $OptionsInfo{FingerprintsCol} = 'AutoDetect';
 443   }
 444 
 445   if (IsNotEmpty($Options{fingerprintsfield})) {
 446     $OptionsInfo{FingerprintsFieldLabel} = $Options{fingerprintsfield};
 447   }
 448   else {
 449     $OptionsInfo{FingerprintsFieldLabel} = 'AutoDetect';
 450   }
 451 
 452   $OptionsInfo{ValidateData} = ($Options{all} || $Options{datacheck}) ? 1 :0;
 453   $OptionsInfo{DetailLevel} = $Options{detail};
 454 
 455   $OptionsInfo{ListFingerprintsType} = ($Options{all} || $Options{fingerprintstype}) ? 1 :0;
 456   $OptionsInfo{ListFingerprintsDescription} = ($Options{all} || $Options{fingerprintsdescription}) ? 1 :0;
 457   $OptionsInfo{ListFingerprintsSize} = ($Options{all} || $Options{fingerprintssize}) ? 1 :0;
 458 
 459   $OptionsInfo{ListFingerprintsBitStringFormat} = ($Options{all} || $Options{fingerprintsbitstringformat}) ? 1 :0;
 460   $OptionsInfo{ListFingerprintsBitOrder} = ($Options{all} || $Options{fingerprintsbitorder}) ? 1 :0;
 461 
 462   $OptionsInfo{ListFingerprintsVectorValuesType} = ($Options{all} || $Options{fingerprintsvectorvaluestype}) ? 1 :0;
 463   $OptionsInfo{ListFingerprintsVectorValuesFormat} = ($Options{all} || $Options{fingerprintsvectorvaluesformat}) ? 1 :0;
 464 
 465   $OptionsInfo{InDelim} = $Options{indelim};
 466 
 467   $OptionsInfo{ListNumOfOnBits} = ($Options{all} || $Options{numofonbits}) ? 1 :0;
 468   $OptionsInfo{ListNumOfNonZeroValues} = ($Options{all} || $Options{numofnonzerovalues}) ? 1 :0;
 469 
 470   $OptionsInfo{ListFingerprintsDataEntryInfo} = ($OptionsInfo{ListFingerprintsType} || $OptionsInfo{ListFingerprintsDescription} || $OptionsInfo{ListFingerprintsSize} || $OptionsInfo{ListFingerprintsBitStringFormat} || $OptionsInfo{ListFingerprintsBitOrder} || $OptionsInfo{ListFingerprintsVectorValuesType} || $OptionsInfo{ListFingerprintsVectorValuesFormat} || $OptionsInfo{ListBitDensity} || $OptionsInfo{ListAverageBitDensity} || $OptionsInfo{ListNumOfOnBits} ||  $OptionsInfo{ListNumOfNonZeroValues}) ? 1 : 0;
 471 
 472 }
 473 
 474 # Setup script usage  and retrieve command line arguments specified using various options...
 475 sub SetupScriptUsage {
 476 
 477   # Retrieve all the options...
 478   %Options = ();
 479 
 480   $Options{colmode} = 'colnum';
 481   $Options{detail} = 1;
 482   $Options{indelim} = 'comma';
 483 
 484   if (!GetOptions(\%Options, "all|a", "averagebitdensity", "bitdensity", "count", "colmode|c=s", "detail|d=i", "datacheck", "empty|e", "fingerprintsfield=s", "fingerprintscol=s", "fingerprintstype", "fingerprintsdescription", "fingerprintssize", "fingerprintsbitstringformat", "fingerprintsbitorder", "fingerprintsvectorvaluestype", "fingerprintsvectorvaluesformat", "help|h", "indelim=s", "numofonbits", "numofnonzerovalues", "workingdir|w=s")) {
 485     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";
 486   }
 487   if ($Options{workingdir}) {
 488     if (! -d $Options{workingdir}) {
 489       die "Error: The value specified, $Options{workingdir}, for option \"-w --workingdir\" is not a directory name.\n";
 490     }
 491     chdir $Options{workingdir} or die "Error: Couldn't chdir $Options{workingdir}: $! \n";
 492   }
 493   if ($Options{colmode} !~ /^(ColNum|ColLabel)$/i) {
 494     die "Error: The value specified, $Options{colmode}, for option \"-c, --ColMode\" is not valid. Allowed values: ColNum, or ColLabel\n";
 495   }
 496   if (!IsPositiveInteger($Options{detail})) {
 497     die "Error: The value specified, $Options{detail}, for option \"-d, --detail\" is not valid. Allowed values: > 0 \n";
 498   }
 499   if ($Options{indelim} !~ /^(comma|semicolon)$/i) {
 500     die "Error: The value specified, $Options{indelim}, for option \"--InDelim\" is not valid. Allowed values: comma, or semicolon\n";
 501   }
 502 }
 503