| 
0
 | 
     1 <html>
 | 
| 
 | 
     2 <head>
 | 
| 
 | 
     3 <title>MayaChemTools:Code:InfoSDFiles.pl</title>
 | 
| 
 | 
     4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
 | 
| 
 | 
     5 <link rel="stylesheet" type="text/css" href="../../../css/MayaChemToolsCode.css">
 | 
| 
 | 
     6 </head>
 | 
| 
 | 
     7 <body leftmargin="20" rightmargin="20" topmargin="10" bottommargin="10">
 | 
| 
 | 
     8 <br/>
 | 
| 
 | 
     9 <center>
 | 
| 
 | 
    10 <a href="http://www.mayachemtools.org" title="MayaChemTools Home"><img src="../../../images/MayaChemToolsLogo.gif" border="0" alt="MayaChemTools"></a>
 | 
| 
 | 
    11 </center>
 | 
| 
 | 
    12 <br/>
 | 
| 
 | 
    13 <pre>
 | 
| 
 | 
    14    1 #!/usr/bin/perl -w
 | 
| 
 | 
    15    2 <span class="c">#</span>
 | 
| 
 | 
    16    3 <span class="c"># $RCSfile: InfoSDFiles.pl,v $</span>
 | 
| 
 | 
    17    4 <span class="c"># $Date: 2015/02/28 20:46:20 $</span>
 | 
| 
 | 
    18    5 <span class="c"># $Revision: 1.35 $</span>
 | 
| 
 | 
    19    6 <span class="c">#</span>
 | 
| 
 | 
    20    7 <span class="c"># Author: Manish Sud <msud@san.rr.com></span>
 | 
| 
 | 
    21    8 <span class="c">#</span>
 | 
| 
 | 
    22    9 <span class="c"># Copyright (C) 2015 Manish Sud. All rights reserved.</span>
 | 
| 
 | 
    23   10 <span class="c">#</span>
 | 
| 
 | 
    24   11 <span class="c"># This file is part of MayaChemTools.</span>
 | 
| 
 | 
    25   12 <span class="c">#</span>
 | 
| 
 | 
    26   13 <span class="c"># MayaChemTools is free software; you can redistribute it and/or modify it under</span>
 | 
| 
 | 
    27   14 <span class="c"># the terms of the GNU Lesser General Public License as published by the Free</span>
 | 
| 
 | 
    28   15 <span class="c"># Software Foundation; either version 3 of the License, or (at your option) any</span>
 | 
| 
 | 
    29   16 <span class="c"># later version.</span>
 | 
| 
 | 
    30   17 <span class="c">#</span>
 | 
| 
 | 
    31   18 <span class="c"># MayaChemTools is distributed in the hope that it will be useful, but without</span>
 | 
| 
 | 
    32   19 <span class="c"># any warranty; without even the implied warranty of merchantability of fitness</span>
 | 
| 
 | 
    33   20 <span class="c"># for a particular purpose.  See the GNU Lesser General Public License for more</span>
 | 
| 
 | 
    34   21 <span class="c"># details.</span>
 | 
| 
 | 
    35   22 <span class="c">#</span>
 | 
| 
 | 
    36   23 <span class="c"># You should have received a copy of the GNU Lesser General Public License</span>
 | 
| 
 | 
    37   24 <span class="c"># along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or</span>
 | 
| 
 | 
    38   25 <span class="c"># write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,</span>
 | 
| 
 | 
    39   26 <span class="c"># Boston, MA, 02111-1307, USA.</span>
 | 
| 
 | 
    40   27 <span class="c">#</span>
 | 
| 
 | 
    41   28 
 | 
| 
 | 
    42   29 <span class="k">use</span> <span class="w">strict</span><span class="sc">;</span>
 | 
| 
 | 
    43   30 <span class="k">use</span> <span class="w">FindBin</span><span class="sc">;</span> <span class="k">use</span> <span class="w">lib</span> <span class="q">"$FindBin::Bin/../lib"</span><span class="sc">;</span>
 | 
| 
 | 
    44   31 <span class="k">use</span> <span class="w">Getopt::Long</span><span class="sc">;</span>
 | 
| 
 | 
    45   32 <span class="k">use</span> <span class="w">File::Basename</span><span class="sc">;</span>
 | 
| 
 | 
    46   33 <span class="k">use</span> <span class="w">Benchmark</span><span class="sc">;</span>
 | 
| 
 | 
    47   34 <span class="k">use</span> <span class="w">SDFileUtil</span><span class="sc">;</span>
 | 
| 
 | 
    48   35 <span class="k">use</span> <span class="w">TextUtil</span><span class="sc">;</span>
 | 
| 
 | 
    49   36 <span class="k">use</span> <span class="w">FileUtil</span><span class="sc">;</span>
 | 
| 
 | 
    50   37 
 | 
