rasdaman client API 10.6.3
The Array Analytics Engine: Datacubes at Your Fingertips
stattiling.hh
Go to the documentation of this file.
1/*
2* This file is part of rasdaman community.
3*
4* Rasdaman community is free software: you can redistribute it and/or modify
5* it under the terms of the GNU General Public License as published by
6* the Free Software Foundation, either version 3 of the License, or
7* (at your option) any later version.
8*
9* Rasdaman community is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY; without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with rasdaman community. If not, see <http://www.gnu.org/licenses/>.
16*
17* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
18rasdaman GmbH.
19*
20* For more information please see <http://www.rasdaman.org>
21* or contact Peter Baumann via <baumann@rasdaman.com>.
22*/
23
24#ifndef _R_STATTILING_HH_
25#define _R_STATTILING_HH_
26
27// Include statements
28
29#include "rasodmg/tiling.hh"
30#include "raslib/minterval.hh"
31#include "raslib/odmgtypes.hh"
32#include <iosfwd>
33
34class r_Access;
35class r_Stat_Tiling;
36
37//@ManMemo: Module: {\bf rasodmg}
38
50{
51public:
53 explicit r_Access(const r_Minterval &pattern, r_ULong accesses = 1);
60 const r_Minterval &get_pattern() const;
61
63 void set_pattern(const r_Minterval &pattern);
64
67
69 void set_times(r_ULong accesses);
70
73 bool is_near(const r_Access &other, r_ULong border_threshold) const;
74
76 void merge_with(const r_Access &other);
77
79 void print_status(std::ostream &os) const;
80
82 bool operator==(const r_Access &other) const;
83
85 bool operator!=(const r_Access &other) const;
86
87private:
89 r_Access() = default;
90
92 r_Minterval interval;
93
95 r_ULong times{};
96};
97
98//@ManMemo: Module: {\bf rasodmg}
102extern std::ostream &operator<<(std::ostream &os, const r_Access &access);
103
104//@ManMemo: Module: {\bf rasodmg}
105
106/*@Doc:
107 This class implements the "statistic tiling" algorithm.
108
109 Three parameters are passed in the constructor of the class,
110 the border threshold for considering two access patterns to be the
111 same, the interesting threshold which specifies the percentage of
112 accesses that must take place so that an areas is considered of interest
113 when performing tiling and also the tilesize.
114
115 A call to \c update_stat_information should be made prior to performing
116 tiling so that the static information about the accesses to the object
117 can be updated and the tiling operation prepared.
118*/
119
124{
125 // ******************* PUBLIC SECTION *******************
126
127public: // constants
129 const static r_Area DEF_BORDER_THR;
130
133
136 explicit r_Stat_Tiling(const char *encoded);
137
140 const std::vector<r_Access> &stat_info,
142 r_Area border_threshold = DEF_BORDER_THR,
143 r_Double interesting_threshold = DEF_INTERESTING_THR);
156 virtual ~r_Stat_Tiling() = default;
157
159 virtual const std::vector<r_Minterval> &get_interesting_areas() const;
160
176 void print_status(std::ostream &os) const override;
177
178 std::vector<r_Minterval> compute_tiles(const r_Minterval &obj_domain, r_Bytes cell_size) const override;
179
180 r_Tiling *clone() const override;
181
183
184 static const char *description;
185
186protected: // methods
189 void filter(std::vector<r_Access> &patterns) const;
190
192 r_Access merge(const std::vector<r_Access> &patterns) const;
193
196
199
201 std::vector<r_Minterval> iareas;
202
204 std::vector<r_Access> stat_info;
205};
206
207#endif
This class represents an access pattern to a certain object.
Definition stattiling.hh:50
void set_pattern(const r_Minterval &pattern)
Sets the current interval (access pattern)
bool is_near(const r_Access &other, r_ULong border_threshold) const
Checks if a certain access pattern is "close enough" of other throws exception if the domains do not ...
void print_status(std::ostream &os) const
Print object status.
r_Access(const r_Minterval &pattern, r_ULong accesses=1)
Class constructor.
bool operator==(const r_Access &other) const
Operator equal.
bool operator!=(const r_Access &other) const
Operator different.
r_ULong get_times() const
Gets the number of times the pattern was accessed.
void merge_with(const r_Access &other)
Merge this access pattern with another.
const r_Minterval & get_pattern() const
It takes as parameter the interval and the number of times that interval was accessed.
void set_times(r_ULong accesses)
Sets the number of times the pattern was accessed.
Definition tiling.hh:169
The spatial domain of an MDD is represented by an object of class r_Minterval.
Definition minterval.hh:226
Definition stattiling.hh:124
std::vector< r_Minterval > iareas
Current interest areas.
Definition stattiling.hh:201
r_Tiling * clone() const override
This method provides the core funcionality of this class.
std::vector< r_Minterval > compute_tiles(const r_Minterval &obj_domain, r_Bytes cell_size) const override
Decompose an object in tiles.
r_Double interesting_thr
The "interesting area" threshold.
Definition stattiling.hh:195
static const r_Double DEF_INTERESTING_THR
Default threshold for considering an area interesting when tiling.
Definition stattiling.hh:132
r_Area border_thr
The "same border" threshold.
Definition stattiling.hh:198
static const r_Area DEF_BORDER_THR
Default threshold for two borders being considered the same.
Definition stattiling.hh:129
virtual ~r_Stat_Tiling()=default
This is the "Statistic Tiling" class constructor.
void print_status(std::ostream &os) const override
This method gets the threshold at which an area is considered to be interesting.
r_Stat_Tiling(r_Dimension dim, const std::vector< r_Access > &stat_info, r_Bytes ts=r_Tiling::defaultTileSize, r_Area border_threshold=DEF_BORDER_THR, r_Double interesting_threshold=DEF_INTERESTING_THR)
Class constructor.
r_Double get_interesting_threshold() const
This method gets the number of points (pixels/cells) at which two intervals are considered to be the ...
std::vector< r_Access > stat_info
Statistical data.
Definition stattiling.hh:204
virtual const std::vector< r_Minterval > & get_interesting_areas() const
Gets the statistical information.
static const char * description
Definition stattiling.hh:184
void filter(std::vector< r_Access > &patterns) const
Filters and access pattern table (list) throws exception if dimensions of access patterns are not the...
r_Area get_border_threshold() const
Gets the threshold at which to intervals are considered the same.
r_Stat_Tiling(const char *encoded)
read everything from an encoded string e.g.
r_Access merge(const std::vector< r_Access > &patterns) const
Merges a list of access patterns.
r_Tiling_Scheme get_tiling_scheme() const override
This method is similar to a copy constructor, this is, is returns a copy of the current object.
The r_Tiling class is used to specify in which way the tiling is done by the system.
Definition tiling.hh:53
static const r_Bytes defaultTileSize
Definition tiling.hh:92
std::uint32_t r_Dimension
number of dimensions in r_Point and r_Minterval.
Definition mddtypes.hh:56
size_t r_Bytes
number of bytes in an tile or mdd or type.
Definition mddtypes.hh:43
std::uint64_t r_Area
number of cells in an mdd object or tile.
Definition mddtypes.hh:49
r_Tiling_Scheme
Tiling of the object:
Definition mddtypes.hh:317
std::uint32_t r_ULong
Definition odmgtypes.hh:38
double r_Double
Definition odmgtypes.hh:40
std::ostream & operator<<(std::ostream &os, const r_Access &access)
Prints the status of a Access object to a stream.