~ubuntu-branches/ubuntu/vivid/tesseract/vivid

« back to all changes in this revision

Viewing changes to doc/html/a00556.html

  • Committer: Package Import Robot
  • Author(s): Jeff Breidenbach
  • Date: 2014-02-03 11:10:20 UTC
  • mfrom: (1.3.1) (19.1.1 experimental)
  • Revision ID: package-import@ubuntu.com-20140203111020-igquodd7pjlp3uri
Tags: 3.03.01-1
* New upstream release, includes critical fix to PDF rendering
* Complete leptonlib transition (see bug #735509)
* Promote from experimental to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
2
<html xmlns="http://www.w3.org/1999/xhtml">
 
3
<head>
 
4
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 
5
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
 
6
<title>tesseract: STATS Class Reference</title>
 
7
 
 
8
<link href="tabs.css" rel="stylesheet" type="text/css"/>
 
9
<link href="doxygen.css" rel="stylesheet" type="text/css" />
 
10
<link href="navtree.css" rel="stylesheet" type="text/css"/>
 
11
<script type="text/javascript" src="jquery.js"></script>
 
12
<script type="text/javascript" src="resize.js"></script>
 
13
<script type="text/javascript" src="navtree.js"></script>
 
14
<script type="text/javascript">
 
15
  $(document).ready(initResizable);
 
16
</script>
 
17
<link href="search/search.css" rel="stylesheet" type="text/css"/>
 
18
<script type="text/javascript" src="search/search.js"></script>
 
19
<script type="text/javascript">
 
20
  $(document).ready(function() { searchBox.OnSelectItem(0); });
 
21
</script>
 
22
 
 
23
</head>
 
24
<body>
 
25
<div id="top"><!-- do not remove this div! -->
 
26
 
 
27
 
 
28
<div id="titlearea">
 
29
<table cellspacing="0" cellpadding="0">
 
30
 <tbody>
 
31
 <tr style="height: 56px;">
 
32
  
 
33
  
 
34
  <td style="padding-left: 0.5em;">
 
35
   <div id="projectname">tesseract
 
36
   &#160;<span id="projectnumber">3.03</span>
 
37
   </div>
 
38
   
 
39
  </td>
 
40
  
 
41
  
 
42
  
 
43
 </tr>
 
44
 </tbody>
 
45
</table>
 
46
</div>
 
47
 
 
48
<!-- Generated by Doxygen 1.7.6.1 -->
 
49
<script type="text/javascript">
 
50
var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
51
</script>
 
52
  <div id="navrow1" class="tabs">
 
53
    <ul class="tablist">
 
54
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
 
55
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
 
56
      <li><a href="modules.html"><span>Modules</span></a></li>
 
57
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
 
58
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
 
59
      <li><a href="files.html"><span>Files</span></a></li>
 
60
      <li>
 
61
        <div id="MSearchBox" class="MSearchBoxInactive">
 
62
        <span class="left">
 
63
          <img id="MSearchSelect" src="search/mag_sel.png"
 
64
               onmouseover="return searchBox.OnSearchSelectShow()"
 
65
               onmouseout="return searchBox.OnSearchSelectHide()"
 
66
               alt=""/>
 
67
          <input type="text" id="MSearchField" value="Search" accesskey="S"
 
68
               onfocus="searchBox.OnSearchFieldFocus(true)" 
 
69
               onblur="searchBox.OnSearchFieldFocus(false)" 
 
70
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
 
71
          </span><span class="right">
 
72
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
 
73
          </span>
 
74
        </div>
 
75
      </li>
 
76
    </ul>
 
77
  </div>
 
78
  <div id="navrow2" class="tabs2">
 
79
    <ul class="tablist">
 
80
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
 
81
      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
 
82
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
 
83
    </ul>
 
84
  </div>
 
85
</div>
 
86
<div id="side-nav" class="ui-resizable side-nav-resizable">
 
87
  <div id="nav-tree">
 
88
    <div id="nav-tree-contents">
 
89
    </div>
 
90
  </div>
 
91
  <div id="splitbar" style="-moz-user-select:none;" 
 
92
       class="ui-resizable-handle">
 
93
  </div>
 
94
</div>
 
95
<script type="text/javascript">
 
96
  initNavTree('a00556.html','');
 
97
</script>
 
98
<div id="doc-content">
 
99
<div class="header">
 
100
  <div class="summary">
 
101
<a href="#pub-methods">Public Member Functions</a>  </div>
 
102
  <div class="headertitle">
 
103
<div class="title">STATS Class Reference</div>  </div>
 
104
</div><!--header-->
 
105
<div class="contents">
 
106
<!-- doxytag: class="STATS" -->
 
107
<p><code>#include &lt;<a class="el" href="a00798_source.html">statistc.h</a>&gt;</code></p>
 
108
 
 
109
<p><a href="a01663.html">List of all members.</a></p>
 
110
<table class="memberdecls">
 
111
<tr><td colspan="2"><h2><a name="pub-methods"></a>
 
112
Public Member Functions</h2></td></tr>
 
113
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#aa1b9c1929863302a8c82b23eec4abc68">STATS</a> (<a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> min_bucket_value, <a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> max_bucket_value_plus_1)</td></tr>
 
114
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#adee998dc70a140d97c2f0373145d869e">STATS</a> ()</td></tr>
 
115
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#ae4c0f842fa82e82cdb9a34036aceed6c">~STATS</a> ()</td></tr>
 
116
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#abcad6a546e1a1851730bc32f17b154ee">set_range</a> (<a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> min_bucket_value, <a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> max_bucket_value_plus_1)</td></tr>
 
117
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a28e9fd9515ea3b35e3f66ed078e285a6">clear</a> ()</td></tr>
 
118
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a> (<a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> value, <a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a01043.html#acd4ea858d7133e40518e0832ff9d94b2">count</a>)</td></tr>
 
119
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a5d353e951f61daf06c6582dfc106ff11">mode</a> () const </td></tr>
 
120
<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#acfb3db3eb4577fae46b133a37edbdb4a">mean</a> () const </td></tr>
 
121
<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a865168aa1377e8845491d19ebc56b7ad">sd</a> () const </td></tr>
 
122
<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a> (double frac) const </td></tr>
 
123
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a2297ba473c03bc66c5c9ac58cf2ffbee">min_bucket</a> () const </td></tr>
 
124
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a42e9cc7b119d22acdd74ea62f0f64a64">max_bucket</a> () const </td></tr>
 
125
<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a3ce7095c6a55592a610085b0fad7d955">median</a> () const </td></tr>
 
126
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a> (<a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> value) const </td></tr>
 
127
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a83ad18e6ba02e9f63f4f7d84fcf76aa4">get_total</a> () const </td></tr>
 
128
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#ace640389c49d4af2197ed5a0b74b276d">local_min</a> (<a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> x) const </td></tr>
 
129
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a7abb618f6eab29a03bc4374b189b1143">smooth</a> (<a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> factor)</td></tr>
 
130
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a6b46b4cda23e1b91b6d77f2d00c1560e">cluster</a> (float lower, float upper, float multiple, <a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> max_clusters, <a class="el" href="a00556.html">STATS</a> *clusters)</td></tr>
 
131
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a43660e0747b87aa39284e021a9252c57">top_n_modes</a> (int max_modes, <a class="el" href="a00403.html">GenericVector</a>&lt; <a class="el" href="a00436.html">tesseract::KDPairInc</a>&lt; float, int &gt; &gt; *modes) const </td></tr>
 
132
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a78e51420aa91ecff1f635e606d4a0f88">print</a> () const </td></tr>
 
133
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a34973e36fc9688a67c2aa69c149504de">print_summary</a> () const </td></tr>
 
134
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a6f39b8d4dcae1a2a33e2db066a82a7dd">plot</a> (<a class="el" href="a00532.html">ScrollView</a> *window, float xorigin, float yorigin, float xscale, float yscale, <a class="el" href="a00532.html#a100504544a5423a94222149ee9ed0fe8">ScrollView::Color</a> colour) const </td></tr>
 
135
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00556.html#a3c6dde76811809c128c79ed67d666db2">plotline</a> (<a class="el" href="a00532.html">ScrollView</a> *window, float xorigin, float yorigin, float xscale, float yscale, <a class="el" href="a00532.html#a100504544a5423a94222149ee9ed0fe8">ScrollView::Color</a> colour) const </td></tr>
 
136
</table>
 
137
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
 
138
<div class="textblock">
 
139
<p>Definition at line <a class="el" href="a00798_source.html#l00033">33</a> of file <a class="el" href="a00798_source.html">statistc.h</a>.</p>
 
140
</div><hr/><h2>Constructor &amp; Destructor Documentation</h2>
 
141
<a class="anchor" id="aa1b9c1929863302a8c82b23eec4abc68"></a><!-- doxytag: member="STATS::STATS" ref="aa1b9c1929863302a8c82b23eec4abc68" args="(inT32 min_bucket_value, inT32 max_bucket_value_plus_1)" -->
 
142
<div class="memitem">
 
143
<div class="memproto">
 
144
      <table class="memname">
 
145
        <tr>
 
146
          <td class="memname"><a class="el" href="a00556.html#aa1b9c1929863302a8c82b23eec4abc68">STATS::STATS</a> </td>
 
147
          <td>(</td>
 
148
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
149
          <td class="paramname"><em>min_bucket_value</em>, </td>
 
150
        </tr>
 
151
        <tr>
 
152
          <td class="paramkey"></td>
 
153
          <td></td>
 
154
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
155
          <td class="paramname"><em>max_bucket_value_plus_1</em>&#160;</td>
 
156
        </tr>
 
157
        <tr>
 
158
          <td></td>
 
159
          <td>)</td>
 
160
          <td></td><td></td>
 
161
        </tr>
 
162
      </table>
 
163
</div>
 
164
<div class="memdoc">
 
165
 
 
166
<p>Definition at line <a class="el" href="a00797_source.html#l00040">40</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
167
<div class="fragment"><pre class="fragment">                                                                  {
 
168
  <span class="keywordflow">if</span> (max_bucket_value_plus_1 &lt;= min_bucket_value) {
 
169
    min_bucket_value = 0;
 
170
    max_bucket_value_plus_1 = 1;
 
171
  }
 
172
  rangemin_ = min_bucket_value;                <span class="comment">// setup</span>
 
173
  rangemax_ = max_bucket_value_plus_1;
 
174
  buckets_ = <span class="keyword">new</span> <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>[rangemax_ - rangemin_];
 
175
  <a class="code" href="a00556.html#a28e9fd9515ea3b35e3f66ed078e285a6">clear</a>();
 
176
}
 
177
</pre></div>
 
178
</div>
 
179
</div>
 
180
<a class="anchor" id="adee998dc70a140d97c2f0373145d869e"></a><!-- doxytag: member="STATS::STATS" ref="adee998dc70a140d97c2f0373145d869e" args="()" -->
 
181
<div class="memitem">
 
182
<div class="memproto">
 
183
      <table class="memname">
 
184
        <tr>
 
185
          <td class="memname"><a class="el" href="a00556.html#aa1b9c1929863302a8c82b23eec4abc68">STATS::STATS</a> </td>
 
186
          <td>(</td>
 
187
          <td class="paramname"></td><td>)</td>
 
188
          <td></td>
 
189
        </tr>
 
190
      </table>
 
191
</div>
 
192
<div class="memdoc">
 
193
 
 
194
<p>Definition at line <a class="el" href="a00797_source.html#l00051">51</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
195
<div class="fragment"><pre class="fragment">             {
 
196
  rangemax_ = 0;
 
197
  rangemin_ = 0;
 
198
  buckets_ = NULL;
 
199
}
 
200
</pre></div>
 
201
</div>
 
202
</div>
 
203
<a class="anchor" id="ae4c0f842fa82e82cdb9a34036aceed6c"></a><!-- doxytag: member="STATS::~STATS" ref="ae4c0f842fa82e82cdb9a34036aceed6c" args="()" -->
 
204
<div class="memitem">
 
205
<div class="memproto">
 
206
      <table class="memname">
 
207
        <tr>
 
208
          <td class="memname"><a class="el" href="a00556.html#ae4c0f842fa82e82cdb9a34036aceed6c">STATS::~STATS</a> </td>
 
209
          <td>(</td>
 
210
          <td class="paramname"></td><td>)</td>
 
211
          <td></td>
 
212
        </tr>
 
213
      </table>
 
214
</div>
 
215
<div class="memdoc">
 
216
 
 
217
<p>Definition at line <a class="el" href="a00797_source.html#l00092">92</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
218
<div class="fragment"><pre class="fragment">               {
 
219
  <span class="keywordflow">if</span> (buckets_ != NULL) {
 
220
    <span class="keyword">delete</span> [] buckets_;
 
221
    buckets_ = NULL;
 
222
  }
 
223
}
 
224
</pre></div>
 
225
</div>
 
226
</div>
 
227
<hr/><h2>Member Function Documentation</h2>
 
228
<a class="anchor" id="ab8cacba14df28eed1bffc4cea0b2f87f"></a><!-- doxytag: member="STATS::add" ref="ab8cacba14df28eed1bffc4cea0b2f87f" args="(inT32 value, inT32 count)" -->
 
229
<div class="memitem">
 
230
<div class="memproto">
 
231
      <table class="memname">
 
232
        <tr>
 
233
          <td class="memname">void <a class="el" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">STATS::add</a> </td>
 
234
          <td>(</td>
 
235
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
236
          <td class="paramname"><em>value</em>, </td>
 
237
        </tr>
 
238
        <tr>
 
239
          <td class="paramkey"></td>
 
240
          <td></td>
 
241
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
242
          <td class="paramname"><em>count</em>&#160;</td>
 
243
        </tr>
 
244
        <tr>
 
245
          <td></td>
 
246
          <td>)</td>
 
247
          <td></td><td></td>
 
248
        </tr>
 
249
      </table>
 
250
</div>
 
251
<div class="memdoc">
 
252
 
 
253
<p>Definition at line <a class="el" href="a00797_source.html#l00104">104</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
254
<div class="fragment"><pre class="fragment">                                        {
 
255
  <span class="keywordflow">if</span> (buckets_ == NULL) {
 
256
    <span class="keywordflow">return</span>;
 
257
  }
 
258
  value = <a class="code" href="a00830.html#af8739168d5b3235996eeb25dac3c4044">ClipToRange</a>(value, rangemin_, rangemax_ - 1);
 
259
  buckets_[value - rangemin_] += <a class="code" href="a01042.html#acd4ea858d7133e40518e0832ff9d94b2">count</a>;
 
260
  total_count_ += <a class="code" href="a01042.html#acd4ea858d7133e40518e0832ff9d94b2">count</a>;          <span class="comment">// keep count of total</span>
 
261
}
 
262
</pre></div>
 
263
</div>
 
264
</div>
 
265
<a class="anchor" id="a28e9fd9515ea3b35e3f66ed078e285a6"></a><!-- doxytag: member="STATS::clear" ref="a28e9fd9515ea3b35e3f66ed078e285a6" args="()" -->
 
266
<div class="memitem">
 
267
<div class="memproto">
 
268
      <table class="memname">
 
269
        <tr>
 
270
          <td class="memname">void <a class="el" href="a00556.html#a28e9fd9515ea3b35e3f66ed078e285a6">STATS::clear</a> </td>
 
271
          <td>(</td>
 
272
          <td class="paramname"></td><td>)</td>
 
273
          <td></td>
 
274
        </tr>
 
275
      </table>
 
276
</div>
 
277
<div class="memdoc">
 
278
 
 
279
<p>Definition at line <a class="el" href="a00797_source.html#l00081">81</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
280
<div class="fragment"><pre class="fragment">                  {  <span class="comment">// clear out buckets</span>
 
281
  total_count_ = 0;
 
282
  <span class="keywordflow">if</span> (buckets_ != NULL)
 
283
    memset(buckets_, 0, (rangemax_ - rangemin_) * <span class="keyword">sizeof</span>(buckets_[0]));
 
284
}
 
285
</pre></div>
 
286
</div>
 
287
</div>
 
288
<a class="anchor" id="a6b46b4cda23e1b91b6d77f2d00c1560e"></a><!-- doxytag: member="STATS::cluster" ref="a6b46b4cda23e1b91b6d77f2d00c1560e" args="(float lower, float upper, float multiple, inT32 max_clusters, STATS *clusters)" -->
 
289
<div class="memitem">
 
290
<div class="memproto">
 
291
      <table class="memname">
 
292
        <tr>
 
293
          <td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00556.html#a6b46b4cda23e1b91b6d77f2d00c1560e">STATS::cluster</a> </td>
 
294
          <td>(</td>
 
295
          <td class="paramtype">float&#160;</td>
 
296
          <td class="paramname"><em>lower</em>, </td>
 
297
        </tr>
 
298
        <tr>
 
299
          <td class="paramkey"></td>
 
300
          <td></td>
 
301
          <td class="paramtype">float&#160;</td>
 
302
          <td class="paramname"><em>upper</em>, </td>
 
303
        </tr>
 
304
        <tr>
 
305
          <td class="paramkey"></td>
 
306
          <td></td>
 
307
          <td class="paramtype">float&#160;</td>
 
308
          <td class="paramname"><em>multiple</em>, </td>
 
309
        </tr>
 
310
        <tr>
 
311
          <td class="paramkey"></td>
 
312
          <td></td>
 
313
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
314
          <td class="paramname"><em>max_clusters</em>, </td>
 
315
        </tr>
 
316
        <tr>
 
317
          <td class="paramkey"></td>
 
318
          <td></td>
 
319
          <td class="paramtype"><a class="el" href="a00556.html">STATS</a> *&#160;</td>
 
320
          <td class="paramname"><em>clusters</em>&#160;</td>
 
321
        </tr>
 
322
        <tr>
 
323
          <td></td>
 
324
          <td>)</td>
 
325
          <td></td><td></td>
 
326
        </tr>
 
327
      </table>
 
328
</div>
 
329
<div class="memdoc">
 
330
 
 
331
<p>Definition at line <a class="el" href="a00797_source.html#l00324">324</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
332
<div class="fragment"><pre class="fragment">                                      {   <span class="comment">// array of clusters</span>
 
333
  <a class="code" href="a00831.html#a7712a7e28433d0ade59219a129549b6f">BOOL8</a> new_cluster;             <span class="comment">// added one</span>
 
334
  <span class="keywordtype">float</span> *centres;                <span class="comment">// cluster centres</span>
 
335
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> entry;                   <span class="comment">// bucket index</span>
 
336
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="code" href="a00556.html#a6b46b4cda23e1b91b6d77f2d00c1560e">cluster</a>;                 <span class="comment">// cluster index</span>
 
337
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> best_cluster;            <span class="comment">// one to assign to</span>
 
338
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> new_centre = 0;          <span class="comment">// residual mode</span>
 
339
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> new_mode;                <span class="comment">// pile count of new_centre</span>
 
340
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="code" href="a01042.html#acd4ea858d7133e40518e0832ff9d94b2">count</a>;                   <span class="comment">// pile to place</span>
 
341
  <span class="keywordtype">float</span> dist;                    <span class="comment">// from cluster</span>
 
342
  <span class="keywordtype">float</span> min_dist;                <span class="comment">// from best_cluster</span>
 
343
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> cluster_count;           <span class="comment">// no of clusters</span>
 
344
 
 
345
  <span class="keywordflow">if</span> (buckets_ == NULL || max_clusters &lt; 1)
 
346
    <span class="keywordflow">return</span> 0;
 
347
  centres = <span class="keyword">new</span> <span class="keywordtype">float</span>[max_clusters + 1];
 
348
  <span class="keywordflow">for</span> (cluster_count = 1; cluster_count &lt;= max_clusters
 
349
       &amp;&amp; clusters[cluster_count].buckets_ != NULL
 
350
       &amp;&amp; clusters[cluster_count].total_count_ &gt; 0;
 
351
       cluster_count++) {
 
352
    centres[cluster_count] =
 
353
      <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(clusters[cluster_count].<a class="code" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a>(0.5));
 
354
    new_centre = clusters[cluster_count].<a class="code" href="a00556.html#a5d353e951f61daf06c6582dfc106ff11">mode</a>();
 
355
    <span class="keywordflow">for</span> (entry = new_centre - 1; centres[cluster_count] - entry &lt; lower
 
356
         &amp;&amp; entry &gt;= rangemin_
 
357
         &amp;&amp; <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry) &lt;= <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry + 1);
 
358
         entry--) {
 
359
      count = <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry) - clusters[0].<a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry);
 
360
      <span class="keywordflow">if</span> (count &gt; 0) {
 
361
        clusters[cluster_count].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a>(entry, count);
 
362
        clusters[0].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a> (entry, count);
 
363
      }
 
364
    }
 