| 
 | 
    51   38 <span class="k">my</span><span class="s">(</span><span class="i">$ScriptName</span><span class="cm">,</span> <span class="i">%Options</span><span class="cm">,</span> <span class="i">$StartTime</span><span class="cm">,</span> <span class="i">$EndTime</span><span class="cm">,</span> <span class="i">$TotalTime</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    52   39 
 | 
| 
 | 
    53   40 <span class="c"># Autoflush STDOUT</span>
 | 
| 
 | 
    54   41 <span class="i">$|</span> = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
    55   42 
 | 
| 
 | 
    56   43 <span class="c"># Starting message...</span>
 | 
| 
 | 
    57   44 <span class="i">$ScriptName</span> = <span class="w">basename</span> <span class="i">$0</span><span class="sc">;</span>
 | 
| 
 | 
    58   45 <span class="k">print</span> <span class="q">"\n$ScriptName:Starting...\n\n"</span><span class="sc">;</span>
 | 
| 
 | 
    59   46 <span class="i">$StartTime</span> = <span class="w">new</span> <span class="w">Benchmark</span><span class="sc">;</span>
 | 
| 
 | 
    60   47 
 | 
| 
 | 
    61   48 <span class="c"># Get the options and setup script...</span>
 | 
| 
 | 
    62   49 <span class="i">SetupScriptUsage</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    63   50 <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">help</span>} || <span class="i">@ARGV</span> < <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
    64   51   <span class="k">die</span> <span class="i">GetUsageFromPod</span><span class="s">(</span><span class="q">"$FindBin::Bin/$ScriptName"</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    65   52 <span class="s">}</span>
 | 
| 
 | 
    66   53 
 | 
| 
 | 
    67   54 <span class="k">my</span><span class="s">(</span><span class="i">@SDFilesList</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    68   55 <span class="i">@SDFilesList</span> = <span class="i">ExpandFileNames</span><span class="s">(</span>\<span class="i">@ARGV</span><span class="cm">,</span> <span class="q">"sdf sd"</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    69   56 
 | 
| 
 | 
    70   57 <span class="c"># Process options...</span>
 | 
| 
 | 
    71   58 <span class="k">print</span> <span class="q">"Processing options...\n"</span><span class="sc">;</span>
 | 
| 
 | 
    72   59 <span class="k">my</span><span class="s">(</span><span class="i">%OptionsInfo</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    73   60 <span class="i">ProcessOptions</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    74   61 
 | 
| 
 | 
    75   62 <span class="c"># Setup information about input files...</span>
 | 
| 
 | 
    76   63 <span class="k">print</span> <span class="q">"Checking input SD file(s)...\n"</span><span class="sc">;</span>
 | 
| 
 | 
    77   64 <span class="k">my</span><span class="s">(</span><span class="i">%SDFilesInfo</span><span class="cm">,</span> <span class="i">%SDCmpdsInfo</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    78   65 <span class="i">RetrieveSDFilesInfo</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    79   66 <span class="i">InitializeSDCmpdsInfo</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    80   67 
 | 
| 
 | 
    81   68 <span class="c"># Process input files..</span>
 | 
| 
 | 
    82   69 <span class="k">my</span><span class="s">(</span><span class="i">$FileIndex</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    83   70 <span class="k">if</span> <span class="s">(</span><span class="i">@SDFilesList</span> > <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
    84   71   <span class="k">print</span> <span class="q">"\nProcessing SD files...\n"</span><span class="sc">;</span>
 | 
| 
 | 
    85   72 <span class="s">}</span>
 | 
| 
 | 
    86   73 <span class="k">for</span> <span class="i">$FileIndex</span> <span class="s">(</span><span class="n">0</span> .. <span class="i">$#SDFilesList</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
    87   74   <span class="k">if</span> <span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}[<span class="i">$FileIndex</span>]<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
    88   75     <span class="k">print</span> <span class="q">"\nProcessing file $SDFilesList[$FileIndex]...\n"</span><span class="sc">;</span>
 | 
| 
 | 
    89   76     <span class="i">ListSDFileInfo</span><span class="s">(</span><span class="i">$FileIndex</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    90   77   <span class="s">}</span>
 | 
| 
 | 
    91   78 <span class="s">}</span>
 | 
| 
 | 
    92   79 <span class="i">ListTotalSizeOfFiles</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    93   80 
 | 
| 
 | 
    94   81 <span class="k">print</span> <span class="q">"\n$ScriptName:Done...\n\n"</span><span class="sc">;</span>
 | 
| 
 | 
    95   82 
 | 
| 
 | 
    96   83 <span class="i">$EndTime</span> = <span class="w">new</span> <span class="w">Benchmark</span><span class="sc">;</span>
 | 
| 
 | 
    97   84 <span class="i">$TotalTime</span> = <span class="w">timediff</span> <span class="s">(</span><span class="i">$EndTime</span><span class="cm">,</span> <span class="i">$StartTime</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
    98   85 <span class="k">print</span> <span class="q">"Total time: "</span><span class="cm">,</span> <span class="i">timestr</span><span class="s">(</span><span class="i">$TotalTime</span><span class="s">)</span><span class="cm">,</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
    99   86 
 | 
| 
 | 
   100   87 <span class="c">###############################################################################</span>
 | 
| 
 | 
   101   88 
 | 
| 
 | 
   102   89 <span class="c"># List appropriate information...</span>
 | 
| 
 | 
   103 <a name="ListSDFileInfo-"></a>  90 <span class="k">sub </span><span class="m">ListSDFileInfo</span> <span class="s">{</span>
 | 
| 
 | 
   104   91   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 | 
| 
 | 
   105   92   <span class="k">my</span><span class="s">(</span><span class="i">$SDFile</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   106   93 
 | 
| 
 | 
   107   94   <span class="i">$SDFile</span> = <span class="i">$SDFilesList</span>[<span class="i">$Index</span>]<span class="sc">;</span>
 | 
| 
 | 
   108   95 
 | 
| 
 | 
   109   96   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">ProcessCmpdInfo</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   110   97     <span class="i">ListCompoundDetailsInfo</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   111   98   <span class="s">}</span>
 | 
| 
 | 
   112   99   <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   113  100     <span class="i">ListCompoundCountInfo</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   114  101   <span class="s">}</span>
 | 
| 
 | 
   115  102 
 | 
| 
 | 
   116  103   <span class="c"># File size and modification information...</span>
 | 
| 
 | 
   117  104   <span class="k">print</span> <span class="q">"\nFile size: "</span><span class="cm">,</span> <span class="i">FormatFileSize</span><span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">FileSize</span>}[<span class="i">$Index</span>]<span class="s">)</span><span class="cm">,</span> <span class="q">" \n"</span><span class="sc">;</span>
 | 
| 
 | 
   118  105   <span class="k">print</span> <span class="q">"Last modified: "</span><span class="cm">,</span> <span class="i">$SDFilesInfo</span>{<span class="w">FileLastModified</span>}[<span class="i">$Index</span>]<span class="cm">,</span> <span class="q">" \n"</span><span class="sc">;</span>
 | 
| 
 | 
   119  106 <span class="s">}</span>
 | 
| 
 | 
   120  107 
 | 
| 
 | 
   121  108 <span class="c"># List number of compounds in SD file...</span>
 | 
| 
 | 
   122 <a name="ListCompoundCountInfo-"></a> 109 <span class="k">sub </span><span class="m">ListCompoundCountInfo</span> <span class="s">{</span>
 | 
| 
 | 
   123  110   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 | 
| 
 | 
   124  111   <span class="k">my</span><span class="s">(</span><span class="i">$SDFile</span><span class="cm">,</span> <span class="i">$CmpdCount</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   125  112 
 | 
| 
 | 
   126  113   <span class="i">$SDFile</span> = <span class="i">$SDFilesList</span>[<span class="i">$Index</span>]<span class="sc">;</span>
 | 
| 
 | 
   127  114 
 | 
| 
 | 
   128  115   <span class="i">$CmpdCount</span> = <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   129  116 
 | 
| 
 | 
   130  117   <span class="k">open</span> <span class="w">SDFILE</span><span class="cm">,</span> <span class="q">"$SDFile"</span> <span class="k">or</span> <span class="k">die</span> <span class="q">"Couldn't open $SDFile: $! \n"</span><span class="sc">;</span>
 | 
| 
 | 
   131  118   <span class="k">while</span> <span class="s">(</span><span class="q"><SDFILE></span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   132  119     <span class="k">if</span> <span class="s">(</span><span class="q">/^\$\$\$\$/</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   133  120       <span class="i">$CmpdCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   134  121     <span class="s">}</span>
 | 
| 
 | 
   135  122   <span class="s">}</span>
 | 
| 
 | 
   136  123   <span class="k">close</span> <span class="w">SDFILE</span><span class="sc">;</span>
 | 
| 
 | 
   137  124 
 | 
| 
 | 
   138  125   <span class="i">$SDCmpdsInfo</span>{<span class="w">TotalCmpdCount</span>} += <span class="i">$CmpdCount</span><span class="sc">;</span>
 | 
| 
 | 
   139  126 
 | 
| 
 | 
   140  127   <span class="k">print</span> <span class="q">"\nNumber of compounds: $CmpdCount\n"</span><span class="sc">;</span>
 | 
| 
 | 
   141  128 <span class="s">}</span>
 | 
| 
 | 
   142  129 
 | 
| 
 | 
   143  130 <span class="c"># List detailed compound information...</span>
 | 
| 
 | 
   144 <a name="ListCompoundDetailsInfo-"></a> 131 <span class="k">sub </span><span class="m">ListCompoundDetailsInfo</span> <span class="s">{</span>
 | 
| 
 | 
   145  132   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 | 
| 
 | 
   146  133   <span class="k">my</span><span class="s">(</span><span class="i">$SDFile</span><span class="cm">,</span> <span class="i">$CmpdCount</span><span class="cm">,</span> <span class="i">$EmptyCtabBlocksCount</span><span class="cm">,</span> <span class="i">$MismatchCtabBlockCount</span><span class="cm">,</span> <span class="i">$ChiralCtabBlockCount</span><span class="cm">,</span> <span class="i">$UnknownAtomsCtabBlockCount</span><span class="cm">,</span> <span class="i">$InvalidAtomNumbersCtabBlockCount</span><span class="cm">,</span> <span class="i">$SaltsCtabBlockCount</span><span class="cm">,</span> <span class="i">$CtabLinesCount</span><span class="cm">,</span> <span class="i">$PrintCmpdCounterHeader</span><span class="cm">,</span> <span class="i">$ProblematicCmpdData</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="cm">,</span> <span class="i">@CmpdLines</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   147  134 
 | 
| 
 | 
   148  135   <span class="i">$SDFile</span> = <span class="i">$SDFilesList</span>[<span class="i">$Index</span>]<span class="sc">;</span>
 | 
| 
 | 
   149  136 
 | 
| 
 | 
   150  137   <span class="s">(</span><span class="i">$CmpdCount</span><span class="cm">,</span> <span class="i">$EmptyCtabBlocksCount</span><span class="cm">,</span> <span class="i">$MismatchCtabBlockCount</span><span class="cm">,</span> <span class="i">$ChiralCtabBlockCount</span><span class="cm">,</span> <span class="i">$UnknownAtomsCtabBlockCount</span><span class="cm">,</span> <span class="i">$InvalidAtomNumbersCtabBlockCount</span><span class="cm">,</span> <span class="i">$SaltsCtabBlockCount</span><span class="s">)</span> = <span class="s">(</span><span class="n">0</span><span class="s">)</span> x <span class="n">7</span><span class="sc">;</span>
 | 
| 
 | 
   151  138 
 | 
| 
 | 
   152  139   <span class="i">InitializeSDCmpdsInfo</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   153  140 
 | 
| 
 | 
   154  141   <span class="i">$PrintCmpdCounterHeader</span> = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   155  142 
 | 
| 
 | 
   156  143   <span class="k">open</span> <span class="w">SDFILE</span><span class="cm">,</span> <span class="q">"$SDFile"</span> <span class="k">or</span> <span class="k">die</span> <span class="q">"Couldn't open $SDFile: $! \n"</span><span class="sc">;</span>
 | 
| 
 | 
   157  144   <span class="k">while</span> <span class="s">(</span><span class="i">$CmpdString</span> = <span class="i">ReadCmpdString</span><span class="s">(</span>\<span class="i">*SDFILE</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   158  145     <span class="i">$CmpdCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   159  146     <span class="i">$ProblematicCmpdData</span> = <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   160  147     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">Detail</span>} <= <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   161  148       <span class="k">if</span> <span class="s">(</span><span class="s">(</span><span class="i">$CmpdCount</span> % <span class="n">5000</span><span class="s">)</span> == <span class="n">0</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   162  149         <span class="k">if</span> <span class="s">(</span><span class="i">$PrintCmpdCounterHeader</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   163  150           <span class="i">$PrintCmpdCounterHeader</span> = <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   164  151           <span class="k">print</span> <span class="q">"Processing compounds:"</span><span class="sc">;</span>
 | 
| 
 | 
   165  152         <span class="s">}</span>
 | 
| 
 | 
   166  153         <span class="k">print</span> <span class="q">"$CmpdCount..."</span><span class="sc">;</span>
 | 
| 
 | 
   167  154       <span class="s">}</span>
 | 
| 
 | 
   168  155     <span class="s">}</span>
 | 
| 
 | 
   169  156     <span class="i">@CmpdLines</span> = <span class="k">split</span> <span class="q">"\n"</span><span class="cm">,</span> <span class="i">$CmpdString</span><span class="sc">;</span>
 | 
| 
 | 
   170  157     <span class="i">$CtabLinesCount</span> = <span class="i">GetCtabLinesCount</span><span class="s">(</span>\<span class="i">@CmpdLines</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   171  158     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">Empty</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   172  159       <span class="k">if</span> <span class="s">(</span><span class="i">$CtabLinesCount</span> <= <span class="n">0</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   173  160         <span class="i">$EmptyCtabBlocksCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   174  161         <span class="i">$ProblematicCmpdData</span> = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   175  162       <span class="s">}</span>
 | 
| 
 | 
   176  163     <span class="s">}</span>
 | 
| 
 | 
   177  164     <span class="k">if</span> <span class="s">(</span><span class="i">$CtabLinesCount</span> > <span class="n">0</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   178  165       <span class="k">my</span> <span class="s">(</span><span class="i">$AtomCount</span><span class="cm">,</span> <span class="i">$BondCount</span><span class="cm">,</span> <span class="i">$ChiralFlag</span><span class="s">)</span> = <span class="i">ParseCmpdCountsLine</span><span class="s">(</span><span class="i">$CmpdLines</span>[<span class="n">3</span>]<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   179  166       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">Mismatch</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   180  167         <span class="k">if</span> <span class="s">(</span><span class="i">$CtabLinesCount</span> != <span class="s">(</span><span class="i">$AtomCount</span> + <span class="i">$BondCount</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   181  168           <span class="i">$MismatchCtabBlockCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   182  169           <span class="i">$ProblematicCmpdData</span> = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   183  170           <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">Detail</span>} >= <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   184  171             <span class="k">print</span> <span class="q">"\nMismatch found: Ctab lines count: $CtabLinesCount;  Atoms count: $AtomCount; Bond count: $BondCount\n"</span><span class="sc">;</span>
 | 
| 
 | 
   185  172           <span class="s">}</span>
 | 
| 
 | 
   186  173         <span class="s">}</span>
 | 
| 
 | 
   187  174       <span class="s">}</span>
 | 
| 
 | 
   188  175       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">Chiral</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   189  176         <span class="k">if</span> <span class="s">(</span><span class="i">$ChiralFlag</span> == <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   190  177           <span class="i">$ChiralCtabBlockCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   191  178         <span class="s">}</span>
 | 
| 
 | 
   192  179       <span class="s">}</span>
 | 
| 
 | 
   193  180       <span class="k">if</span> <span class="s">(</span><span class="i">$CtabLinesCount</span> == <span class="s">(</span><span class="i">$AtomCount</span> + <span class="i">$BondCount</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   194  181         <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">UnknownAtoms</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   195  182           <span class="k">my</span><span class="s">(</span><span class="i">$UnknownAtomCount</span><span class="cm">,</span> <span class="i">$UnknownAtoms</span><span class="cm">,</span> <span class="i">$UnknownAtomLines</span><span class="s">)</span> = <span class="i">GetUnknownAtoms</span><span class="s">(</span>\<span class="i">@CmpdLines</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   196  183           <span class="k">if</span> <span class="s">(</span><span class="i">$UnknownAtomCount</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   197  184             <span class="i">$UnknownAtomsCtabBlockCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   198  185             <span class="i">$ProblematicCmpdData</span> = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   199  186             <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">Detail</span>} >= <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   200  187               <span class="k">print</span> <span class="q">"\nUnknown atom(s) found: $UnknownAtomCount\nUnknown atom(s) symbols:$UnknownAtoms\nUnknown atom(s) data lines:\n$UnknownAtomLines\n"</span><span class="sc">;</span>
 | 
| 
 | 
   201  188             <span class="s">}</span>
 | 
| 
 | 
   202  189           <span class="s">}</span>
 | 
| 
 | 
   203  190         <span class="s">}</span>
 | 
| 
 | 
   204  191         <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">InvalidAtomNumbers</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   205  192           <span class="k">my</span><span class="s">(</span><span class="i">$InvalidAtomNumbersCount</span><span class="cm">,</span> <span class="i">$InvalidAtomNumbers</span><span class="cm">,</span> <span class="i">$InvalidAtomNumberLines</span><span class="s">)</span> = <span class="i">GetInvalidAtomNumbers</span><span class="s">(</span>\<span class="i">@CmpdLines</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   206  193           <span class="k">if</span> <span class="s">(</span><span class="i">$InvalidAtomNumbersCount</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   207  194             <span class="i">$InvalidAtomNumbersCtabBlockCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   208  195             <span class="i">$ProblematicCmpdData</span> = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   209  196             <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">Detail</span>} >= <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   210  197               <span class="k">print</span> <span class="q">"\nInvalid atom number(s) found: $InvalidAtomNumbersCount\nInvalid atom number(s):$InvalidAtomNumbers\nInvalid atom number(s) data lines:\n$InvalidAtomNumberLines\n"</span><span class="sc">;</span>
 | 
| 
 | 
   211  198             <span class="s">}</span>
 | 
| 
 | 
   212  199           <span class="s">}</span>
 | 
