annotate scripts/plot/draw/private/__calc_isovalue_from_data__.m @ 23219:3ac9f9ecfae5 stable

maint: Update copyright dates.
author John W. Eaton <jwe@octave.org>
date Wed, 22 Feb 2017 12:39:29 -0500
parents e9a0469dedd9
children 092078913d54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23219
3ac9f9ecfae5 maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents: 23083
diff changeset
1 ## Copyright (C) 2016-2017 Markus Muetzel
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
2 ##
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
3 ## This file is part of Octave.
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
4 ##
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
8 ## your option) any later version.
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
9 ##
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
13 ## General Public License for more details.
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
14 ##
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
18
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
19 ## Undocumented internal function.
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
20
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
21 ## -*- texinfo -*-
22232
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
22 ## @deftypefn {} {@var{isoval} =} __calc_isovalue_from_data__ (@var{data})
22299
9fc91bb2aec3 doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents: 22232
diff changeset
23 ## Calculate a @nospell{"good"} iso value from histogram of data.
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
24 ## @end deftypefn
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
25
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
26 ## called from isocaps, isosurface
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
27
22232
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
28 function isoval = __calc_isovalue_from_data__ (data)
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
29
22232
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
30 ## use a maximum of 10,000-20,000 samples to limit runtime of hist
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
31 step = 1;
22232
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
32 ndata = numel (data);
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
33 if (ndata > 20_000)
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
34 step = floor (ndata / 10_000);
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
35 data = data(1:step:end);
22232
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
36 ndata = numel (data);
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
37 endif
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
38
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
39 num_bins = 100;
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
40 [bin_count, bin_centers] = hist (data(:), num_bins);
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
41
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
42 ## if one of the first two bins contains more than 10 times the count as
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
43 ## compared to equally distributed data, remove both (zero-padded + noise)
22232
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
44 if (any (bin_count(1:2) > 10 * (ndata / num_bins)))
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
45 bin_count(1:2) = [];
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
46 bin_centers(1:2) = [];
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
47 endif
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
48
22232
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
49 ## if bins have low counts, remove them (but keep them if we would lose
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
50 ## more than 90% of bins)
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
51 bins_to_remove = find (bin_count < max (bin_count)/50);
22232
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
52 if (length (bins_to_remove) < .9 * num_bins)
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
53 bin_centers(bins_to_remove) = [];
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
54 endif
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
55
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
56 ## select middle bar of histogram with previous conditions
22232
a8fd02bc895b Overhaul isosurface.m and associated functions.
Rik <rik@octave.org>
parents: 22035
diff changeset
57 isoval = bin_centers(floor (numel (bin_centers) / 2));
22035
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
58
634fbedbfb5b Additional functionality for isosurface.m (bug #46946)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
59 endfunction