365
    <span class="keywordflow">for</span> (entry = new_centre + 1; entry - centres[cluster_count] &lt; lower
 
366
         &amp;&amp; entry &lt; rangemax_
 
367
         &amp;&amp; <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry) &lt;= <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry - 1);
 
368
         entry++) {
 
369
      count = <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry) - clusters[0].<a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry);
 
370
      <span class="keywordflow">if</span> (count &gt; 0) {
 
371
        clusters[cluster_count].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a>(entry, count);
 
372
        clusters[0].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a>(entry, count);
 
373
      }
 
374
    }
 
375
  }
 
376
  cluster_count--;
 
377
 
 
378
  <span class="keywordflow">if</span> (cluster_count == 0) {
 
379
    clusters[0].<a class="code" href="a00556.html#abcad6a546e1a1851730bc32f17b154ee">set_range</a>(rangemin_, rangemax_);
 
380
  }
 
381
  <span class="keywordflow">do</span> {
 
382
    new_cluster = FALSE;
 
383
    new_mode = 0;
 
384
    <span class="keywordflow">for</span> (entry = 0; entry &lt; rangemax_ - rangemin_; entry++) {
 
385
      count = buckets_[entry] - clusters[0].buckets_[entry];
 
386
      <span class="comment">//remaining pile</span>
 
387
      <span class="keywordflow">if</span> (count &gt; 0) {           <span class="comment">//any to handle</span>
 
388
        min_dist = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(<a class="code" href="a00831.html#aac62d87844689a18b6f5339a89ed6e7f">MAX_INT32</a>);
 
389
        best_cluster = 0;
 
390
        <span class="keywordflow">for</span> (cluster = 1; cluster &lt;= cluster_count; cluster++) {
 
391
          dist = entry + rangemin_ - centres[<a class="code" href="a00556.html#a6b46b4cda23e1b91b6d77f2d00c1560e">cluster</a>];
 
392
          <span class="comment">//find distance</span>
 
393
          <span class="keywordflow">if</span> (dist &lt; 0)
 
394
            dist = -dist;
 
395
          <span class="keywordflow">if</span> (dist &lt; min_dist) {
 
396
            min_dist = dist;     <span class="comment">//find least</span>
 
397
            best_cluster = <a class="code" href="a00556.html#a6b46b4cda23e1b91b6d77f2d00c1560e">cluster</a>;
 
398
          }
 
399
        }
 
400
        <span class="keywordflow">if</span> (min_dist &gt; upper     <span class="comment">//far enough for new</span>
 
401
          &amp;&amp; (best_cluster == 0
 
402
          || entry + rangemin_ &gt; centres[best_cluster] * multiple
 
403
        || entry + rangemin_ &lt; centres[best_cluster] / multiple)) {
 
404
          <span class="keywordflow">if</span> (count &gt; new_mode) {
 
405
            new_mode = <a class="code" href="a01042.html#acd4ea858d7133e40518e0832ff9d94b2">count</a>;
 
406
            new_centre = entry + rangemin_;
 
407
          }
 
408
        }
 
409
      }
 
410
    }
 
411
                                 <span class="comment">// need new and room</span>
 
412
    <span class="keywordflow">if</span> (new_mode &gt; 0 &amp;&amp; cluster_count &lt; max_clusters) {
 
413
      cluster_count++;
 
414
      new_cluster = TRUE;
 
415
      <span class="keywordflow">if</span> (!clusters[cluster_count].<a class="code" href="a00556.html#abcad6a546e1a1851730bc32f17b154ee">set_range</a>(rangemin_, rangemax_))
 
416
        <span class="keywordflow">return</span> 0;
 
417
      centres[cluster_count] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(new_centre);
 
418
      clusters[cluster_count].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a>(new_centre, new_mode);
 
419
      clusters[0].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a>(new_centre, new_mode);
 
420
      <span class="keywordflow">for</span> (entry = new_centre - 1; centres[cluster_count] - entry &lt; lower
 
421
        &amp;&amp; entry &gt;= rangemin_
 
422
      &amp;&amp; <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a> (entry) &lt;= <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry + 1); entry--) {
 
423
        count = <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry) - clusters[0].<a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry);
 