| 
 | 
   213  200         <span class="s">}</span>
 | 
| 
 | 
   214  201         <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">Salts</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   215  202           <span class="k">my</span><span class="s">(</span><span class="i">$FragmentsCount</span><span class="cm">,</span> <span class="i">$Fragments</span><span class="s">)</span> = <span class="i">GetCmpdFragments</span><span class="s">(</span>\<span class="i">@CmpdLines</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   216  203           <span class="k">if</span> <span class="s">(</span><span class="i">$FragmentsCount</span> > <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   217  204             <span class="i">$SaltsCtabBlockCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   218  205             <span class="i">$ProblematicCmpdData</span> = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   219  206             <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">Detail</span>} >= <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   220  207               <span class="k">print</span> <span class="q">"\nSalts found: $FragmentsCount\nSalts atom numbers:\n$Fragments\n"</span><span class="sc">;</span>
 | 
| 
 | 
   221  208             <span class="s">}</span>
 | 
| 
 | 
   222  209           <span class="s">}</span>
 | 
| 
 | 
   223  210         <span class="s">}</span>
 | 
| 
 | 
   224  211       <span class="s">}</span>
 | 
| 
 | 
   225  212     <span class="s">}</span>
 | 
| 
 | 
   226  213     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">ProcessCmpdData</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   227  214       <span class="i">ProcessCmpdInfo</span><span class="s">(</span>\<span class="i">@CmpdLines</span><span class="cm">,</span> <span class="i">$CmpdCount</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   228  215     <span class="s">}</span>
 | 
