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">
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>
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);
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); });
25
<div id="top"><!-- do not remove this div! -->
29
<table cellspacing="0" cellpadding="0">
31
<tr style="height: 56px;">
34
<td style="padding-left: 0.5em;">
35
<div id="projectname">tesseract
36
 <span id="projectnumber">3.03</span>
48
<!-- Generated by Doxygen 1.7.6.1 -->
49
<script type="text/javascript">
50
var searchBox = new SearchBox("searchBox", "search",false,'Search');
52
<div id="navrow1" class="tabs">
54
<li><a href="index.html"><span>Main Page</span></a></li>
55
<li><a href="pages.html"><span>Related 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>
61
<div id="MSearchBox" class="MSearchBoxInactive">
63
<img id="MSearchSelect" src="search/mag_sel.png"
64
onmouseover="return searchBox.OnSearchSelectShow()"
65
onmouseout="return searchBox.OnSearchSelectHide()"
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>
78
<div id="navrow2" class="tabs2">
80
<li><a href="annotated.html"><span>Class List</span></a></li>
81
<li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li>
82
<li><a href="functions.html"><span>Class Members</span></a></li>
86
<div id="side-nav" class="ui-resizable side-nav-resizable">
88
<div id="nav-tree-contents">
91
<div id="splitbar" style="-moz-user-select:none;"
92
class="ui-resizable-handle">
95
<script type="text/javascript">
96
initNavTree('a00556.html','');
98
<div id="doc-content">
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>
105
<div class="contents">
106
<!-- doxytag: class="STATS" -->
107
<p><code>#include <<a class="el" href="a00798_source.html">statistc.h</a>></code></p>
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"> </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"> </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"> </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 </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 </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 </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> </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 </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 </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 </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> </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> </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 </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> </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> </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 </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 </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> </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 </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>< <a class="el" href="a00436.html">tesseract::KDPairInc</a>< float, int > > *modes) const </td></tr>
132
<tr><td class="memItemLeft" align="right" valign="top">void </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 </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 </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 </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>
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 & 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">
146
<td class="memname"><a class="el" href="a00556.html#aa1b9c1929863302a8c82b23eec4abc68">STATS::STATS</a> </td>
148
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
149
<td class="paramname"><em>min_bucket_value</em>, </td>
152
<td class="paramkey"></td>
154
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
155
<td class="paramname"><em>max_bucket_value_plus_1</em> </td>
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 <= min_bucket_value) {
169
min_bucket_value = 0;
170
max_bucket_value_plus_1 = 1;
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>();
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">
185
<td class="memname"><a class="el" href="a00556.html#aa1b9c1929863302a8c82b23eec4abc68">STATS::STATS</a> </td>
187
<td class="paramname"></td><td>)</td>
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"> {
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">
208
<td class="memname"><a class="el" href="a00556.html#ae4c0f842fa82e82cdb9a34036aceed6c">STATS::~STATS</a> </td>
210
<td class="paramname"></td><td>)</td>
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_;
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">
233
<td class="memname">void <a class="el" href="a00556.html#ab8cacba14df28eed1bffc4cea0b2f87f">STATS::add</a> </td>
235
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
236
<td class="paramname"><em>value</em>, </td>
239
<td class="paramkey"></td>
241
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
242
<td class="paramname"><em>count</em> </td>
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>;
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>
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">
270
<td class="memname">void <a class="el" href="a00556.html#a28e9fd9515ea3b35e3f66ed078e285a6">STATS::clear</a> </td>
272
<td class="paramname"></td><td>)</td>
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>
282
<span class="keywordflow">if</span> (buckets_ != NULL)
283
memset(buckets_, 0, (rangemax_ - rangemin_) * <span class="keyword">sizeof</span>(buckets_[0]));
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">
293
<td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00556.html#a6b46b4cda23e1b91b6d77f2d00c1560e">STATS::cluster</a> </td>
295
<td class="paramtype">float </td>
296
<td class="paramname"><em>lower</em>, </td>
299
<td class="paramkey"></td>
301
<td class="paramtype">float </td>
302
<td class="paramname"><em>upper</em>, </td>
305
<td class="paramkey"></td>
307
<td class="paramtype">float </td>
308
<td class="paramname"><em>multiple</em>, </td>
311
<td class="paramkey"></td>
313
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
314
<td class="paramname"><em>max_clusters</em>, </td>
317
<td class="paramkey"></td>
319
<td class="paramtype"><a class="el" href="a00556.html">STATS</a> * </td>
320
<td class="paramname"><em>clusters</em> </td>
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>
345
<span class="keywordflow">if</span> (buckets_ == NULL || max_clusters < 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 <= max_clusters
349
&& clusters[cluster_count].buckets_ != NULL
350
&& clusters[cluster_count].total_count_ > 0;
352
centres[cluster_count] =
353
<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></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 < lower
356
&& entry >= rangemin_
357
&& <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry) <= <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry + 1);
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 > 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);
365
<span class="keywordflow">for</span> (entry = new_centre + 1; entry - centres[cluster_count] < lower
366
&& entry < rangemax_
367
&& <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry) <= <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>(entry - 1);
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 > 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);
378
<span class="keywordflow">if</span> (cluster_count == 0) {
379
clusters[0].<a class="code" href="a00556.html#abcad6a546e1a1851730bc32f17b154ee">set_range</a>(rangemin_, rangemax_);
381
<span class="keywordflow">do</span> {
384
<span class="keywordflow">for</span> (entry = 0; entry < 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 > 0) { <span class="comment">//any to handle</span>
388
min_dist = <span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(<a class="code" href="a00831.html#aac62d87844689a18b6f5339a89ed6e7f">MAX_INT32</a>);
390
<span class="keywordflow">for</span> (cluster = 1; cluster <= 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 < 0)
395
<span class="keywordflow">if</span> (dist < min_dist) {
396
min_dist = dist; <span class="comment">//find least</span>
397
best_cluster = <a class="code" href="a00556.html#a6b46b4cda23e1b91b6d77f2d00c1560e">cluster</a>;
400
<span class="keywordflow">if</span> (min_dist > upper <span class="comment">//far enough for new</span>
401
&& (best_cluster == 0
402
|| entry + rangemin_ > centres[best_cluster] * multiple
403
|| entry + rangemin_ < centres[best_cluster] / multiple)) {
404
<span class="keywordflow">if</span> (count > new_mode) {
405
new_mode = <a class="code" href="a01042.html#acd4ea858d7133e40518e0832ff9d94b2">count</a>;
406
new_centre = entry + rangemin_;
411
<span class="comment">// need new and room</span>
412
<span class="keywordflow">if</span> (new_mode > 0 && cluster_count < max_clusters) {
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<</span><span class="keywordtype">float</span><span class="keyword">></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 < lower
421
&& entry >= rangemin_
422
&& <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a> (entry) <= <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 > 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);
429
<span class="keywordflow">for</span> (entry = new_centre + 1; entry - centres[cluster_count] < lower
430
&& entry < rangemax_
431
&& <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a> (entry) <= <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 > 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);
438
centres[cluster_count] =
439
<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(clusters[cluster_count].<a class="code" href="a00556.html#a3fc40518660ac7a89adef4919361270c">ile</a>(0.5));
441
} <span class="keywordflow">while</span> (new_cluster && cluster_count < max_clusters);
442
<span class="keyword">delete</span> [] centres;
443
<span class="keywordflow">return</span> cluster_count;
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">
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>
455
<td class="paramname"></td><td>)</td>
456
<td> const<code> [inline]</code></td>
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>
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">
474
<td class="memname">double <a class="el" href="a00556.html#a3fc40518660ac7a89adef4919361270c">STATS::ile</a> </td>
476
<td class="paramtype">double </td>
477
<td class="paramname"><em>frac</em></td><td>)</td>
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<</span><span class="keywordtype">double</span><span class="keyword">></span>(rangemin_);
489
<span class="preprocessor">#if 0</span>
490
<span class="preprocessor"></span> <span class="comment">// TODO(rays) The existing code doesn'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<double>(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 < rangemax_ - rangemin_ && sum < target;
502
sum += buckets_[index++]);
503
<span class="keywordflow">if</span> (index > 0) {
504
<a class="code" href="a00823.html#a93a603f4063a6b9403d81caa245a583b">ASSERT_HOST</a>(buckets_[index - 1] > 0);
505
<span class="keywordflow">return</span> rangemin_ + index -
506
<span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(sum - target) / buckets_[index - 1];
507
} <span class="keywordflow">else</span> {
508
<span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rangemin_);
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">
519
<td class="memname">bool <a class="el" href="a00556.html#ace640389c49d4af2197ed5a0b74b276d">STATS::local_min</a> </td>
521
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
522
<td class="paramname"><em>x</em></td><td>)</td>
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>;
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 >= 0 && buckets_[index] == buckets_[x]; --index);
539
<span class="keywordflow">if</span> (index >= 0 && buckets_[index] < buckets_[x])
540
<span class="keywordflow">return</span> <span class="keyword">false</span>;
541
<span class="keywordflow">for</span> (index = x + 1; index < rangemax_ - rangemin_ &&
542
buckets_[index] == buckets_[x]; ++index);
543
<span class="keywordflow">if</span> (index < rangemax_ - rangemin_ && buckets_[index] < 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>;
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">
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>
558
<td class="paramname"></td><td>)</td>
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_;
570
<a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> max;
571
<span class="keywordflow">for</span> (max = rangemax_ - rangemin_ - 1; max > 0 && buckets_[max] == 0; max--);
572
<span class="keywordflow">return</span> rangemin_ + max;
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">
582
<td class="memname">double <a class="el" href="a00556.html#acfb3db3eb4577fae46b133a37edbdb4a">STATS::mean</a> </td>
584
<td class="paramname"></td><td>)</td>
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_ <= 0) {
594
<span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(rangemin_);
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 >= 0; --index) {
598
sum += <span class="keyword">static_cast<</span><a class="code" href="a00831.html#ac53c9cafaf7fe16f985994c49f6b0964">inT64</a><span class="keyword">></span>(index) * buckets_[index];
600
<span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(sum) / total_count_ + rangemin_;
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">
610
<td class="memname">double <a class="el" href="a00556.html#a3ce7095c6a55592a610085b0fad7d955">STATS::median</a> </td>
612
<td class="paramname"></td><td>)</td>
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<</span><span class="keywordtype">double</span><span class="keyword">></span>(rangemin_);
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<</span><span class="keywordtype">int</span><span class="keyword">></span>(floor(median));
626
<span class="keywordflow">if</span> ((total_count_ > 1) && (<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;
635
<span class="keywordflow">return</span> <a class="code" href="a00556.html#a3ce7095c6a55592a610085b0fad7d955">median</a>;
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">
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>
647
<td class="paramname"></td><td>)</td>
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_;
659
<a class="code" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> min = 0;
660
<span class="keywordflow">for</span> (min = 0; (min < rangemax_ - rangemin_) && (buckets_[min] == 0); min++);
661
<span class="keywordflow">return</span> rangemin_ + min;
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">
671
<td class="memname"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> <a class="el" href="a00556.html#a5d353e951f61daf06c6582dfc106ff11">STATS::mode</a> </td>
673
<td class="paramname"></td><td>)</td>
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_;
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 > 0; --index) {
688
<span class="keywordflow">if</span> (buckets_[index] > max) {
689
max = buckets_[index]; <span class="comment">// find biggest</span>
693
<span class="keywordflow">return</span> maxindex + rangemin_; <span class="comment">// index of biggest</span>
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">
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>
705
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
706
<td class="paramname"><em>value</em></td><td>)</td>
707
<td> const<code> [inline]</code></td>
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 <= rangemin_)
716
<span class="keywordflow">return</span> buckets_[0];
717
<span class="keywordflow">if</span> (value >= rangemax_ - 1)
718
<span class="keywordflow">return</span> buckets_[rangemax_ - rangemin_ - 1];
719
<span class="keywordflow">return</span> buckets_[value - rangemin_];
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">
729
<td class="memname">void <a class="el" href="a00556.html#a6f39b8d4dcae1a2a33e2db066a82a7dd">STATS::plot</a> </td>
731
<td class="paramtype"><a class="el" href="a00532.html">ScrollView</a> * </td>
732
<td class="paramname"><em>window</em>, </td>
735
<td class="paramkey"></td>
737
<td class="paramtype">float </td>
738
<td class="paramname"><em>xorigin</em>, </td>
741
<td class="paramkey"></td>
743
<td class="paramtype">float </td>
744
<td class="paramname"><em>yorigin</em>, </td>
747
<td class="paramkey"></td>
749
<td class="paramtype">float </td>
750
<td class="paramname"><em>xscale</em>, </td>
753
<td class="paramkey"></td>
755
<td class="paramtype">float </td>
756
<td class="paramname"><em>yscale</em>, </td>
759
<td class="paramkey"></td>
761
<td class="paramtype"><a class="el" href="a00532.html#a100504544a5423a94222149ee9ed0fe8">ScrollView::Color</a> </td>
762
<td class="paramname"><em>colour</em> </td>
767
<td></td><td> const</td>
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>;
778
window-><a class="code" href="a00532.html#a79855c525ec660b452382e9813d2edb5">Pen</a>(colour);
780
<span class="keywordflow">for</span> (<span class="keywordtype">int</span> index = 0; index < rangemax_ - rangemin_; index++) {
781
window-><a class="code" href="a00532.html#ac2a8fdf5d37967ea4a298dc092b6ed0e">Rectangle</a>( xorigin + xscale * index, yorigin,
782
xorigin + xscale * (index + 1),
783
yorigin + yscale * buckets_[index]);
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">
794
<td class="memname">void <a class="el" href="a00556.html#a3c6dde76811809c128c79ed67d666db2">STATS::plotline</a> </td>
796
<td class="paramtype"><a class="el" href="a00532.html">ScrollView</a> * </td>
797
<td class="paramname"><em>window</em>, </td>
800
<td class="paramkey"></td>
802
<td class="paramtype">float </td>
803
<td class="paramname"><em>xorigin</em>, </td>
806
<td class="paramkey"></td>
808
<td class="paramtype">float </td>
809
<td class="paramname"><em>yorigin</em>, </td>
812
<td class="paramkey"></td>
814
<td class="paramtype">float </td>
815
<td class="paramname"><em>xscale</em>, </td>
818
<td class="paramkey"></td>
820
<td class="paramtype">float </td>
821
<td class="paramname"><em>yscale</em>, </td>
824
<td class="paramkey"></td>
826
<td class="paramtype"><a class="el" href="a00532.html#a100504544a5423a94222149ee9ed0fe8">ScrollView::Color</a> </td>
827
<td class="paramname"><em>colour</em> </td>
832
<td></td><td> const</td>
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>;
843
window-><a class="code" href="a00532.html#a79855c525ec660b452382e9813d2edb5">Pen</a>(colour);
844
window-><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 < rangemax_ - rangemin_; index++) {
846
window-><a class="code" href="a00532.html#a101de80a4722fe821969f61f6e7303a6">DrawTo</a>(xorigin + xscale * index,
847
yorigin + yscale * buckets_[index]);
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">
858
<td class="memname">void <a class="el" href="a00556.html#a78e51420aa91ecff1f635e606d4a0f88">STATS::print</a> </td>
860
<td class="paramname"></td><td>)</td>
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>;
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_;
875
<span class="keywordtype">int</span> num_printed = 0;
876
<span class="keywordflow">for</span> (<span class="keywordtype">int</span> index = min; index <= max; index++) {
877
<span class="keywordflow">if</span> (buckets_[index] != 0) {
878
<a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"%4d:%-3d "</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">"\n"</span>);
883
<a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a> (<span class="stringliteral">"\n"</span>);
884
<a class="code" href="a00556.html#a34973e36fc9688a67c2aa69c149504de">print_summary</a>();
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">
894
<td class="memname">void <a class="el" href="a00556.html#a34973e36fc9688a67c2aa69c149504de">STATS::print_summary</a> </td>
896
<td class="paramname"></td><td>)</td>
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>;
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">"Total count=%d\n"</span>, total_count_);
911
<a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"Min=%.2f Really=%d\n"</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">"Lower quartile=%.2f\n"</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">"Median=%.2f, ile(0.5)=%.2f\n"</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">"Upper quartile=%.2f\n"</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">"Max=%.2f Really=%d\n"</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">"Range=%d\n"</span>, max + 1 - min);
917
<a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"Mean= %.2f\n"</span>, <a class="code" href="a00556.html#acfb3db3eb4577fae46b133a37edbdb4a">mean</a>());
918
<a class="code" href="a00860.html#a02aa7cca2c3857c14716e8cca96ace6c">tprintf</a>(<span class="stringliteral">"SD= %.2f\n"</span>, <a class="code" href="a00556.html#a865168aa1377e8845491d19ebc56b7ad">sd</a>());
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">
928
<td class="memname">double <a class="el" href="a00556.html#a865168aa1377e8845491d19ebc56b7ad">STATS::sd</a> </td>
930
<td class="paramname"></td><td>)</td>
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_ <= 0) {
940
<span class="keywordflow">return</span> 0.0;
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 >= 0; --index) {
945
sum += <span class="keyword">static_cast<</span><a class="code" href="a00831.html#ac53c9cafaf7fe16f985994c49f6b0964">inT64</a><span class="keyword">></span>(index) * buckets_[index];
946
sqsum += <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(index) * index * buckets_[index];
948
<span class="keywordtype">double</span> variance = <span class="keyword">static_cast<</span><span class="keywordtype">double</span><span class="keyword">></span>(sum) / total_count_;
949
variance = sqsum / total_count_ - variance * variance;
950
<span class="keywordflow">if</span> (variance > 0.0)
951
<span class="keywordflow">return</span> sqrt(variance);
952
<span class="keywordflow">return</span> 0.0;
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">
962
<td class="memname">bool <a class="el" href="a00556.html#abcad6a546e1a1851730bc32f17b154ee">STATS::set_range</a> </td>
964
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
965
<td class="paramname"><em>min_bucket_value</em>, </td>
968
<td class="paramkey"></td>
970
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
971
<td class="paramname"><em>max_bucket_value_plus_1</em> </td>
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 <= min_bucket_value) {
985
<span class="keywordflow">return</span> <span class="keyword">false</span>;
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];
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>;
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">
1004
<td class="memname">void <a class="el" href="a00556.html#a7abb618f6eab29a03bc4374b189b1143">STATS::smooth</a> </td>
1006
<td class="paramtype"><a class="el" href="a00831.html#aba1f582fd0168f3ff9225d8c90fa9eb8">inT32</a> </td>
1007
<td class="paramname"><em>factor</em></td><td>)</td>
1012
<div class="memdoc">
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 < 2) {
1017
<span class="keywordflow">return</span>;
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 < 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 < factor; offset++) {
1025
<span class="keywordflow">if</span> (entry - offset >= 0)
1026
count += buckets_[entry - offset] * (factor - offset);
1027
<span class="keywordflow">if</span> (entry + offset < entrycount)
1028
count += buckets_[entry + offset] * (factor - offset);
1030
result.add(entry + rangemin_, count);
1032
total_count_ = result.total_count_;
1033
memcpy(buckets_, result.buckets_, entrycount * <span class="keyword">sizeof</span>(buckets_[0]));
1038
<a class="anchor" id="a43660e0747b87aa39284e021a9252c57"></a><!-- doxytag: member="STATS::top_n_modes" ref="a43660e0747b87aa39284e021a9252c57" args="(int max_modes, GenericVector< tesseract::KDPairInc< float, int > > *modes) const " -->
1039
<div class="memitem">
1040
<div class="memproto">
1041
<table class="memname">
1043
<td class="memname">int <a class="el" href="a00556.html#a43660e0747b87aa39284e021a9252c57">STATS::top_n_modes</a> </td>
1045
<td class="paramtype">int </td>
1046
<td class="paramname"><em>max_modes</em>, </td>
1049
<td class="paramkey"></td>
1051
<td class="paramtype"><a class="el" href="a00403.html">GenericVector</a>< <a class="el" href="a00436.html">tesseract::KDPairInc</a>< float, int > > * </td>
1052
<td class="paramname"><em>modes</em> </td>
1057
<td></td><td> const</td>
1061
<div class="memdoc">
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 <= 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-><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>
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 < 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 > max_count) {
1081
max_count = <a class="code" href="a00556.html#a4a3a320660e2092eeaa605df70bea8ea">pile_count</a>;
1082
max_index = src_index;
1085
<span class="keywordflow">if</span> (max_count > 0) {
1086
<span class="comment">// Copy the bucket count to used so it doesn'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 < src_count; ++offset) {
1093
<span class="keywordflow">if</span> (!GatherPeak(max_index + offset, buckets_, used.buckets_,
1094
&prev_pile, &total_count, &total_value))
1095
<span class="keywordflow">break</span>;
1097
prev_pile = buckets_[max_index];
1098
<span class="keywordflow">for</span> (<span class="keywordtype">int</span> offset = 1; max_index - offset >= 0; ++offset) {
1099
<span class="keywordflow">if</span> (!GatherPeak(max_index - offset, buckets_, used.buckets_,
1100
&prev_pile, &total_count, &total_value))
1101
<span class="keywordflow">break</span>;
1103
<span class="keywordflow">if</span> (total_count > least_count || modes-><a class="code" href="a00403.html#a111b51dd0bf1324cfb69ef70703d8e70">size</a>() < 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-><a class="code" href="a00403.html#a111b51dd0bf1324cfb69ef70703d8e70">size</a>() == max_modes)
1106
modes-><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 < modes->size() &&
1110
(*modes)[target_index].data >= total_count)
1112
<span class="keywordtype">float</span> peak_mean =
1113
<span class="keyword">static_cast<</span><span class="keywordtype">float</span><span class="keyword">></span>(total_value / total_count + rangemin_);
1114
modes-><a class="code" href="a00403.html#a57ca5259541548a97bcfd4d0925a27ff">insert</a>(<a class="code" href="a00436.html">KDPairInc<float, int></a>(peak_mean, total_count),
1116
least_count = modes-><a class="code" href="a00403.html#a6e6d6497a6f7dd999b6d591c15354167">back</a>().data;
1119
} <span class="keywordflow">while</span> (max_count > 0);
1120
<span class="keywordflow">return</span> modes-><a class="code" href="a00403.html#a111b51dd0bf1324cfb69ef70703d8e70">size</a>();
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>
1129
</div><!-- contents -->
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"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Defines</a></div>
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">
1145
<div id="nav-path" class="navpath">
1147
<li class="navelem"><a class="el" href="a00556.html">STATS</a> </li>
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>