424
        <span class="keywordflow">if</span> (count &gt; 0) {
 
425
          clusters[cluster_count].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a>(entry, count);
 
426
          clusters[0].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a>(entry, count);
 
427
        }
 
428
      }
 
429
      <span class="keywordflow">for</span> (entry = new_centre + 1; entry - centres[cluster_count] &lt; lower
 
430
        &amp;&amp; entry &lt; rangemax_
 
431
      &amp;&amp; <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a> (entry) &lt;= <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry - 1); entry++) {
 
432
        count = <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry) - clusters[0].<a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry);
 
433
        <span class="keywordflow">if</span> (count &gt; 0) {
 
434
          clusters[cluster_count].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a>(entry, count);
 
435
          clusters[0].<a class="code" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">add</a> (entry, count);
 
436
        }
 
437
      }
 
438
      centres[cluster_count] =
 
439
        <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(clusters[cluster_count].<a class="code" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a>(0.5));
 
440
    }
 
441
  } <span class="keywordflow">while</span> (new_cluster &amp;&amp; cluster_count &lt; max_clusters);
 
442
  <span class="keyword">delete</span> [] centres;
 
443
  <span class="keywordflow">return</span> cluster_count;
 
444
}
 
445
</pre></div>
 
446
</div>
 
447
</div>
 