| 
 | 
   229  216     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">Detail</span>} >= <span class="n">3</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   230  217       <span class="k">if</span> <span class="s">(</span><span class="i">$ProblematicCmpdData</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   231  218         <span class="k">print</span> <span class="q">"\nCompound data:\n$CmpdString\n\n"</span><span class="sc">;</span>
 | 
| 
 | 
   232  219       <span class="s">}</span>
 | 
| 
 | 
   233  220     <span class="s">}</span>
 | 
| 
 | 
   234  221   <span class="s">}</span>
 | 
| 
 | 
   235  222   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">Detail</span>} <= <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   236  223     <span class="k">if</span> <span class="s">(</span>!<span class="i">$PrintCmpdCounterHeader</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   237  224       <span class="k">print</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   238  225     <span class="s">}</span>
 | 
| 
 | 
   239  226   <span class="s">}</span>
 | 
| 
 | 
   240  227   <span class="k">close</span> <span class="w">SDFILE</span><span class="sc">;</span>
 | 
| 
 | 
   241  228 
 | 
| 
 | 
   242  229   <span class="i">$SDCmpdsInfo</span>{<span class="w">TotalCmpdCount</span>} += <span class="i">$CmpdCount</span><span class="sc">;</span>
 | 
| 
 | 
   243  230 
 | 
| 
 | 
   244  231   <span class="k">print</span> <span class="q">"\nNumber of compounds: $CmpdCount\n"</span><span class="sc">;</span>
 | 
| 
 | 
   245  232 
 | 
| 
 | 
   246  233   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">Empty</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   247  234     <span class="k">print</span> <span class="q">"Number of empty atom/bond blocks: $EmptyCtabBlocksCount\n"</span><span class="sc">;</span>
 | 
| 
 | 
   248  235   <span class="s">}</span>
 | 
| 
 | 
   249  236   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">Mismatch</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   250  237     <span class="k">print</span> <span class="q">"Number of mismatched atom/bond blocks: $MismatchCtabBlockCount\n"</span><span class="sc">;</span>
 | 
| 
 | 
   251  238   <span class="s">}</span>
 | 
| 
 | 
   252  239   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">UnknownAtoms</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   253  240     <span class="k">print</span> <span class="q">"Number of atom blocks with unknown atom labels: $UnknownAtomsCtabBlockCount\n"</span><span class="sc">;</span>
 | 
| 
 | 
   254  241   <span class="s">}</span>
 | 
| 
 | 
   255  242   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">InvalidAtomNumbers</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   256  243     <span class="k">print</span> <span class="q">"Number of bond blocks and atom property blocks with invalid atom numbers: $InvalidAtomNumbersCtabBlockCount\n"</span><span class="sc">;</span>
 | 
| 
 | 
   257  244   <span class="s">}</span>
 | 
| 
 | 
   258  245   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">Salts</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   259  246     <span class="k">print</span> <span class="q">"Number of atom blocks containing salts: $SaltsCtabBlockCount\n"</span><span class="sc">;</span>
 | 
| 
 | 
   260  247   <span class="s">}</span>
 | 
| 
 | 
   261  248   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">All</span>} || <span class="i">$OptionsInfo</span>{<span class="w">Chiral</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   262  249     <span class="k">print</span> <span class="q">"Number of chiral atom/bond blocks: $ChiralCtabBlockCount\n"</span><span class="sc">;</span>
 | 
| 
 | 
   263  250   <span class="s">}</span>
 | 
| 
 | 
   264  251   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">ProcessCmpdData</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   265  252     <span class="i">PrintCmpdInfoSummary</span><span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   266  253   <span class="s">}</span>
 | 
| 
 | 
   267  254 
 | 
| 
 | 
   268  255 <span class="s">}</span>
 | 
| 
 | 
   269  256 
 | 
| 
 | 
   270  257 <span class="c"># Initialize compound data information for a SD file...</span>
 | 
| 
 | 
   271 <a name="InitializeSDCmpdsInfo-"></a> 258 <span class="k">sub </span><span class="m">InitializeSDCmpdsInfo</span> <span class="s">{</span>
 | 
| 
 | 
   272  259 
 | 
| 
 | 
   273  260   <span class="k">if</span> <span class="s">(</span>!<span class="k">exists</span> <span class="i">$SDCmpdsInfo</span>{<span class="w">TotalCmpdCount</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   274  261     <span class="i">$SDCmpdsInfo</span>{<span class="w">TotalCmpdCount</span>} = <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   275  262   <span class="s">}</span>
 | 
| 
 | 
   276  263 
 | 
| 
 | 
   277  264   <span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   278  265   <span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   279  266   <span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NonEmptyFieldValuesCountMap</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   280  267   <span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">EmptyFieldValuesCountMap</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   281  268   <span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NonNumericalFieldValuesCountMap</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   282  269   <span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NumericalFieldValuesCountMap</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   283  270 <span class="s">}</span>
 | 
| 
 | 
   284  271 
 | 
| 
 | 
   285  272 <span class="c"># Process compound data header labels and figure out which ones are present for</span>
 | 
| 
 | 
   286  273 <span class="c"># all the compounds...</span>
 | 
| 
 | 
   287 <a name="ProcessCmpdInfo-"></a> 274 <span class="k">sub </span><span class="m">ProcessCmpdInfo</span> <span class="s">{</span>
 | 
| 
 | 
   288  275   <span class="k">my</span><span class="s">(</span><span class="i">$CmpdLinesRef</span><span class="cm">,</span> <span class="i">$CmpdCount</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 | 
| 
 | 
   289  276   <span class="k">my</span><span class="s">(</span><span class="i">$Label</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   290  277 
 | 
| 
 | 
   291  278   <span class="k">if</span> <span class="s">(</span><span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   292  279     <span class="k">my</span> <span class="s">(</span><span class="i">@CmpdFieldLabels</span><span class="s">)</span> = <span class="i">GetCmpdDataHeaderLabels</span><span class="s">(</span><span class="i">$CmpdLinesRef</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   293  280     <span class="k">my</span><span class="s">(</span><span class="i">%CmpdFieldLabelsMap</span><span class="s">)</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   294  281     <span class="c"># Setup a map for the current labels...</span>
 | 
| 
 | 
   295  282     <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="i">@CmpdFieldLabels</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   296  283       <span class="i">$CmpdFieldLabelsMap</span>{<span class="i">$Label</span>} = <span class="q">"PresentInSome"</span><span class="sc">;</span>
 | 
| 
 | 
   297  284     <span class="s">}</span>
 | 
| 
 | 
   298  285     <span class="c"># Check the presence old labels for this compound; otherwise, mark 'em new...</span>
 | 
| 
 | 
   299  286     <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   300  287       <span class="k">if</span> <span class="s">(</span>!<span class="i">$CmpdFieldLabelsMap</span>{<span class="i">$Label</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   301  288         <span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}{<span class="i">$Label</span>} = <span class="q">"PresentInSome"</span><span class="sc">;</span>
 | 
| 
 | 
   302  289       <span class="s">}</span>
 | 
| 
 | 
   303  290     <span class="s">}</span>
 | 
| 
 | 
   304  291     <span class="c"># Check the presence this compound in the old labels; otherwise, add 'em...</span>
 | 
| 
 | 
   305  292     <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="i">@CmpdFieldLabels</span> <span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   306  293       <span class="k">if</span> <span class="s">(</span>!<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}{<span class="i">$Label</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   307  294         <span class="c"># It's a new label...</span>
 | 
| 
 | 
   308  295         <span class="k">push</span> <span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="cm">,</span> <span class="i">$Label</span><span class="sc">;</span>
 | 
| 
 | 
   309  296         <span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}{<span class="i">$Label</span>} = <span class="q">"PresentInSome"</span><span class="sc">;</span>
 | 
| 
 | 
   310  297       <span class="s">}</span>
 | 
| 
 | 
   311  298     <span class="s">}</span>
 | 
| 
 | 
   312  299   <span class="s">}</span>
 | 
| 
 | 
   313  300   <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   314  301     <span class="c"># Get the initial label set and set up a map...</span>
 | 
| 
 | 
   315  302     <span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}} = <span class="i">GetCmpdDataHeaderLabels</span><span class="s">(</span><span class="i">$CmpdLinesRef</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   316  303     <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   317  304       <span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}{<span class="i">$Label</span>} = <span class="q">"PresentInAll"</span><span class="sc">;</span>
 | 
