root/doc/html/histogram_8h-source.html @ 353

Revision 353, 20.1 kB (checked in by smidl, 16 years ago)

doc

Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3<title>mixpp: histogram.h Source File</title>
4<link href="tabs.css" rel="stylesheet" type="text/css">
5<link href="doxygen.css" rel="stylesheet" type="text/css">
6</head><body>
7<!-- Generated by Doxygen 1.5.8 -->
8<script type="text/javascript">
9<!--
10function changeDisplayState (e){
11  var num=this.id.replace(/[^[0-9]/g,'');
12  var button=this.firstChild;
13  var sectionDiv=document.getElementById('dynsection'+num);
14  if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
15    sectionDiv.style.display='block';
16    button.src='open.gif';
17  }else{
18    sectionDiv.style.display='none';
19    button.src='closed.gif';
20  }
21}
22function initDynSections(){
23  var divs=document.getElementsByTagName('div');
24  var sectionCounter=1;
25  for(var i=0;i<divs.length-1;i++){
26    if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
27      var header=divs[i];
28      var section=divs[i+1];
29      var button=header.firstChild;
30      if (button!='IMG'){
31        divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
32        button=document.createElement('img');
33        divs[i].insertBefore(button,divs[i].firstChild);
34      }
35      header.style.cursor='pointer';
36      header.onclick=changeDisplayState;
37      header.id='dynheader'+sectionCounter;
38      button.src='closed.gif';
39      section.id='dynsection'+sectionCounter;
40      section.style.display='none';
41      section.style.marginLeft='14px';
42      sectionCounter++;
43    }
44  }
45}
46window.onload = initDynSections;
47-->
48</script>
49<div class="navigation" id="top">
50  <div class="tabs">
51    <ul>
52      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
53      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
54      <li><a href="modules.html"><span>Modules</span></a></li>
55      <li><a href="annotated.html"><span>Classes</span></a></li>
56      <li class="current"><a href="files.html"><span>Files</span></a></li>
57    </ul>
58  </div>
59  <div class="tabs">
60    <ul>
61      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
62      <li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
63    </ul>
64  </div>
65<h1>histogram.h</h1><a href="histogram_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001
66<a name="l00029"></a>00029 <span class="preprocessor">#ifndef HISTOGRAM_H</span>
67<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define HISTOGRAM_H</span>
68<a name="l00031"></a>00031 <span class="preprocessor"></span>
69<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;<a class="code" href="mat_8h.html" title="Matrix Class Definitions.">itpp/base/mat.h</a>&gt;</span>
70<a name="l00033"></a>00033
71<a name="l00034"></a>00034
72<a name="l00035"></a>00035 <span class="keyword">namespace </span>itpp
73<a name="l00036"></a>00036 {
74<a name="l00037"></a>00037
75<a name="l00040"></a>00040
76<a name="l00074"></a>00074 <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Num_T&gt;
77<a name="l00075"></a><a class="code" href="classitpp_1_1Histogram.html">00075</a> <span class="keyword">class </span><a class="code" href="classitpp_1_1Histogram.html" title="Histogram computation class.">Histogram</a>
78<a name="l00076"></a>00076 {
79<a name="l00077"></a>00077 <span class="keyword">public</span>:
80<a name="l00080"></a>00080   <a class="code" href="group__histogram.html#g9af656d3a1059f15371b3389ca9bb943">Histogram</a>(Num_T from = Num_T(0), Num_T <a class="code" href="group__fixed.html#g77ba7ec514a9115a0d560b60de9e0cea" title="Convert Array&amp;lt;U&amp;gt; (real and imaginary parts), where U can be an Array/Vec/Mat...">to</a> = Num_T(99), <span class="keywordtype">int</span> n_bins = 100);
81<a name="l00082"></a><a class="code" href="classitpp_1_1Histogram.html#36cf6361095bed1ad8de4878ba17b1c6">00082</a>   <a class="code" href="classitpp_1_1Histogram.html#36cf6361095bed1ad8de4878ba17b1c6" title="Default destructor.">~Histogram</a>() {};
82<a name="l00083"></a>00083
83<a name="l00085"></a>00085   <span class="keywordtype">void</span> <a class="code" href="group__histogram.html#g7e6fb324cfe1ebf5353660f10857c4dc" title="Histogram setup.">setup</a>(Num_T from, Num_T <a class="code" href="group__fixed.html#g77ba7ec514a9115a0d560b60de9e0cea" title="Convert Array&amp;lt;U&amp;gt; (real and imaginary parts), where U can be an Array/Vec/Mat...">to</a>, <span class="keywordtype">int</span> n_bins);
84<a name="l00086"></a>00086
85<a name="l00088"></a>00088   <span class="keywordtype">void</span> <a class="code" href="group__histogram.html#gaf127f05ede5a7c147b23374bb90f89e" title="Histogram update.">update</a>(Num_T value);
86<a name="l00090"></a>00090   <span class="keywordtype">void</span> <a class="code" href="group__histogram.html#gaf127f05ede5a7c147b23374bb90f89e" title="Histogram update.">update</a>(<a class="code" href="classitpp_1_1Vec.html" title="Vector Class (Templated).">Vec&lt;Num_T&gt;</a> values);
87<a name="l00092"></a>00092   <span class="keywordtype">void</span> <a class="code" href="group__histogram.html#gaf127f05ede5a7c147b23374bb90f89e" title="Histogram update.">update</a>(<a class="code" href="classitpp_1_1Mat.html" title="Matrix Class (Templated).">Mat&lt;Num_T&gt;</a> values);
88<a name="l00093"></a>00093
89<a name="l00095"></a><a class="code" href="classitpp_1_1Histogram.html#2e595439fdf3877d6c5aaca0f5f33c88">00095</a>   <span class="keywordtype">void</span> <a class="code" href="classitpp_1_1Histogram.html#2e595439fdf3877d6c5aaca0f5f33c88" title="Bins reset, so accumulation can be restarted.">reset</a>() { trials_cnt = 0; bins.zeros(); };
90<a name="l00097"></a><a class="code" href="classitpp_1_1Histogram.html#5c46985d8736d5d72f4b6318cee42c6d">00097</a>   <span class="keywordtype">int</span> <a class="code" href="classitpp_1_1Histogram.html#5c46985d8736d5d72f4b6318cee42c6d" title="Access to single bin counter.">get_bin</a>(<span class="keywordtype">int</span> ix)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> bins(ix); };
91<a name="l00099"></a><a class="code" href="classitpp_1_1Histogram.html#b5817b5b3c4b7c7efff6d51abf20f662">00099</a>   ivec <a class="code" href="classitpp_1_1Histogram.html#b5817b5b3c4b7c7efff6d51abf20f662" title="Access to histogram as a vector.">get_bins</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> bins; };
92<a name="l00101"></a><a class="code" href="classitpp_1_1Histogram.html#8ccc9a79ae8226a576d261aa07828d70">00101</a>   <a class="code" href="classitpp_1_1Vec.html" title="Vector Class (Templated).">Vec&lt;Num_T&gt;</a> <a class="code" href="classitpp_1_1Histogram.html#8ccc9a79ae8226a576d261aa07828d70" title="Access to bin center values (all bins).">get_bin_centers</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> center_vals; };
93<a name="l00103"></a><a class="code" href="classitpp_1_1Histogram.html#348d3558b0a92cf8add2607cf4803c1c">00103</a>   Num_T <a class="code" href="classitpp_1_1Histogram.html#348d3558b0a92cf8add2607cf4803c1c" title="Access to bin center (single bin).">get_bin_center</a>(<span class="keywordtype">int</span> ix)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> center_vals(ix); };
94<a name="l00105"></a><a class="code" href="classitpp_1_1Histogram.html#e44283fce736cc6e8f96fa86823eca06">00105</a>   <a class="code" href="classitpp_1_1Vec.html" title="Vector Class (Templated).">Vec&lt;Num_T&gt;</a> <a class="code" href="classitpp_1_1Histogram.html#e44283fce736cc6e8f96fa86823eca06" title="Access to left boundary of bin intervals (all bins).">get_bin_lefts</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lo_vals; };
95<a name="l00107"></a><a class="code" href="classitpp_1_1Histogram.html#fd5f81bd76ace561d748d9b9bfc2c1e8">00107</a>   Num_T <a class="code" href="classitpp_1_1Histogram.html#fd5f81bd76ace561d748d9b9bfc2c1e8" title="Access to left boundary of single bin.">get_bin_left</a>(<span class="keywordtype">int</span> ix)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> lo_vals(ix); };
96<a name="l00109"></a><a class="code" href="classitpp_1_1Histogram.html#81a7925189d30efe6e046452c6c1a5b0">00109</a>   <a class="code" href="classitpp_1_1Vec.html" title="Vector Class (Templated).">Vec&lt;Num_T&gt;</a> <a class="code" href="classitpp_1_1Histogram.html#81a7925189d30efe6e046452c6c1a5b0" title="Access to right boundary of bin intervals (all bins).">get_bin_rights</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> hi_vals; };
97<a name="l00111"></a><a class="code" href="classitpp_1_1Histogram.html#d9668c631cfc20d5b51e1f5b115b606b">00111</a>   Num_T <a class="code" href="classitpp_1_1Histogram.html#d9668c631cfc20d5b51e1f5b115b606b" title="Access to right boundary of single bin.">get_bin_right</a>(<span class="keywordtype">int</span> ix)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> hi_vals(ix); };
98<a name="l00112"></a>00112
99<a name="l00114"></a>00114   vec <a class="code" href="group__histogram.html#g0734cd4bae5ea37fd00e18bf21be4cb5" title="Experimental Probability Density Function (PDF) computation.">get_pdf</a>() <span class="keyword">const</span>;
100<a name="l00116"></a>00116   vec <a class="code" href="group__histogram.html#g18cfd3695d2e3b485f495962475438c4" title="Experimental Cumulative Density Function (CDF) computation.">get_cdf</a>() <span class="keyword">const</span>;
101<a name="l00117"></a>00117
102<a name="l00119"></a><a class="code" href="classitpp_1_1Histogram.html#0d7969f2faf89dba3d26e5c6bd7e63b0">00119</a>   <span class="keywordtype">int</span> <a class="code" href="classitpp_1_1Histogram.html#0d7969f2faf89dba3d26e5c6bd7e63b0" title="Current number of bins.">bins_num</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> num_bins; };
103<a name="l00121"></a><a class="code" href="classitpp_1_1Histogram.html#cb38ac4d25f19ddedc70c57afbb6bbe7">00121</a>   <span class="keywordtype">int</span> <a class="code" href="classitpp_1_1Histogram.html#cb38ac4d25f19ddedc70c57afbb6bbe7" title="Current trials counter.">trials_num</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> trials_cnt;};
104<a name="l00122"></a>00122
105<a name="l00123"></a>00123 <span class="keyword">private</span>:
106<a name="l00125"></a>00125   <span class="keywordtype">int</span> num_bins;
107<a name="l00127"></a>00127   Num_T step;
108<a name="l00129"></a>00129   <a class="code" href="classitpp_1_1Vec.html" title="Vector Class (Templated).">Vec&lt;Num_T&gt;</a> lo_vals;
109<a name="l00131"></a>00131   <a class="code" href="classitpp_1_1Vec.html" title="Vector Class (Templated).">Vec&lt;Num_T&gt;</a> hi_vals;
110<a name="l00133"></a>00133   <a class="code" href="classitpp_1_1Vec.html" title="Vector Class (Templated).">Vec&lt;Num_T&gt;</a> center_vals;
111<a name="l00135"></a>00135   ivec bins;
112<a name="l00137"></a>00137   <span class="keywordtype">int</span> trials_cnt;
113<a name="l00138"></a>00138 };
114<a name="l00139"></a>00139
115<a name="l00140"></a>00140 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Num_T&gt;
116<a name="l00141"></a><a class="code" href="group__histogram.html#g9af656d3a1059f15371b3389ca9bb943">00141</a> <span class="keyword">inline</span> <a class="code" href="group__histogram.html#g9af656d3a1059f15371b3389ca9bb943">Histogram&lt;Num_T&gt;::Histogram</a>(Num_T from, Num_T <a class="code" href="group__fixed.html#g77ba7ec514a9115a0d560b60de9e0cea" title="Convert Array&amp;lt;U&amp;gt; (real and imaginary parts), where U can be an Array/Vec/Mat...">to</a>, <span class="keywordtype">int</span> n_bins)
117<a name="l00142"></a>00142
118<a name="l00143"></a>00143 {
119<a name="l00144"></a>00144   <a class="code" href="group__histogram.html#g7e6fb324cfe1ebf5353660f10857c4dc" title="Histogram setup.">setup</a>(from, to, n_bins);
120<a name="l00145"></a>00145 }
121<a name="l00146"></a>00146
122<a name="l00147"></a>00147 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Num_T&gt;
123<a name="l00148"></a><a class="code" href="group__histogram.html#g7e6fb324cfe1ebf5353660f10857c4dc">00148</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__histogram.html#g7e6fb324cfe1ebf5353660f10857c4dc" title="Histogram setup.">Histogram&lt;Num_T&gt;::setup</a>(Num_T from, Num_T <a class="code" href="group__fixed.html#g77ba7ec514a9115a0d560b60de9e0cea" title="Convert Array&amp;lt;U&amp;gt; (real and imaginary parts), where U can be an Array/Vec/Mat...">to</a>, <span class="keywordtype">int</span> n_bins)
124<a name="l00149"></a>00149 {
125<a name="l00150"></a>00150   num_bins = n_bins;
126<a name="l00151"></a>00151   lo_vals.set_size(n_bins);
127<a name="l00152"></a>00152   hi_vals.set_size(n_bins);
128<a name="l00153"></a>00153   center_vals.set_size(n_bins);
129<a name="l00154"></a>00154   bins.set_size(n_bins);
130<a name="l00155"></a>00155   trials_cnt = 0;
131<a name="l00156"></a>00156   step = (to - from) / (num_bins - 1);
132<a name="l00157"></a>00157   center_vals = <a class="code" href="group__specmat.html#ge5632baa525e231b015f3d45f3503cac" title="Linspace (works in the same way as the matlab version).">linspace</a>(from, to, num_bins);
133<a name="l00158"></a>00158   lo_vals = center_vals - step / 2;
134<a name="l00159"></a>00159   hi_vals = center_vals + step / 2;
135<a name="l00160"></a>00160   <a class="code" href="classitpp_1_1Histogram.html#2e595439fdf3877d6c5aaca0f5f33c88" title="Bins reset, so accumulation can be restarted.">reset</a>();
136<a name="l00161"></a>00161 }
137<a name="l00162"></a>00162
138<a name="l00163"></a>00163 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Num_T&gt;
139<a name="l00164"></a><a class="code" href="group__histogram.html#gaf127f05ede5a7c147b23374bb90f89e">00164</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__histogram.html#gaf127f05ede5a7c147b23374bb90f89e" title="Histogram update.">Histogram&lt;Num_T&gt;::update</a>(Num_T value)
140<a name="l00165"></a>00165 {
141<a name="l00166"></a>00166   <span class="comment">// search for the corresponding bin using dichotomy approach</span>
142<a name="l00167"></a>00167   <span class="keywordtype">int</span> start = 0;
143<a name="l00168"></a>00168   <span class="keywordtype">int</span> end = num_bins - 1;
144<a name="l00169"></a>00169   <span class="keywordtype">int</span> test = (start + end) / 2;
145<a name="l00170"></a>00170
146<a name="l00171"></a>00171   <span class="keywordflow">while</span> (start &lt; end) {
147<a name="l00172"></a>00172     <span class="keywordflow">if</span> (value &lt; lo_vals(test))
148<a name="l00173"></a>00173       end = test - 1;
149<a name="l00174"></a>00174     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value &gt;= hi_vals(test))
150<a name="l00175"></a>00175       start = test + 1;
151<a name="l00176"></a>00176     <span class="keywordflow">else</span>
152<a name="l00177"></a>00177       <span class="keywordflow">break</span>;
153<a name="l00178"></a>00178     test = (start + end) / 2;
154<a name="l00179"></a>00179   };
155<a name="l00180"></a>00180
156<a name="l00181"></a>00181   bins(test)++;
157<a name="l00182"></a>00182   trials_cnt++;
158<a name="l00183"></a>00183 }
159<a name="l00184"></a>00184
160<a name="l00185"></a>00185 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Num_T&gt;
161<a name="l00186"></a><a class="code" href="group__histogram.html#g137a9b7ba2e9282ed245cbfcc7de2864">00186</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__histogram.html#gaf127f05ede5a7c147b23374bb90f89e" title="Histogram update.">Histogram&lt;Num_T&gt;::update</a>(<a class="code" href="classitpp_1_1Vec.html" title="Vector Class (Templated).">Vec&lt;Num_T&gt;</a> values)
162<a name="l00187"></a>00187 {
163<a name="l00188"></a>00188   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; values.<a class="code" href="classitpp_1_1Vec.html#44478ea086eda22a180102e77e352325" title="The size of the vector.">length</a>(); i++)
164<a name="l00189"></a>00189     <a class="code" href="group__histogram.html#gaf127f05ede5a7c147b23374bb90f89e" title="Histogram update.">update</a>(values(i));
165<a name="l00190"></a>00190 }
166<a name="l00191"></a>00191
167<a name="l00192"></a>00192 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Num_T&gt;
168<a name="l00193"></a><a class="code" href="group__histogram.html#ge05bfc019ca085f4654707e9cf972f43">00193</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__histogram.html#gaf127f05ede5a7c147b23374bb90f89e" title="Histogram update.">Histogram&lt;Num_T&gt;::update</a>(<a class="code" href="classitpp_1_1Mat.html" title="Matrix Class (Templated).">Mat&lt;Num_T&gt;</a> values)
169<a name="l00194"></a>00194 {
170<a name="l00195"></a>00195   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; values.<a class="code" href="classitpp_1_1Mat.html#f3028609c01e08fb07c5bf0bcd4c4e03" title="The number of rows.">rows</a>(); i++)
171<a name="l00196"></a>00196     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; values.<a class="code" href="classitpp_1_1Mat.html#49680ef454d1d75b737e3ce157f1ac7b" title="The number of columns.">cols</a>(); j++)
172<a name="l00197"></a>00197       <a class="code" href="group__histogram.html#gaf127f05ede5a7c147b23374bb90f89e" title="Histogram update.">update</a>(values(i, j));
173<a name="l00198"></a>00198 }
174<a name="l00199"></a>00199
175<a name="l00200"></a>00200 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Num_T&gt;
176<a name="l00201"></a><a class="code" href="group__histogram.html#g0734cd4bae5ea37fd00e18bf21be4cb5">00201</a> <span class="keyword">inline</span> vec <a class="code" href="group__histogram.html#g0734cd4bae5ea37fd00e18bf21be4cb5" title="Experimental Probability Density Function (PDF) computation.">Histogram&lt;Num_T&gt;::get_pdf</a>()<span class="keyword"> const</span>
177<a name="l00202"></a>00202 <span class="keyword"></span>{
178<a name="l00203"></a>00203   vec pdf(num_bins);
179<a name="l00204"></a>00204   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; num_bins; j++)
180<a name="l00205"></a>00205     pdf(j) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(bins(j)) / trials_cnt;
181<a name="l00206"></a>00206   <span class="keywordflow">return</span> pdf;
182<a name="l00207"></a>00207 }
183<a name="l00208"></a>00208
184<a name="l00209"></a>00209 <span class="keyword">template</span>&lt;<span class="keyword">class</span> Num_T&gt;
185<a name="l00210"></a><a class="code" href="group__histogram.html#g18cfd3695d2e3b485f495962475438c4">00210</a> <span class="keyword">inline</span> vec <a class="code" href="group__histogram.html#g18cfd3695d2e3b485f495962475438c4" title="Experimental Cumulative Density Function (CDF) computation.">Histogram&lt;Num_T&gt;::get_cdf</a>()<span class="keyword"> const</span>
186<a name="l00211"></a>00211 <span class="keyword"></span>{
187<a name="l00212"></a>00212   ivec tmp = <a class="code" href="group__matrix__functions.html#g6b5efcaa7c61e429326f4e6e56f11655" title="Cumulative sum of elements in the matrix m.">cumsum</a>(bins);
188<a name="l00213"></a>00213   vec cdf(num_bins);
189<a name="l00214"></a>00214   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; num_bins; j++)
190<a name="l00215"></a>00215     cdf(j) = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(tmp(j)) / trials_cnt;
191<a name="l00216"></a>00216   <span class="keywordflow">return</span> cdf;
192<a name="l00217"></a>00217 }
193<a name="l00218"></a>00218
194<a name="l00220"></a>00220
195<a name="l00221"></a>00221 } <span class="comment">// namespace itpp</span>
196<a name="l00222"></a>00222
197<a name="l00223"></a>00223 <span class="preprocessor">#endif // #ifndef HISTOGRAM_H</span>
198</pre></div></div>
199<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 2 10:02:11 2009 for mixpp by&nbsp;
200<a href="http://www.doxygen.org/index.html">
201<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
202</body>
203</html>
Note: See TracBrowser for help on using the browser.