448
<a class="anchor" id="a83ad18e6ba02e9f63f4f7d84fcf76aa4"></a><!-- doxytag: member="STATS::get_total" ref="a83ad18e6ba02e9f63f4f7d84fcf76aa4" args="() const " -->
 
449
<div class="memitem">
 
450
<div class="memproto">
 
451
      <table class="memname">
 
452
        <tr>
 
453
          <td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00556.html#a83ad18e6ba02e9f63f4f7d84fcf76aa4">STATS::get_total</a> </td>
 
454
          <td>(</td>
 
455
          <td class="paramname"></td><td>)</td>
 
456
          <td> const<code> [inline]</code></td>
 
457
        </tr>
 
458
      </table>
 
459
</div>
 
460
<div class="memdoc">
 
461
 
 
462
<p>Definition at line <a class="el" href="a00798_source.html#l00086">86</a> of file <a class="el" href="a00798_source.html">statistc.h</a>.</p>
 
463
<div class="fragment"><pre class="fragment">                          {
 
464
    <span class="keywordflow">return</span> total_count_;        <span class="comment">// total of all piles</span>
 
465
  }
 
466
</pre></div>
 
467
</div>
 
468
</div>
 
469
<a class="anchor" id="a3fc40518660ac7a89adef4919361270c"></a><!-- doxytag: member="STATS::ile" ref="a3fc40518660ac7a89adef4919361270c" args="(double frac) const " -->
 
470
<div class="memitem">
 
471
<div class="memproto">
 
472
      <table class="memname">
 
473
        <tr>
 
474
          <td class="memname">double <a class="el" href="a00556.html#a3fc40518660ac7a89adef4919361270c">STATS::ile</a> </td>
 
475
          <td>(</td>
 
476
          <td class="paramtype">double&#160;</td>
 
477
          <td class="paramname"><em>frac</em></td><td>)</td>
 
478
          <td> const</td>
 
479
        </tr>
 
480
      </table>
 
481
</div>
 
482
<div class="memdoc">
 
483
 
 
484
<p>Definition at line <a class="el" href="a00797_source.html#l00177">177</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
485
<div class="fragment"><pre class="fragment">                                   {
 
486
  <span class="keywordflow">if</span> (buckets_ == NULL || total_count_ == 0) {
 
487
    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(rangemin_);
 
488
  }
 
489
<span class="preprocessor">#if 0</span>
 
490
<span class="preprocessor"></span>  <span class="comment">// TODO(rays) The existing code doesn&#39;t seem to be doing the right thing</span>
 
491
  <span class="comment">// with target a double but this substitute crashes the code that uses it.</span>
 
492
  <span class="comment">// Investigate and fix properly.</span>
 
493
  <span class="keywordtype">int</span> target = <a class="code" href="a00830.html#ab60e4f82956a1f5fdb54d0d8303e95b7">IntCastRounded</a>(frac * total_count_);
 
494
  target = <a class="code" href="a00830.html#af8739168d5b3235996eeb25dac3c4044">ClipToRange</a>(target, 1, total_count_);
 
495
<span class="preprocessor">#else</span>
 
496
<span class="preprocessor"></span>  <span class="keywordtype">double</span> target = frac * total_count_;
 
497
  target = <a class="code" href="a00830.html#af8739168d5b3235996eeb25dac3c4044">ClipToRange</a>(target, 1.0, static_cast&lt;double&gt;(total_count_));
 
498
<span class="preprocessor">#endif</span>
 
499
<span class="preprocessor"></span>  <span class="keywordtype">int</span> sum = 0;
 
500
  <span class="keywordtype">int</span> index = 0;
 
501
  <span class="keywordflow">for</span> (index = 0; index &lt; rangemax_ - rangemin_ &amp;&amp; sum &lt; target;
 
502
       sum += buckets_[index++]);
 
503
  <span class="keywordflow">if</span> (index &gt; 0) {
 
504
    <a class="code" href="a00823.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(buckets_[index - 1] &gt; 0);
 
505
    <span class="keywordflow">return</span> rangemin_ + index -
 
506
        <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(sum - target) / buckets_[index - 1];
 
507
  } <span class="keywordflow">else</span> {
 
508
    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(rangemin_);
 
509
  }
 
510
}
 
511
</pre></div>
 
512
</div>
 
513
</div>
 
514
<a class="anchor" id="ace640389c49d4af2197ed5a0b74b276d"></a><!-- doxytag: member="STATS::local_min" ref="ace640389c49d4af2197ed5a0b74b276d" args="(inT32 x) const " -->
 
515
<div class="memitem">
 
516
<div class="memproto">
 
517
      <table class="memname">
 
518
        <tr>
 
519
          <td class="memname">bool <a class="el" href="a00556.html#ace640389c49d4af2197ed5a0b74b276d">STATS::local_min</a> </td>
 
520
          <td>(</td>
 
521
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
522
          <td class="paramname"><em>x</em></td><td>)</td>
 
523
          <td> const</td>
 
524
        </tr>
 
525
      </table>
 
526
</div>
 
527
<div class="memdoc">
 
528
 
 
529
<p>Definition at line <a class="el" href="a00797_source.html#l00266">266</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
530
<div class="fragment"><pre class="fragment">                                   {
 
531
  <span class="keywordflow">if</span> (buckets_ == NULL) {
 
532
    <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
533
  }
 
534
  x = <a class="code" href="a00830.html#af8739168d5b3235996eeb25dac3c4044">ClipToRange</a>(x, rangemin_, rangemax_ - 1) - rangemin_;
 
535
  <span class="keywordflow">if</span> (buckets_[x] == 0)
 
536
    <span class="keywordflow">return</span> <span class="keyword">true</span>;
 
537
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> index;                   <span class="comment">// table index</span>
 
538
  <span class="keywordflow">for</span> (index = x - 1; index &gt;= 0 &amp;&amp; buckets_[index] == buckets_[x]; --index);
 
539
  <span class="keywordflow">if</span> (index &gt;= 0 &amp;&amp; buckets_[index] &lt; buckets_[x])
 
540
    <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
541
  <span class="keywordflow">for</span> (index = x + 1; index &lt; rangemax_ - rangemin_ &amp;&amp;
 
542
       buckets_[index] == buckets_[x]; ++index);
 
543
  <span class="keywordflow">if</span> (index &lt; rangemax_ - rangemin_ &amp;&amp; buckets_[index] &lt; buckets_[x])
 
544
    <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
545
  <span class="keywordflow">else</span>
 
546
    <span class="keywordflow">return</span> <span class="keyword">true</span>;
 
547
}
 
548
</pre></div>
 
549
</div>
 
550
</div>
 
551
<a class="anchor" id="a42e9cc7b119d22acdd74ea62f0f64a64"></a><!-- doxytag: member="STATS::max_bucket" ref="a42e9cc7b119d22acdd74ea62f0f64a64" args="() const " -->
 
552
<div class="memitem">
 
553
<div class="memproto">
 
554
      <table class="memname">
 
555
        <tr>
 
556
          <td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00556.html#a42e9cc7b119d22acdd74ea62f0f64a64">STATS::max_bucket</a> </td>
 
557
          <td>(</td>
 
558
          <td class="paramname"></td><td>)</td>
 
559
          <td> const</td>
 
560
        </tr>
 
561
      </table>
 
562
</div>
 
563
<div class="memdoc">
 
564
 
 
565
<p>Definition at line <a class="el" href="a00797_source.html#l00225">225</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
566
<div class="fragment"><pre class="fragment">                              {  <span class="comment">// Find max</span>
 
567
  <span class="keywordflow">if</span> (buckets_ == NULL || total_count_ == 0) {
 
568
    <span class="keywordflow">return</span> rangemin_;
 
569
  }
 
570
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> max;
 
571
  <span class="keywordflow">for</span> (max = rangemax_ - rangemin_ - 1; max &gt; 0 &amp;&amp; buckets_[max] == 0; max--);
 
572
  <span class="keywordflow">return</span> rangemin_ + max;
 
573
}
 
574
</pre></div>
 
575
</div>
 
576
</div>
 
577
<a class="anchor" id="acfb3db3eb4577fae46b133a37edbdb4a"></a><!-- doxytag: member="STATS::mean" ref="acfb3db3eb4577fae46b133a37edbdb4a" args="() const " -->
 
578
<div class="memitem">
 
579
<div class="memproto">
 
580
      <table class="memname">
 
581
        <tr>
 
582
          <td class="memname">double <a class="el" href="a00556.html#acfb3db3eb4577fae46b133a37edbdb4a">STATS::mean</a> </td>
 
583
          <td>(</td>
 
584
          <td class="paramname"></td><td>)</td>
 