| 
 | 
   318  305     <span class="s">}</span>
 | 
| 
 | 
   319  306   <span class="s">}</span>
 | 
| 
 | 
   320  307   <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CountEmptyData</span>} || <span class="i">$OptionsInfo</span>{<span class="w">CheckData</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   321  308     <span class="c"># Count empty data field values...</span>
 | 
| 
 | 
   322  309     <span class="k">my</span><span class="s">(</span><span class="i">%DataFieldAndValues</span><span class="cm">,</span> <span class="i">$Label</span><span class="cm">,</span> <span class="i">$Value</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   323  310 
 | 
| 
 | 
   324  311     <span class="i">%DataFieldAndValues</span> = <span class="i">GetCmpdDataHeaderLabelsAndValues</span><span class="s">(</span><span class="i">$CmpdLinesRef</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   325  312     <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="k">keys</span> <span class="i">%DataFieldAndValues</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   326  313       <span class="i">$Value</span> = <span class="i">$DataFieldAndValues</span>{<span class="i">$Label</span>}<span class="sc">;</span>
 | 
| 
 | 
   327  314       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CountEmptyData</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   328  315         <span class="k">if</span> <span class="s">(</span><span class="i">IsNotEmpty</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   329  316           <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$SDCmpdsInfo</span>{<span class="w">NonEmptyFieldValuesCountMap</span>}{<span class="i">$Label</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   330  317             <span class="i">$SDCmpdsInfo</span>{<span class="w">NonEmptyFieldValuesCountMap</span>}{<span class="i">$Label</span>} += <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   331  318           <span class="s">}</span>
 | 
| 
 | 
   332  319           <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   333  320             <span class="i">$SDCmpdsInfo</span>{<span class="w">NonEmptyFieldValuesCountMap</span>}{<span class="i">$Label</span>} = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   334  321           <span class="s">}</span>
 | 
| 
 | 
   335  322         <span class="s">}</span>
 | 
| 
 | 
   336  323         <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   337  324           <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">detail</span>} >= <span class="n">2</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   338  325             <span class="k">print</span> <span class="q">"Compound record $CmpdCount: Empty data field <$Label>\n"</span><span class="sc">;</span>
 | 
| 
 | 
   339  326           <span class="s">}</span>
 | 
| 
 | 
   340  327           <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$SDCmpdsInfo</span>{<span class="w">EmptyFieldValuesCountMap</span>}{<span class="i">$Label</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   341  328             <span class="i">$SDCmpdsInfo</span>{<span class="w">EmptyFieldValuesCountMap</span>}{<span class="i">$Label</span>} += <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   342  329           <span class="s">}</span>
 | 
| 
 | 
   343  330           <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   344  331             <span class="i">$SDCmpdsInfo</span>{<span class="w">EmptyFieldValuesCountMap</span>}{<span class="i">$Label</span>} = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   345  332           <span class="s">}</span>
 | 
| 
 | 
   346  333         <span class="s">}</span>
 | 
| 
 | 
   347  334       <span class="s">}</span>
 | 
| 
 | 
   348  335       <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CheckData</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   349  336         <span class="k">if</span> <span class="s">(</span><span class="i">IsNumerical</span><span class="s">(</span><span class="i">$Value</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   350  337           <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$SDCmpdsInfo</span>{<span class="w">NumericalFieldValuesCountMap</span>}{<span class="i">$Label</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   351  338             <span class="i">$SDCmpdsInfo</span>{<span class="w">NumericalFieldValuesCountMap</span>}{<span class="i">$Label</span>} += <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   352  339           <span class="s">}</span>
 | 
| 
 | 
   353  340           <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   354  341             <span class="i">$SDCmpdsInfo</span>{<span class="w">NumericalFieldValuesCountMap</span>}{<span class="i">$Label</span>} = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   355  342           <span class="s">}</span>
 | 
| 
 | 
   356  343         <span class="s">}</span>
 | 
| 
 | 
   357  344         <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   358  345           <span class="k">if</span> <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$SDCmpdsInfo</span>{<span class="w">NonNumericalFieldValuesCountMap</span>}{<span class="i">$Label</span>}<span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   359  346             <span class="i">$SDCmpdsInfo</span>{<span class="w">NonNumericalFieldValuesCountMap</span>}{<span class="i">$Label</span>} += <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   360  347           <span class="s">}</span>
 | 
| 
 | 
   361  348           <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   362  349             <span class="i">$SDCmpdsInfo</span>{<span class="w">NonNumericalFieldValuesCountMap</span>}{<span class="i">$Label</span>} = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   363  350           <span class="s">}</span>
 | 
| 
 | 
   364  351         <span class="s">}</span>
 | 
| 
 | 
   365  352       <span class="s">}</span>
 | 
| 
 | 
   366  353     <span class="s">}</span>
 | 
| 
 | 
   367  354   <span class="s">}</span>
 | 
| 
 | 
   368  355 <span class="s">}</span>
 | 
| 
 | 
   369  356 
 | 
| 
 | 
   370  357 <span class="c"># Print compound summary...</span>
 | 
| 
 | 
   371 <a name="PrintCmpdInfoSummary-"></a> 358 <span class="k">sub </span><span class="m">PrintCmpdInfoSummary</span> <span class="s">{</span>
 | 
| 
 | 
   372  359   <span class="k">if</span> <span class="s">(</span><span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   373  360     <span class="k">my</span><span class="s">(</span><span class="i">$PresentInAllCount</span><span class="cm">,</span> <span class="i">$Label</span><span class="cm">,</span> <span class="i">@FieldLabelsPresentInSome</span><span class="cm">,</span> <span class="i">@FieldLabelsPresentInAll</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   374  361 
 | 
| 
 | 
   375  362     <span class="i">@FieldLabelsPresentInSome</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   376  363     <span class="i">@FieldLabelsPresentInAll</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   377  364 
 | 
| 
 | 
   378  365     <span class="i">$PresentInAllCount</span> = <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   379  366     <span class="k">print</span> <span class="q">"\nNumber of data fields: "</span><span class="cm">,</span> <span class="k">scalar</span><span class="s">(</span><span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="s">)</span><span class="cm">,</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   380  367     <span class="k">print</span> <span class="q">"All data field labels: "</span><span class="sc">;</span>
 | 
| 
 | 
   381  368     <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="k">sort</span> <span class="k">keys</span> <span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   382  369       <span class="k">print</span> <span class="q">"<$Label> "</span><span class="sc">;</span>
 | 
| 
 | 
   383  370     <span class="s">}</span>
 | 
| 
 | 
   384  371     <span class="k">print</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   385  372     <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="k">sort</span> <span class="k">keys</span> <span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   386  373       <span class="k">if</span> <span class="s">(</span><span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}{<span class="i">$Label</span>} <span class="k">eq</span> <span class="q">"PresentInAll"</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   387  374         <span class="i">$PresentInAllCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   388  375         <span class="k">push</span> <span class="i">@FieldLabelsPresentInAll</span><span class="cm">,</span> <span class="i">$Label</span><span class="sc">;</span>
 | 
| 
 | 
   389  376       <span class="s">}</span>
 | 
| 
 | 
   390  377     <span class="s">}</span>
 | 
| 
 | 
   391  378     <span class="k">if</span> <span class="s">(</span><span class="i">$PresentInAllCount</span> != <span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   392  379       <span class="k">print</span> <span class="q">"Data field labels present in all compounds: "</span><span class="sc">;</span>
 | 
| 
 | 
   393  380       <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="k">sort</span> <span class="k">keys</span> <span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   394  381         <span class="k">if</span> <span class="s">(</span><span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}{<span class="i">$Label</span>} <span class="k">eq</span> <span class="q">"PresentInAll"</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   395  382           <span class="k">print</span> <span class="q">"<$Label> "</span><span class="sc">;</span>
 | 
| 
 | 
   396  383         <span class="s">}</span>
 | 
| 
 | 
   397  384       <span class="s">}</span>
 | 
| 
 | 
   398  385       <span class="k">print</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   399  386       <span class="k">print</span> <span class="q">"Data field labels present in some compounds: "</span><span class="sc">;</span>
 | 
| 
 | 
   400  387       <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="k">sort</span> <span class="k">keys</span> <span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   401  388         <span class="k">if</span> <span class="s">(</span><span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabelsMap</span>}{<span class="i">$Label</span>} <span class="k">eq</span> <span class="q">"PresentInSome"</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   402  389           <span class="k">print</span> <span class="q">"<$Label> "</span><span class="sc">;</span>
 | 
| 
 | 
   403  390           <span class="k">push</span> <span class="i">@FieldLabelsPresentInSome</span><span class="cm">,</span> <span class="i">$Label</span><span class="sc">;</span>
 | 
| 
 | 
   404  391         <span class="s">}</span>
 | 
| 
 | 
   405  392       <span class="s">}</span>
 | 
| 
 | 
   406  393       <span class="k">print</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   407  394     <span class="s">}</span>
 | 
| 
 | 
   408  395     <span class="c"># List empty data field values count...</span>
 | 
| 
 | 
   409  396     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CountEmptyData</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   410  397       <span class="k">print</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   411  398       <span class="k">if</span> <span class="s">(</span><span class="i">$PresentInAllCount</span> == <span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   412  399         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of non-empty values for data field(s)"</span><span class="cm">,</span> \<span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NonEmptyFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   413  400         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of empty values for data field(s)"</span><span class="cm">,</span> \<span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">EmptyFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   414  401       <span class="s">}</span>
 | 
| 
 | 
   415  402       <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   416  403         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of non-empty values for data field(s) present in all compounds"</span><span class="cm">,</span> \<span class="i">@FieldLabelsPresentInAll</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NonEmptyFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   417  404         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of empty values for data field(s) present in all compounds"</span><span class="cm">,</span> \<span class="i">@FieldLabelsPresentInAll</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">EmptyFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   418  405         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of non-empty values for data field(s) present in some compounds"</span><span class="cm">,</span> \<span class="i">@FieldLabelsPresentInSome</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NonEmptyFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   419  406         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of empty values for data field(s) present in some compounds"</span><span class="cm">,</span> \<span class="i">@FieldLabelsPresentInSome</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">EmptyFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   420  407       <span class="s">}</span>
 | 
| 
 | 
   421  408       <span class="k">print</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   422  409     <span class="s">}</span>
 | 
| 
 | 
   423  410     <span class="c"># List numerical data values count...</span>
 | 
| 
 | 
   424  411     <span class="k">if</span> <span class="s">(</span><span class="i">$OptionsInfo</span>{<span class="w">CheckData</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   425  412       <span class="k">print</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   426  413       <span class="k">if</span> <span class="s">(</span><span class="i">$PresentInAllCount</span> == <span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   427  414         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of non-numerical values for data field(s)"</span><span class="cm">,</span> \<span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NonNumericalFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   428  415         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of numerical values for data field(s)"</span><span class="cm">,</span> \<span class="i">@</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">FieldLabels</span>}}<span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NumericalFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   429  416       <span class="s">}</span>
 | 
| 
 | 
   430  417       <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   431  418         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of non-numerical values for data field(s) present in all compounds"</span><span class="cm">,</span> \<span class="i">@FieldLabelsPresentInAll</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NonNumericalFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   432  419         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of numerical values for data field(s) present in all compounds"</span><span class="cm">,</span> \<span class="i">@FieldLabelsPresentInAll</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NumericalFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   433  420         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of non-numerical values for data field(s) present in some compounds"</span><span class="cm">,</span> \<span class="i">@FieldLabelsPresentInSome</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NonNumericalFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   434  421         <span class="i">PrintDataInformation</span><span class="s">(</span><span class="q">"Number of numerical values for data field(s) present in some compounds"</span><span class="cm">,</span> \<span class="i">@FieldLabelsPresentInSome</span><span class="cm">,</span> \<span class="i">%</span>{<span class="i">$SDCmpdsInfo</span>{<span class="w">NumericalFieldValuesCountMap</span>}}<span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   435  422       <span class="s">}</span>
 | 
| 
 | 
   436  423       <span class="k">print</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   437  424     <span class="s">}</span>
 | 
| 
 | 
   438  425   <span class="s">}</span>
 | 
| 
 | 
   439  426   <span class="k">else</span> <span class="s">{</span>
 | 
| 
 | 
   440  427     <span class="k">print</span> <span class="q">"\nNumber of data fields: 0\n"</span><span class="sc">;</span>
 | 
| 
 | 
   441  428   <span class="s">}</span>
 | 
| 
 | 
   442  429 <span class="s">}</span>
 | 
| 
 | 
   443  430 <span class="c"># List data information...</span>
 | 