585
          <td> const</td>
 
586
        </tr>
 
587
      </table>
 
588
</div>
 
589
<div class="memdoc">
 
590
 
 
591
<p>Definition at line <a class="el" href="a00797_source.html#l00138">138</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
592
<div class="fragment"><pre class="fragment">                         {  <span class="comment">//get mean of samples</span>
 
593
  <span class="keywordflow">if</span> (buckets_ == NULL || total_count_ &lt;= 0) {
 
594
    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(rangemin_);
 
595
  }
 
596
  <a class="code" href="a00831.html#ac53c9cafaf7fe16f985994c49f6b0964">inT64</a> sum = 0;
 
597
  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> index = rangemax_ - rangemin_ - 1; index &gt;= 0; --index) {
 
598
    sum += <span class="keyword">static_cast&lt;</span><a class="code" href="a00831.html#ac53c9cafaf7fe16f985994c49f6b0964">inT64</a><span class="keyword">&gt;</span>(index) * buckets_[index];
 
599
  }
 
600
  <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(sum) / total_count_ + rangemin_;
 
601
}
 
602
</pre></div>
 
603
</div>
 
604
</div>
 
605
<a class="anchor" id="a3ce7095c6a55592a610085b0fad7d955"></a><!-- doxytag: member="STATS::median" ref="a3ce7095c6a55592a610085b0fad7d955" args="() const " -->
 
606
<div class="memitem">
 
607
<div class="memproto">
 
608
      <table class="memname">
 
609
        <tr>
 
610
          <td class="memname">double <a class="el" href="a00556.html#a3ce7095c6a55592a610085b0fad7d955">STATS::median</a> </td>
 
611
          <td>(</td>
 
612
          <td class="paramname"></td><td>)</td>
 
613
          <td> const</td>
 
614
        </tr>
 
615
      </table>
 
616
</div>
 
617
<div class="memdoc">
 
618
 
 
619
<p>Definition at line <a class="el" href="a00797_source.html#l00243">243</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
620
<div class="fragment"><pre class="fragment">                           {  <span class="comment">//get median</span>
 
621
  <span class="keywordflow">if</span> (buckets_ == NULL) {
 
622
    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(rangemin_);
 
623
  }
 
624
  <span class="keywordtype">double</span> <a class="code" href="a00556.html#a3ce7095c6a55592a610085b0fad7d955">median</a> = <a class="code" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a>(0.5);
 
625
  <span class="keywordtype">int</span> median_pile = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(floor(median));
 
626
  <span class="keywordflow">if</span> ((total_count_ &gt; 1) &amp;&amp; (<a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(median_pile) == 0)) {
 
627
    <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> min_pile;
 
628
    <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> max_pile;
 
629
    <span class="comment">/* Find preceeding non zero pile */</span>
 
630
    <span class="keywordflow">for</span> (min_pile = median_pile; <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(min_pile) == 0; min_pile--);
 
631
    <span class="comment">/* Find following non zero pile */</span>
 
632
    <span class="keywordflow">for</span> (max_pile = median_pile; <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(max_pile) == 0; max_pile++);
 
633
    median = (min_pile + max_pile) / 2.0;
 
634
  }
 
635
  <span class="keywordflow">return</span> <a class="code" href="a00556.html#a3ce7095c6a55592a610085b0fad7d955">median</a>;
 
636
}
 
637
</pre></div>
 
638
</div>
 
639
</div>
 
640
<a class="anchor" id="a2297ba473c03bc66c5c9ac58cf2ffbee"></a><!-- doxytag: member="STATS::min_bucket" ref="a2297ba473c03bc66c5c9ac58cf2ffbee" args="() const " -->
 
641
<div class="memitem">
 
642
<div class="memproto">
 
643
      <table class="memname">
 
644
        <tr>
 
645
          <td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00556.html#a2297ba473c03bc66c5c9ac58cf2ffbee">STATS::min_bucket</a> </td>
 
646
          <td>(</td>
 
647
          <td class="paramname"></td><td>)</td>
 
648
          <td> const</td>
 
649
        </tr>
 
650
      </table>
 
651
</div>
 
652
<div class="memdoc">
 
653
 
 
654
<p>Definition at line <a class="el" href="a00797_source.html#l00209">209</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
655
<div class="fragment"><pre class="fragment">                              {  <span class="comment">// Find min</span>
 
656
  <span class="keywordflow">if</span> (buckets_ == NULL || total_count_ == 0) {
 
657
    <span class="keywordflow">return</span> rangemin_;
 
658
  }
 
659
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> min = 0;
 
660
  <span class="keywordflow">for</span> (min = 0; (min &lt; rangemax_ - rangemin_) &amp;&amp; (buckets_[min] == 0); min++);
 
661
  <span class="keywordflow">return</span> rangemin_ + min;
 
662
}
 
663
</pre></div>
 
664
</div>
 
665
</div>
 
666
<a class="anchor" id="a5d353e951f61daf06c6582dfc106ff11"></a><!-- doxytag: member="STATS::mode" ref="a5d353e951f61daf06c6582dfc106ff11" args="() const " -->
 
667
<div class="memitem">
 
668
<div class="memproto">
 
669
      <table class="memname">
 
670
        <tr>
 
671
          <td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00556.html#a5d353e951f61daf06c6582dfc106ff11">STATS::mode</a> </td>
 
672
          <td>(</td>
 
673
          <td class="paramname"></td><td>)</td>
 
674
          <td> const</td>
 
675
        </tr>
 
676
      </table>
 
677
</div>
 
678
<div class="memdoc">
 
679
 
 
680
<p>Definition at line <a class="el" href="a00797_source.html#l00118">118</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
681
<div class="fragment"><pre class="fragment">                        {  <span class="comment">// get mode of samples</span>
 
682
  <span class="keywordflow">if</span> (buckets_ == NULL) {
 
683
    <span class="keywordflow">return</span> rangemin_;
 
684
  }
 
685
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> max = buckets_[0];           <span class="comment">// max cell count</span>
 
686
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> maxindex = 0;                <span class="comment">// index of max</span>
 
687
  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> index = rangemax_ - rangemin_ - 1; index &gt; 0; --index) {
 
688
    <span class="keywordflow">if</span> (buckets_[index] &gt; max) {
 
689
      max = buckets_[index];      <span class="comment">// find biggest</span>
 
690
      maxindex = index;
 
691
    }
 
692
  }
 
693
  <span class="keywordflow">return</span> maxindex + rangemin_;    <span class="comment">// index of biggest</span>
 
694
}
 
695
</pre></div>
 
696
</div>
 
697
</div>
 
698
<a class="anchor" id="a4a3a320660e2092eeaa605df70bea8ea"></a><!-- doxytag: member="STATS::pile_count" ref="a4a3a320660e2092eeaa605df70bea8ea" args="(inT32 value) const " -->
 
699
<div class="memitem">
 
700
<div class="memproto">
 
701
      <table class="memname">
 
702
        <tr>
 
703
          <td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">STATS::pile_count</a> </td>
 
704
          <td>(</td>
 
705
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
706
          <td class="paramname"><em>value</em></td><td>)</td>
 
707
          <td> const<code> [inline]</code></td>
 
708
        </tr>
 
709
      </table>
 
710
</div>
 
711
<div class="memdoc">
 
712
 
 
713
<p>Definition at line <a class="el" href="a00798_source.html#l00078">78</a> of file <a class="el" href="a00798_source.html">statistc.h</a>.</p>
 
714
<div class="fragment"><pre class="fragment">                                       {
 
715
    <span class="keywordflow">if</span> (value &lt;= rangemin_)
 
716
      <span class="keywordflow">return</span> buckets_[0];
 
717
    <span class="keywordflow">if</span> (value &gt;= rangemax_ - 1)
 
718
      <span class="keywordflow">return</span> buckets_[rangemax_ - rangemin_ - 1];
 
719
    <span class="keywordflow">return</span> buckets_[value - rangemin_];
 
720
  }
 
721
</pre></div>
 
722
</div>
 
723
</div>
 
724
<a class="anchor" id="a6f39b8d4dcae1a2a33e2db066a82a7dd"></a><!-- doxytag: member="STATS::plot" ref="a6f39b8d4dcae1a2a33e2db066a82a7dd" args="(ScrollView *window, float xorigin, float yorigin, float xscale, float yscale, ScrollView::Color colour) const " -->
 
725
<div class="memitem">
 
726
<div class="memproto">
 
727
      <table class="memname">
 
728
        <tr>
 
729
          <td class="memname">void <a class="el" href="a00556.html#a6f39b8d4dcae1a2a33e2db066a82a7dd">STATS::plot</a> </td>
 
730
          <td>(</td>
 
731
          <td class="paramtype"><a class="el" href="a00532.html">ScrollView</a> *&#160;</td>
 
732
          <td class="paramname"><em>window</em>, </td>
 
733
        </tr>
 
734
        <tr>
 
735
          <td class="paramkey"></td>
 
736
          <td></td>
 
737
          <td class="paramtype">float&#160;</td>
 
738
          <td class="paramname"><em>xorigin</em>, </td>
 
739
        </tr>
 
740
        <tr>
 
741
          <td class="paramkey"></td>
 
742
          <td></td>
 
743
          <td class="paramtype">float&#160;</td>
 
744
          <td class="paramname"><em>yorigin</em>, </td>
 
745
        </tr>
 
746
        <tr>
 
747
          <td class="paramkey"></td>
 
748
          <td></td>
 
749
          <td class="paramtype">float&#160;</td>
 
750
          <td class="paramname"><em>xscale</em>, </td>
 
751
        </tr>
 
752
        <tr>
 
753
          <td class="paramkey"></td>
 
754
          <td></td>
 
755
          <td class="paramtype">float&#160;</td>
 
756
          <td class="paramname"><em>yscale</em>, </td>
 
757
        </tr>
 
758
        <tr>
 
759
          <td class="paramkey"></td>
 
760
          <td></td>
 
761
          <td class="paramtype"><a class="el" href="a00532.html#a100504544a5423a94222149ee9ed0fe8">ScrollView::Color</a>&#160;</td>
 
762
          <td class="paramname"><em>colour</em>&#160;</td>
 
763
        </tr>
 
764
        <tr>
 
765
          <td></td>
 
766
          <td>)</td>
 
767
          <td></td><td> const</td>
 
768
        </tr>
 
769
      </table>
 
770
</div>
 
771
<div class="memdoc">
 
772
 
 
773
<p>Definition at line <a class="el" href="a00797_source.html#l00587">587</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
774
<div class="fragment"><pre class="fragment">                                               {   <span class="comment">// colour to draw in</span>
 
775
  <span class="keywordflow">if</span> (buckets_ == NULL) {
 
776
    <span class="keywordflow">return</span>;
 
777
  }
 
778
  window-&gt;<a class="code" href="a00532.html#a79855c525ec660b452382e9813d2edb5">Pen</a>(colour);
 
779
 
 
780
  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> index = 0; index &lt; rangemax_ - rangemin_; index++) {
 
781
    window-&gt;<a class="code" href="a00532.html#ac2a8fdf5d37967ea4a298dc092b6ed0e">Rectangle</a>( xorigin + xscale * index, yorigin,
 
782
      xorigin + xscale * (index + 1),
 
783
      yorigin + yscale * buckets_[index]);
 
784
  }
 
785
}
 
786
</pre></div>
 
787
</div>
 
788
</div>
 
789
<a class="anchor" id="a3c6dde76811809c128c79ed67d666db2"></a><!-- doxytag: member="STATS::plotline" ref="a3c6dde76811809c128c79ed67d666db2" args="(ScrollView *window, float xorigin, float yorigin, float xscale, float yscale, ScrollView::Color colour) const " -->
 
790
<div class="memitem">
 
791
<div class="memproto">
 
792
      <table class="memname">
 
793
        <tr>
 
794
          <td class="memname">void <a class="el" href="a00556.html#a3c6dde76811809c128c79ed67d666db2">STATS::plotline</a> </td>
 
795
          <td>(</td>
 
796
          <td class="paramtype"><a class="el" href="a00532.html">ScrollView</a> *&#160;</td>
 
797
          <td class="paramname"><em>window</em>, </td>
 
798
        </tr>
 
799
        <tr>
 
800
          <td class="paramkey"></td>
 
801
          <td></td>
 
802
          <td class="paramtype">float&#160;</td>
 
803
          <td class="paramname"><em>xorigin</em>, </td>
 
804
        </tr>
 
805
        <tr>
 
806
          <td class="paramkey"></td>
 
807
          <td></td>
 
808
          <td class="paramtype">float&#160;</td>
 
809
          <td class="paramname"><em>yorigin</em>, </td>
 
810
        </tr>
 
811
        <tr>
 
812
          <td class="paramkey"></td>
 
813
          <td></td>
 
814
          <td class="paramtype">float&#160;</td>
 
815
          <td class="paramname"><em>xscale</em>, </td>
 
816
        </tr>
 
817
        <tr>
 
818
          <td class="paramkey"></td>
 
819
          <td></td>
 
820
          <td class="paramtype">float&#160;</td>
 
821
          <td class="paramname"><em>yscale</em>, </td>
 
822
        </tr>
 
823
        <tr>
 
824
          <td class="paramkey"></td>
 
825
          <td></td>
 
826
          <td class="paramtype"><a class="el" href="a00532.html#a100504544a5423a94222149ee9ed0fe8">ScrollView::Color</a>&#160;</td>
 
827
          <td class="paramname"><em>colour</em>&#160;</td>
 
828
        </tr>
 
829
        <tr>
 
830
          <td></td>
 
831
          <td>)</td>
 
832
          <td></td><td> const</td>
 
833
        </tr>
 
834
      </table>
 
835
</div>
 
836
<div class="memdoc">
 
837
 
 
838
<p>Definition at line <a class="el" href="a00797_source.html#l00614">614</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
839
<div class="fragment"><pre class="fragment">                                                   {  <span class="comment">// colour to draw in</span>
 
840
  <span class="keywordflow">if</span> (buckets_ == NULL) {
 
841
    <span class="keywordflow">return</span>;
 
842
  }
 
843
  window-&gt;<a class="code" href="a00532.html#a79855c525ec660b452382e9813d2edb5">Pen</a>(colour);
 
844
  window-&gt;<a class="code" href="a00532.html#a730b182e350dfe37b0986d7f0591fee5">SetCursor</a>(xorigin, yorigin + yscale * buckets_[0]);
 
845
  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> index = 0; index &lt; rangemax_ - rangemin_; index++) {
 
846
    window-&gt;<a class="code" href="a00532.html#a101de80a4722fe821969f61f6e7303a6">DrawTo</a>(xorigin + xscale * index,
 
847
                   yorigin + yscale * buckets_[index]);
 
848
  }
 
849
}
 
850
</pre></div>
 
851
</div>
 
852
</div>
 
853
<a class="anchor" id="a78e51420aa91ecff1f635e606d4a0f88"></a><!-- doxytag: member="STATS::print" ref="a78e51420aa91ecff1f635e606d4a0f88" args="() const " -->
 
854
<div class="memitem">
 
855
<div class="memproto">
 
856
      <table class="memname">
 
857
        <tr>
 
858
          <td class="memname">void <a class="el" href="a00556.html#a78e51420aa91ecff1f635e606d4a0f88">STATS::print</a> </td>
 
859
          <td>(</td>
 
860
          <td class="paramname"></td><td>)</td>
 
861
          <td> const</td>
 
862
        </tr>
 
863
      </table>
 
864
</div>
 
865
<div class="memdoc">
 
866
 
 
867
<p>Definition at line <a class="el" href="a00797_source.html#l00536">536</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
868
<div class="fragment"><pre class="fragment">                        {
 
869
  <span class="keywordflow">if</span> (buckets_ == NULL) {
 
870
    <span class="keywordflow">return</span>;
 
871
  }
 
872
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> min = <a class="code" href="a00556.html#a2297ba473c03bc66c5c9ac58cf2ffbee">min_bucket</a>() - rangemin_;
 
873
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> max = <a class="code" href="a00556.html#a42e9cc7b119d22acdd74ea62f0f64a64">max_bucket</a>() - rangemin_;
 
874
 
 
875
  <span class="keywordtype">int</span> num_printed = 0;
 
876
  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> index = min; index &lt;= max; index++) {
 
877
    <span class="keywordflow">if</span> (buckets_[index] != 0) {
 
878
      <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;%4d:%-3d &quot;</span>, rangemin_ + index, buckets_[index]);
 
879
      <span class="keywordflow">if</span> (++num_printed % 8 == 0)
 
880
        <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a> (<span class="stringliteral">&quot;\n&quot;</span>);
 
881
    }
 
882
  }
 
883
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a> (<span class="stringliteral">&quot;\n&quot;</span>);
 
884
  <a class="code" href="a00556.html#a34973e36fc9688a67c2aa69c149504de">print_summary</a>();
 
885
}
 
886
</pre></div>
 
887
</div>
 
888
</div>
 
889
<a class="anchor" id="a34973e36fc9688a67c2aa69c149504de"></a><!-- doxytag: member="STATS::print_summary" ref="a34973e36fc9688a67c2aa69c149504de" args="() const " -->
 
890
<div class="memitem">
 
891
<div class="memproto">
 
892
      <table class="memname">
 
893
        <tr>
 