| 
 | 
   444 <a name="PrintDataInformation-"></a> 431 <span class="k">sub </span><span class="m">PrintDataInformation</span> <span class="s">{</span>
 | 
| 
 | 
   445  432   <span class="k">my</span><span class="s">(</span><span class="i">$InfoLabel</span><span class="cm">,</span> <span class="i">$DataLabelRef</span><span class="cm">,</span> <span class="i">$DataLabelToValueMapRef</span><span class="s">)</span> = <span class="i">@_</span><span class="sc">;</span>
 | 
| 
 | 
   446  433   <span class="k">my</span><span class="s">(</span><span class="i">$Line</span><span class="cm">,</span> <span class="i">$Label</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   447  434 
 | 
| 
 | 
   448  435   <span class="i">$Line</span> = <span class="q">""</span><span class="sc">;</span>
 | 
| 
 | 
   449  436   <span class="k">for</span> <span class="i">$Label</span> <span class="s">(</span><span class="i">@</span>{<span class="i">$DataLabelRef</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   450  437     <span class="i">$Line</span> .= <span class="q">" <$Label> - "</span> . <span class="s">(</span><span class="k">exists</span><span class="s">(</span><span class="i">$DataLabelToValueMapRef</span>->{<span class="i">$Label</span>}<span class="s">)</span> ? <span class="i">$DataLabelToValueMapRef</span>->{<span class="i">$Label</span>} <span class="co">:</span> <span class="n">0</span><span class="s">)</span> . <span class="q">","</span><span class="sc">;</span>
 | 
| 
 | 
   451  438   <span class="s">}</span>
 | 
| 
 | 
   452  439   <span class="i">$Line</span> =~ <span class="q">s/\,$//g</span><span class="sc">;</span>
 | 
| 
 | 
   453  440   <span class="k">print</span> <span class="q">"$InfoLabel: $Line\n"</span><span class="sc">;</span>
 | 
| 
 | 
   454  441 <span class="s">}</span>
 | 
| 
 | 
   455  442 
 | 
| 
 | 
   456  443 <span class="c"># Total size of all the files...</span>
 | 
| 
 | 
   457 <a name="ListTotalSizeOfFiles-"></a> 444 <span class="k">sub </span><span class="m">ListTotalSizeOfFiles</span> <span class="s">{</span>
 | 
| 
 | 
   458  445   <span class="k">my</span><span class="s">(</span><span class="i">$FileOkayCount</span><span class="cm">,</span> <span class="i">$TotalSize</span><span class="cm">,</span> <span class="i">$Index</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   459  446 
 | 
| 
 | 
   460  447   <span class="i">$FileOkayCount</span> = <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   461  448   <span class="i">$TotalSize</span> = <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   462  449 
 | 
| 
 | 
   463  450   <span class="k">for</span> <span class="i">$Index</span> <span class="s">(</span><span class="n">0</span> .. <span class="i">$#SDFilesList</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   464  451     <span class="k">if</span> <span class="s">(</span><span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}[<span class="i">$Index</span>]<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   465  452       <span class="i">$FileOkayCount</span>++<span class="sc">;</span>
 | 
| 
 | 
   466  453       <span class="i">$TotalSize</span> += <span class="i">$SDFilesInfo</span>{<span class="w">FileSize</span>}[<span class="i">$Index</span>]<span class="sc">;</span>
 | 
| 
 | 
   467  454     <span class="s">}</span>
 | 
| 
 | 
   468  455   <span class="s">}</span>
 | 
| 
 | 
   469  456   <span class="k">if</span> <span class="s">(</span><span class="i">$FileOkayCount</span> > <span class="n">1</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   470  457     <span class="k">print</span> <span class="q">"\nTotal number of compounds in  $FileOkayCount SD files: $SDCmpdsInfo{TotalCmpdCount}\n"</span><span class="sc">;</span>
 | 
| 
 | 
   471  458     <span class="k">print</span> <span class="q">"\nTotal size of $FileOkayCount SD files: "</span><span class="cm">,</span> <span class="i">FormatFileSize</span><span class="s">(</span><span class="i">$TotalSize</span><span class="s">)</span><span class="cm">,</span> <span class="q">"\n"</span><span class="sc">;</span>
 | 
| 
 | 
   472  459   <span class="s">}</span>
 | 
| 
 | 
   473  460 
 | 
| 
 | 
   474  461 <span class="s">}</span>
 | 
| 
 | 
   475  462 
 | 
| 
 | 
   476  463 <span class="c"># Retrieve information about SD files...</span>
 | 
| 
 | 
   477 <a name="RetrieveSDFilesInfo-"></a> 464 <span class="k">sub </span><span class="m">RetrieveSDFilesInfo</span> <span class="s">{</span>
 | 
| 
 | 
   478  465   <span class="k">my</span><span class="s">(</span><span class="i">$Index</span><span class="cm">,</span> <span class="i">$SDFile</span><span class="cm">,</span> <span class="i">$ModifiedTimeString</span><span class="cm">,</span> <span class="i">$ModifiedDateString</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   479  466 
 | 
| 
 | 
   480  467   <span class="i">%SDCmpdsInfo</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   481  468 
 | 
| 
 | 
   482  469   <span class="i">%SDFilesInfo</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   483  470   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   484  471   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">FileSize</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   485  472   <span class="i">@</span>{<span class="i">$SDFilesInfo</span>{<span class="w">FileLastModified</span>}} = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   486  473 
 | 
| 
 | 
   487  474   <span class="j">FILELIST:</span> <span class="k">for</span> <span class="i">$Index</span> <span class="s">(</span><span class="n">0</span> .. <span class="i">$#SDFilesList</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   488  475     <span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}[<span class="i">$Index</span>] = <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   489  476     <span class="i">$SDFilesInfo</span>{<span class="w">FileSize</span>}[<span class="i">$Index</span>] = <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   490  477     <span class="i">$SDFilesInfo</span>{<span class="w">FileLastModified</span>}[<span class="i">$Index</span>] = <span class="q">''</span><span class="sc">;</span>
 | 
| 
 | 
   491  478 
 | 
| 
 | 
   492  479     <span class="i">$SDFile</span> = <span class="i">$SDFilesList</span>[<span class="i">$Index</span>]<span class="sc">;</span>
 | 
| 
 | 
   493  480     <span class="k">if</span> <span class="s">(</span>!<span class="s">(</span><span class="k">-e</span> <span class="i">$SDFile</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   494  481       <span class="k">warn</span> <span class="q">"Warning: Ignoring file $SDFile: It doesn't exist\n"</span><span class="sc">;</span>
 | 
| 
 | 
   495  482       <span class="k">next</span> <span class="j">FILELIST</span><span class="sc">;</span>
 | 
| 
 | 
   496  483     <span class="s">}</span>
 | 
| 
 | 
   497  484     <span class="k">if</span> <span class="s">(</span>!<span class="i">CheckFileType</span><span class="s">(</span><span class="i">$SDFile</span><span class="cm">,</span> <span class="q">"sdf sd"</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   498  485       <span class="k">warn</span> <span class="q">"Warning: Ignoring file $SDFile: It's not a SD file\n"</span><span class="sc">;</span>
 | 
| 
 | 
   499  486       <span class="k">next</span> <span class="j">FILELIST</span><span class="sc">;</span>
 | 
| 
 | 
   500  487     <span class="s">}</span>
 | 
| 
 | 
   501  488     <span class="k">if</span> <span class="s">(</span>! <span class="k">open</span> <span class="w">SDFILE</span><span class="cm">,</span> <span class="q">"$SDFile"</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   502  489       <span class="k">warn</span> <span class="q">"Warning: Ignoring file $SDFile: Couldn't open it: $! \n"</span><span class="sc">;</span>
 | 
| 
 | 
   503  490       <span class="k">next</span> <span class="j">FILELIST</span><span class="sc">;</span>
 | 
| 
 | 
   504  491     <span class="s">}</span>
 | 
| 
 | 
   505  492     <span class="k">close</span> <span class="w">SDFILE</span><span class="sc">;</span>
 | 
| 
 | 
   506  493 
 | 
| 
 | 
   507  494     <span class="i">$SDFilesInfo</span>{<span class="w">FileOkay</span>}[<span class="i">$Index</span>] = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   508  495     <span class="i">$SDFilesInfo</span>{<span class="w">FileSize</span>}[<span class="i">$Index</span>] = <span class="i">FileSize</span><span class="s">(</span><span class="i">$SDFile</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   509  496     <span class="s">(</span><span class="i">$ModifiedTimeString</span><span class="cm">,</span> <span class="i">$ModifiedDateString</span><span class="s">)</span> = <span class="i">FormattedFileModificationTimeAndDate</span><span class="s">(</span><span class="i">$SDFile</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   510  497     <span class="i">$SDFilesInfo</span>{<span class="w">FileLastModified</span>}[<span class="i">$Index</span>] = <span class="q">"$ModifiedTimeString; $ModifiedDateString"</span><span class="sc">;</span>
 | 
| 
 | 
   511  498   <span class="s">}</span>
 | 
| 
 | 
   512  499 <span class="s">}</span>
 | 
| 
 | 
   513  500 
 | 
| 
 | 
   514  501 <span class="c"># Process option values...</span>
 | 
| 
 | 
   515 <a name="ProcessOptions-"></a> 502 <span class="k">sub </span><span class="m">ProcessOptions</span> <span class="s">{</span>
 | 
| 
 | 
   516  503   <span class="i">%OptionsInfo</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   517  504 
 | 
| 
 | 
   518  505   <span class="i">$OptionsInfo</span>{<span class="w">All</span>} = <span class="i">$Options</span>{<span class="w">all</span>} ? <span class="i">$Options</span>{<span class="w">all</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   519  506   <span class="i">$OptionsInfo</span>{<span class="w">Chiral</span>} = <span class="i">$Options</span>{<span class="w">chiral</span>} ? <span class="i">$Options</span>{<span class="w">chiral</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   520  507   <span class="i">$OptionsInfo</span>{<span class="w">Count</span>} = <span class="i">$Options</span>{<span class="w">count</span>} ? <span class="i">$Options</span>{<span class="w">count</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   521  508   <span class="i">$OptionsInfo</span>{<span class="w">DataCheck</span>} = <span class="i">$Options</span>{<span class="w">datacheck</span>} ? <span class="i">$Options</span>{<span class="w">datacheck</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   522  509   <span class="i">$OptionsInfo</span>{<span class="w">Empty</span>} = <span class="i">$Options</span>{<span class="w">empty</span>} ? <span class="i">$Options</span>{<span class="w">empty</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   523  510   <span class="i">$OptionsInfo</span>{<span class="w">Fields</span>} = <span class="i">$Options</span>{<span class="w">fields</span>} ? <span class="i">$Options</span>{<span class="w">fields</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   524  511   <span class="i">$OptionsInfo</span>{<span class="w">InvalidAtomNumbers</span>} = <span class="i">$Options</span>{<span class="w">invalidatomnumbers</span>} ? <span class="i">$Options</span>{<span class="w">invalidatomnumbers</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   525  512   <span class="i">$OptionsInfo</span>{<span class="w">Mismatch</span>} = <span class="i">$Options</span>{<span class="w">mismatch</span>} ? <span class="i">$Options</span>{<span class="w">mismatch</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   526  513   <span class="i">$OptionsInfo</span>{<span class="w">Salts</span>} = <span class="i">$Options</span>{<span class="w">salts</span>} ? <span class="i">$Options</span>{<span class="w">salts</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   527  514   <span class="i">$OptionsInfo</span>{<span class="w">UnknownAtoms</span>} = <span class="i">$Options</span>{<span class="w">unknownatoms</span>} ? <span class="i">$Options</span>{<span class="w">unknownatoms</span>} <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   528  515 
 | 
| 
 | 
   529  516   <span class="i">$OptionsInfo</span>{<span class="w">Detail</span>} = <span class="i">$Options</span>{<span class="w">detail</span>}<span class="sc">;</span>
 | 
| 
 | 
   530  517 
 | 
| 
 | 
   531  518   <span class="i">$OptionsInfo</span>{<span class="w">ProcessCmpdInfo</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">all</span>} ||  <span class="i">$Options</span>{<span class="w">chiral</span>} || <span class="i">$Options</span>{<span class="w">empty</span>} || <span class="i">$Options</span>{<span class="w">fields</span>} || <span class="i">$Options</span>{<span class="w">invalidatomnumbers</span>}  || <span class="i">$Options</span>{<span class="w">mismatch</span>} || <span class="i">$Options</span>{<span class="w">salts</span>} || <span class="i">$Options</span>{<span class="w">unknownatoms</span>} || <span class="i">$Options</span>{<span class="w">datacheck</span>}<span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   532  519 
 | 
| 
 | 
   533  520   <span class="i">$OptionsInfo</span>{<span class="w">ProcessCmpdData</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">all</span>} || <span class="i">$Options</span>{<span class="w">fields</span>} || <span class="i">$Options</span>{<span class="w">empty</span>} || <span class="i">$Options</span>{<span class="w">datacheck</span>}<span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   534  521 
 | 
| 
 | 
   535  522   <span class="i">$OptionsInfo</span>{<span class="w">CountEmptyData</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">all</span>} || <span class="i">$Options</span>{<span class="w">empty</span>}<span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   536  523   <span class="i">$OptionsInfo</span>{<span class="w">CheckData</span>} = <span class="s">(</span><span class="i">$Options</span>{<span class="w">all</span>} || <span class="i">$Options</span>{<span class="w">datacheck</span>}<span class="s">)</span> ? <span class="n">1</span> <span class="co">:</span> <span class="n">0</span><span class="sc">;</span>
 | 
| 
 | 
   537  524 <span class="s">}</span>
 | 
| 
 | 
   538  525 
 | 
| 
 | 
   539  526 <span class="c"># Setup script usage  and retrieve command line arguments specified using various options...</span>
 | 
| 
 | 
   540 <a name="SetupScriptUsage-"></a> 527 <span class="k">sub </span><span class="m">SetupScriptUsage</span> <span class="s">{</span>
 | 
| 
 | 
   541  528 
 | 
| 
 | 
   542  529   <span class="c"># Setup default and retrieve all the options...</span>
 | 
| 
 | 
   543  530   <span class="i">%Options</span> = <span class="s">(</span><span class="s">)</span><span class="sc">;</span>
 | 
| 
 | 
   544  531   <span class="i">$Options</span>{<span class="w">detail</span>} = <span class="n">1</span><span class="sc">;</span>
 | 
| 
 | 
   545  532   <span class="k">if</span> <span class="s">(</span>!<span class="i">GetOptions</span><span class="s">(</span>\<span class="i">%Options</span><span class="cm">,</span> <span class="q">"all|a"</span><span class="cm">,</span> <span class="q">"count|c"</span><span class="cm">,</span> <span class="q">"chiral"</span><span class="cm">,</span> <span class="q">"datacheck"</span><span class="cm">,</span> <span class="q">"detail|d:i"</span><span class="cm">,</span> <span class="q">"empty|e"</span><span class="cm">,</span> <span class="q">"fields|f"</span><span class="cm">,</span> <span class="q">"help|h"</span><span class="cm">,</span> <span class="q">"invalidatomnumbers|i"</span><span class="cm">,</span> <span class="q">"mismatch|m"</span><span class="cm">,</span> <span class="q">"salts|s"</span><span class="cm">,</span> <span class="q">"unknownatoms|u"</span><span class="cm">,</span> <span class="q">"workingdir|w=s"</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   546  533     <span class="k">die</span> <span class="q">"\nTo get a list of valid options and their values, use \"$ScriptName -h\" or\n\"perl -S $ScriptName -h\" command and try again...\n"</span><span class="sc">;</span>
 | 
| 
 | 
   547  534   <span class="s">}</span>
 | 
| 
 | 
   548  535   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">workingdir</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   549  536     <span class="k">if</span> <span class="s">(</span>! <span class="k">-d</span> <span class="i">$Options</span>{<span class="w">workingdir</span>}<span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   550  537       <span class="k">die</span> <span class="q">"Error: The value specified, $Options{workingdir}, for option \"-w --workingdir\" is not a directory name.\n"</span><span class="sc">;</span>
 | 
| 
 | 
   551  538     <span class="s">}</span>
 | 
| 
 | 
   552  539     <span class="k">chdir</span> <span class="i">$Options</span>{<span class="w">workingdir</span>} <span class="k">or</span> <span class="k">die</span> <span class="q">"Error: Couldn't chdir $Options{workingdir}: $! \n"</span><span class="sc">;</span>
 | 
| 
 | 
   553  540   <span class="s">}</span>
 | 
| 
 | 
   554  541   <span class="k">if</span> <span class="s">(</span><span class="i">$Options</span>{<span class="w">detail</span>} <= <span class="n">0</span> || <span class="i">$Options</span>{<span class="w">detail</span>} > <span class="n">3</span><span class="s">)</span> <span class="s">{</span>
 | 
| 
 | 
   555  542     <span class="k">die</span> <span class="q">"Error: The value specified, $Options{detail}, for option \"-d --detail\" is not valid. Possible values: 1 to 3\n"</span><span class="sc">;</span>
 | 
| 
 | 
   556  543   <span class="s">}</span>
 | 
| 
 | 
   557  544 <span class="s">}</span>
 | 
| 
 | 
   558  545 
 | 
| 
 | 
   559 <a name="EOF-"></a></pre>
 | 
| 
 | 
   560 <p> </p>
 | 
| 
 | 
   561 <br />
 | 
| 
 | 
   562 <center>
 | 
| 
 | 
   563 <img src="../../../images/h2o2.png">
 | 
| 
 | 
   564 </center>
 | 
| 
 | 
   565 </body>
 | 
| 
 | 
   566 </html>
 |