894
          <td class="memname">void <a class="el" href="a00556.html#a34973e36fc9688a67c2aa69c149504de">STATS::print_summary</a> </td>
 
895
          <td>(</td>
 
896
          <td class="paramname"></td><td>)</td>
 
897
          <td> const</td>
 
898
        </tr>
 
899
      </table>
 
900
</div>
 
901
<div class="memdoc">
 
902
 
 
903
<p>Definition at line <a class="el" href="a00797_source.html#l00562">562</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
904
<div class="fragment"><pre class="fragment">                                {
 
905
  <span class="keywordflow">if</span> (buckets_ == NULL) {
 
906
    <span class="keywordflow">return</span>;
 
907
  }
 
908
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> min = <a class="code" href="a00556.html#a2297ba473c03bc66c5c9ac58cf2ffbee">min_bucket</a>();
 
909
  <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> max = <a class="code" href="a00556.html#a42e9cc7b119d22acdd74ea62f0f64a64">max_bucket</a>();
 
910
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Total count=%d\n&quot;</span>, total_count_);
 
911
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Min=%.2f Really=%d\n&quot;</span>, <a class="code" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a>(0.0), min);
 
912
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Lower quartile=%.2f\n&quot;</span>, <a class="code" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a>(0.25));
 
913
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Median=%.2f, ile(0.5)=%.2f\n&quot;</span>, <a class="code" href="a00556.html#a3ce7095c6a55592a610085b0fad7d955">median</a>(), <a class="code" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a>(0.5));
 
914
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Upper quartile=%.2f\n&quot;</span>, <a class="code" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a>(0.75));
 
915
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Max=%.2f Really=%d\n&quot;</span>, <a class="code" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a>(1.0), max);
 
916
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Range=%d\n&quot;</span>, max + 1 - min);
 
917
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;Mean= %.2f\n&quot;</span>, <a class="code" href="a00556.html#acfb3db3eb4577fae46b133a37edbdb4a">mean</a>());
 
918
  <a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">&quot;SD= %.2f\n&quot;</span>, <a class="code" href="a00556.html#a865168aa1377e8845491d19ebc56b7ad">sd</a>());
 
919
}
 
920
</pre></div>
 
921
</div>
 
922
</div>
 
923
<a class="anchor" id="a865168aa1377e8845491d19ebc56b7ad"></a><!-- doxytag: member="STATS::sd" ref="a865168aa1377e8845491d19ebc56b7ad" args="() const " -->
 
924
<div class="memitem">
 
925
<div class="memproto">
 
926
      <table class="memname">
 
927
        <tr>
 
928
          <td class="memname">double <a class="el" href="a00556.html#a865168aa1377e8845491d19ebc56b7ad">STATS::sd</a> </td>
 
929
          <td>(</td>
 
930
          <td class="paramname"></td><td>)</td>
 
931
          <td> const</td>
 
932
        </tr>
 
933
      </table>
 
934
</div>
 
935
<div class="memdoc">
 
936
 
 
937
<p>Definition at line <a class="el" href="a00797_source.html#l00154">154</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
938
<div class="fragment"><pre class="fragment">                       {  <span class="comment">//standard deviation</span>
 
939
  <span class="keywordflow">if</span> (buckets_ == NULL || total_count_ &lt;= 0) {
 
940
    <span class="keywordflow">return</span> 0.0;
 
941
  }
 
942
  <a class="code" href="a00831.html#ac53c9cafaf7fe16f985994c49f6b0964">inT64</a> sum = 0;
 
943
  <span class="keywordtype">double</span> sqsum = 0.0;
 
944
  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> index = rangemax_ - rangemin_ - 1; index &gt;= 0; --index) {
 
945
    sum += <span class="keyword">static_cast&lt;</span><a class="code" href="a00831.html#ac53c9cafaf7fe16f985994c49f6b0964">inT64</a><span class="keyword">&gt;</span>(index) * buckets_[index];
 
946
    sqsum += <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(index) * index * buckets_[index];
 
947
  }
 
948
  <span class="keywordtype">double</span> variance = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(sum) / total_count_;
 
949
  variance = sqsum / total_count_ - variance * variance;
 
950
  <span class="keywordflow">if</span> (variance &gt; 0.0)
 
951
    <span class="keywordflow">return</span> sqrt(variance);
 
952
  <span class="keywordflow">return</span> 0.0;
 
953
}
 
954
</pre></div>
 
955
</div>
 
956
</div>
 
957
<a class="anchor" id="abcad6a546e1a1851730bc32f17b154ee"></a><!-- doxytag: member="STATS::set_range" ref="abcad6a546e1a1851730bc32f17b154ee" args="(inT32 min_bucket_value, inT32 max_bucket_value_plus_1)" -->
 
958
<div class="memitem">
 
959
<div class="memproto">
 
960
      <table class="memname">
 
961
        <tr>
 
962
          <td class="memname">bool <a class="el" href="a00556.html#abcad6a546e1a1851730bc32f17b154ee">STATS::set_range</a> </td>
 
963
          <td>(</td>
 
964
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
965
          <td class="paramname"><em>min_bucket_value</em>, </td>
 
966
        </tr>
 
967
        <tr>
 
968
          <td class="paramkey"></td>
 
969
          <td></td>
 
970
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
971
          <td class="paramname"><em>max_bucket_value_plus_1</em>&#160;</td>
 
972
        </tr>
 
973
        <tr>
 
974
          <td></td>
 
975
          <td>)</td>
 
976
          <td></td><td></td>
 
977
        </tr>
 
978
      </table>
 
979
</div>
 
980
<div class="memdoc">
 
981
 
 
982
<p>Definition at line <a class="el" href="a00797_source.html#l00062">62</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
983
<div class="fragment"><pre class="fragment">                                                                           {
 
984
  <span class="keywordflow">if</span> (max_bucket_value_plus_1 &lt;= min_bucket_value) {
 
985
    <span class="keywordflow">return</span> <span class="keyword">false</span>;
 
986
  }
 
987
  <span class="keywordflow">if</span> (rangemax_ - rangemin_ != max_bucket_value_plus_1 - min_bucket_value) {
 
988
    <span class="keyword">delete</span> [] buckets_;
 
989
    buckets_ = <span class="keyword">new</span> <a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>[max_bucket_value_plus_1 - min_bucket_value];
 
990
  }
 
991
  rangemin_ = min_bucket_value;                <span class="comment">// setup</span>
 
992
  rangemax_ = max_bucket_value_plus_1;
 
993
  <a class="code" href="a00556.html#a28e9fd9515ea3b35e3f66ed078e285a6">clear</a>();                <span class="comment">// zero it</span>
 
994
  <span class="keywordflow">return</span> <span class="keyword">true</span>;
 
995
}
 
996
</pre></div>
 
997
</div>
 
998
</div>
 
999
<a class="anchor" id="a7abb618f6eab29a03bc4374b189b1143"></a><!-- doxytag: member="STATS::smooth" ref="a7abb618f6eab29a03bc4374b189b1143" args="(inT32 factor)" -->
 
1000
<div class="memitem">
 
1001
<div class="memproto">
 
1002
      <table class="memname">
 
1003
        <tr>
 
1004
          <td class="memname">void <a class="el" href="a00556.html#a7abb618f6eab29a03bc4374b189b1143">STATS::smooth</a> </td>
 
1005
          <td>(</td>
 
1006
          <td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a>&#160;</td>
 
1007
          <td class="paramname"><em>factor</em></td><td>)</td>
 
1008
          <td></td>
 
1009
        </tr>
 
1010
      </table>
 
1011
</div>
 
1012
<div class="memdoc">
 
1013
 
 
1014
<p>Definition at line <a class="el" href="a00797_source.html#l00293">293</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
1015
<div class="fragment"><pre class="fragment">                               {
 
1016
  <span class="keywordflow">if</span> (buckets_ == NULL || factor &lt; 2) {
 
1017
    <span class="keywordflow">return</span>;
 
1018
  }
 
1019
  <a class="code" href="a00556.html">STATS</a> result(rangemin_, rangemax_);
 
1020
  <span class="keywordtype">int</span> entrycount = rangemax_ - rangemin_;
 
1021
  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> entry = 0; entry &lt; entrycount; entry++) {
 
1022
                                 <span class="comment">//centre weight</span>
 
1023
    <span class="keywordtype">int</span> <a class="code" href="a01042.html#acd4ea858d7133e40518e0832ff9d94b2">count</a> = buckets_[entry] * factor;
 
1024
    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> offset = 1; offset &lt; factor; offset++) {
 
1025
      <span class="keywordflow">if</span> (entry - offset &gt;= 0)
 
1026
        count += buckets_[entry - offset] * (factor - offset);
 
1027
      <span class="keywordflow">if</span> (entry + offset &lt; entrycount)
 
1028
        count += buckets_[entry + offset] * (factor - offset);
 
1029
    }
 
1030
    result.add(entry + rangemin_, count);
 
1031
  }
 
1032
  total_count_ = result.total_count_;
 
1033
  memcpy(buckets_, result.buckets_, entrycount * <span class="keyword">sizeof</span>(buckets_[0]));
 
1034
}
 
1035
</pre></div>
 
1036
</div>
 
1037
</div>
 
1038
<a class="anchor" id="a43660e0747b87aa39284e021a9252c57"></a><!-- doxytag: member="STATS::top_n_modes" ref="a43660e0747b87aa39284e021a9252c57" args="(int max_modes, GenericVector&lt; tesseract::KDPairInc&lt; float, int &gt; &gt; *modes) const " -->
 
1039
<div class="memitem">
 
1040
<div class="memproto">
 
1041
      <table class="memname">
 
1042
        <tr>
 
1043
          <td class="memname">int <a class="el" href="a00556.html#a43660e0747b87aa39284e021a9252c57">STATS::top_n_modes</a> </td>
 
1044
          <td>(</td>
 
1045
          <td class="paramtype">int&#160;</td>
 
1046
          <td class="paramname"><em>max_modes</em>, </td>
 
1047
        </tr>
 
1048
        <tr>
 
1049
          <td class="paramkey"></td>
 
1050
          <td></td>
 
1051
          <td class="paramtype"><a class="el" href="a00403.html">GenericVector</a>&lt; <a class="el" href="a00436.html">tesseract::KDPairInc</a>&lt; float, int &gt; &gt; *&#160;</td>
 
1052
          <td class="paramname"><em>modes</em>&#160;</td>
 
1053
        </tr>
 
1054
        <tr>
 
1055
          <td></td>
 
1056
          <td>)</td>
 
1057
          <td></td><td> const</td>
 
1058
        </tr>
 
1059
      </table>
 
1060
</div>
 
1061
<div class="memdoc">
 
1062
 
 
1063
<p>Definition at line <a class="el" href="a00797_source.html#l00471">471</a> of file <a class="el" href="a00797_source.html">statistc.cpp</a>.</p>
 
1064
<div class="fragment"><pre class="fragment">                                                                           {
 
1065
  <span class="keywordflow">if</span> (max_modes &lt;= 0) <span class="keywordflow">return</span> 0;
 
1066
  <span class="keywordtype">int</span> src_count = rangemax_ - rangemin_;
 
1067
  <span class="comment">// Used copies the counts in buckets_ as they get used.</span>
 
1068
  <a class="code" href="a00556.html">STATS</a> used(rangemin_, rangemax_);
 
1069
  modes-&gt;<a class="code" href="a00403.html#a980882b5ebc3e72fdedbdbe345196f21">truncate</a>(0);
 
1070
  <span class="comment">// Total count of the smallest peak found so far.</span>
 
1071
  <span class="keywordtype">int</span> least_count = 1;
 
1072
  <span class="comment">// Mode that is used as a seed for each peak</span>
 
1073
  <span class="keywordtype">int</span> max_count = 0;
 
1074
  <span class="keywordflow">do</span> {
 
1075
    <span class="comment">// Find an unused mode.</span>
 
1076
    max_count = 0;
 
1077
    <span class="keywordtype">int</span> max_index = 0;
 
1078
    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> src_index = 0; src_index &lt; src_count; src_index++) {
 
1079
      <span class="keywordtype">int</span> <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a> = buckets_[src_index] - used.buckets_[src_index];
 
1080
      <span class="keywordflow">if</span> (pile_count &gt; max_count) {
 
1081
        max_count = <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>;
 
1082
        max_index = src_index;
 
1083
      }
 
1084
    }
 
1085
    <span class="keywordflow">if</span> (max_count &gt; 0) {
 
1086
      <span class="comment">// Copy the bucket count to used so it doesn&#39;t get found again.</span>
 
1087
      used.buckets_[max_index] = max_count;
 
1088
      <span class="comment">// Get the entire peak.</span>
 
1089
      <span class="keywordtype">double</span> total_value = max_index * max_count;
 
1090
      <span class="keywordtype">int</span> total_count = max_count;
 
1091
      <span class="keywordtype">int</span> prev_pile = max_count;
 
1092
      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> offset = 1; max_index + offset &lt; src_count; ++offset) {
 
1093
        <span class="keywordflow">if</span> (!GatherPeak(max_index + offset, buckets_, used.buckets_,
 
1094
                        &amp;prev_pile, &amp;total_count, &amp;total_value))
 
1095
          <span class="keywordflow">break</span>;
 
1096
      }
 
1097
      prev_pile = buckets_[max_index];
 
1098
      <span class="keywordflow">for</span> (<span class="keywordtype">int</span> offset = 1; max_index - offset &gt;= 0; ++offset) {
 
1099
        <span class="keywordflow">if</span> (!GatherPeak(max_index - offset, buckets_, used.buckets_,
 
1100
                        &amp;prev_pile, &amp;total_count, &amp;total_value))
 
1101
          <span class="keywordflow">break</span>;
 
1102
      }
 
1103
      <span class="keywordflow">if</span> (total_count &gt; least_count || modes-&gt;<a class="code" href="a00403.html#a111b51dd0bf1324cfb69ef70703d8e70">size</a>() &lt; max_modes) {
 
1104
        <span class="comment">// We definitely want this mode, so if we have enough discard the least.</span>
 
1105
        <span class="keywordflow">if</span> (modes-&gt;<a class="code" href="a00403.html#a111b51dd0bf1324cfb69ef70703d8e70">size</a>() == max_modes)
 
1106
          modes-&gt;<a class="code" href="a00403.html#a980882b5ebc3e72fdedbdbe345196f21">truncate</a>(max_modes - 1);
 
1107
        <span class="keywordtype">int</span> target_index = 0;
 
1108
        <span class="comment">// Linear search for the target insertion point.</span>
 
1109
        <span class="keywordflow">while</span> (target_index &lt; modes-&gt;size() &amp;&amp;
 
1110
               (*modes)[target_index].data &gt;= total_count)
 
1111
          ++target_index;
 
1112
        <span class="keywordtype">float</span> peak_mean =
 
1113
            <span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(total_value / total_count + rangemin_);
 
1114
        modes-&gt;<a class="code" href="a00403.html#a57ca5259541548a97bcfd4d0925a27ff">insert</a>(<a class="code" href="a00436.html">KDPairInc&lt;float, int&gt;</a>(peak_mean, total_count),
 
1115
                      target_index);
 
1116
        least_count = modes-&gt;<a class="code" href="a00403.html#a6e6d6497a6f7dd999b6d591c15354167">back</a>().data;
 
1117
      }
 
1118
    }
 
1119
  } <span class="keywordflow">while</span> (max_count &gt; 0);
 
1120
  <span class="keywordflow">return</span> modes-&gt;<a class="code" href="a00403.html#a111b51dd0bf1324cfb69ef70703d8e70">size</a>();
 
1121
}
 
1122
</pre></div>
 
1123
</div>
 
1124
</div>
 
1125
<hr/>The documentation for this class was generated from the following files:<ul>
 
1126
<li>/usr/local/google/home/jbreiden/tesseract-ocr-read-only/ccstruct/<a class="el" href="a00798_source.html">statistc.h</a></li>
 
1127
<li>/usr/local/google/home/jbreiden/tesseract-ocr-read-only/ccstruct/<a class="el" href="a00797_source.html">statistc.cpp</a></li>
 
1128
</ul>
 
1129
</div><!-- contents -->
 
1130
</div>
 
1131
<!-- window showing the filter options -->
 
1132
<div id="MSearchSelectWindow"
 
1133
     onmouseover="return searchBox.OnSearchSelectShow()"
 
1134
     onmouseout="return searchBox.OnSearchSelectHide()"
 
1135
     onkeydown="return searchBox.OnSearchSelectKey(event)">
 
1136
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Defines</a></div>
 
1137
 
 
1138
<!-- iframe showing the search results (closed by default) -->
 
1139
<div id="MSearchResultsWindow">
 
1140
<iframe src="javascript:void(0)" frameborder="0" 
 
1141
        name="MSearchResults" id="MSearchResults">
 
1142
</iframe>
 
1143
</div>
 
1144
 
 
1145
  <div id="nav-path" class="navpath">
 
1146
    <ul>
 
1147
      <li class="navelem"><a class="el" href="a00556.html">STATS</a>      </li>
 
1148
 
 
1149
    <li class="footer">Generated on Mon Feb 3 2014 10:59:17 for tesseract by
 
1150
    <a href="http://www.doxygen.org/index.html">
 
1151
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.6.1 </li>
 
1152
   </ul>
 
1153
 </div>
 
1154
 
 
1155
 
 
1156
</body>
 
1157
</html>