GammaLib 2.0.0
Loading...
Searching...
No Matches
GSkyPixel.hpp
Go to the documentation of this file.
1/***************************************************************************
2 * GSkyPixel.hpp - Sky map pixel class *
3 * ----------------------------------------------------------------------- *
4 * copyright (C) 2010-2018 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- *
6 * *
7 * This program is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
19 * *
20 ***************************************************************************/
21/**
22 * @file GSkyPixel.hpp
23 * @brief Sky map pixel class definition
24 * @author Juergen Knoedlseder
25 */
26
27#ifndef GSKYPIXEL_HPP
28#define GSKYPIXEL_HPP
29
30/* __ Includes ___________________________________________________________ */
31#include <string>
32#include "GBase.hpp"
33
34
35/***********************************************************************//**
36 * @class GSkyPixel
37 *
38 * @brief Sky map pixel class
39 *
40 * This class implements a sky map pixel. A sky map pixel may be either
41 * 1-dimensional (1D) or 2-dimensional (2D). 1D pixels are set and retrieved
42 * using the index() method. The X and Y components of 2D pixels are set and
43 * retrieved using the x() and y() methods. The xy() method allows setting
44 * of both the X and Y components simultaneously.
45 *
46 * There are integer and double precision variants for 1D and 2D pixel
47 * constructors:
48 *
49 * GSkyPixel int_1D_pixel(1); // Set index to 1
50 * GSkyPixel double_1D_pixel(1.0); // Set index to 1.0
51 * GSkyPixel int_2D_pixel(1,2); // Set (x,y)=(1,2)
52 * GSkyPixel double_2D_pixel(1.0,2.0); // Set (x,y)=(1.0,2.0)
53 *
54 * The 1D constructors allow for automatic type conversion:
55 *
56 * GSkyPixel int_1D_pixel = 1; // Set index to 1
57 * GSkyPixel double_1D_pixel = 1.0; // Set index to 1.0
58 *
59 * Note that the class also provides conversion operators to int and double
60 * allowing to write:
61 *
62 * int index = GSkyPixel(1); // Retrieve integer index
63 * double dindex = GSkyPixel(1.0); // Retrieve double precision index
64 *
65 * The dimensionality of a pixel is checked using the is_1D() and is_2D()
66 * methods. The size() method returns 1 for 1D pixels and 2 for 2D pixels.
67 * If a pixel is not initialised, e.g.
68 *
69 * GSkyPixel pixel; // Not initialised
70 *
71 * the is_1D() and is_2D() methods return false and the size() method returns
72 * 0.
73 ***************************************************************************/
74class GSkyPixel : public GBase {
75
76 // Operator friends
77 friend bool operator==(const GSkyPixel& a, const GSkyPixel& b);
78 friend bool operator!=(const GSkyPixel& a, const GSkyPixel& b);
79
80public:
81 // Constructors and destructors
82 GSkyPixel(void);
83 GSkyPixel(const int& index);
84 GSkyPixel(const double& index);
85 GSkyPixel(const int& x, const int& y);
86 GSkyPixel(const double& x, const double& y);
87 GSkyPixel(const GSkyPixel& pixel);
88 virtual ~GSkyPixel(void);
89
90 // Operators
91 GSkyPixel& operator=(const GSkyPixel& pixel);
92 operator int() const;
93 operator double() const;
94
95 // Methods
96 void clear(void);
97 GSkyPixel* clone(void) const;
98 std::string classname(void) const;
99 int size(void) const;
100 bool is_1D(void) const;
101 bool is_2D(void) const;
102 void index(const double& index);
103 void x(const double& x);
104 void y(const double& y);
105 void xy(const double& x, const double& y);
106 const double& index(void) const;
107 const double& x(void) const;
108 const double& y(void) const;
109 std::string print(const GChatter& chatter = NORMAL) const;
110
111private:
112 // Private methods
113 void init_members(void);
114 void copy_members(const GSkyPixel& pixel);
115 void free_members(void);
116
117 // Private data area
118 int m_size; //!< Pixel dimension (0=undefined, 1=1D, 2=2D)
119 double m_x; //!< X index
120 double m_y; //!< Y index
121};
122
123
124/***********************************************************************//**
125 * @brief Return class name
126 *
127 * @return String containing the class name ("GSkyPixel").
128 ***************************************************************************/
129inline
130std::string GSkyPixel::classname(void) const
131{
132 return ("GSkyPixel");
133}
134
135
136/***********************************************************************//**
137 * @brief Return pixel dimension
138 *
139 * @return Pixel dimension [0,1,2].
140 *
141 * Returns the pixel dimension. If the pixel is not defined the method
142 * returns 0.
143 ***************************************************************************/
144inline
145int GSkyPixel::size(void) const
146{
147 return m_size;
148}
149
150
151/***********************************************************************//**
152 * @brief Check if pixel is 1D
153 *
154 * @return True if pixel is 1D.
155 ***************************************************************************/
156inline
157bool GSkyPixel::is_1D(void) const
158{
159 return (m_size == 1);
160}
161
162
163/***********************************************************************//**
164 * @brief Check if pixel is 2D
165 *
166 * @return True if pixel is 2D.
167 ***************************************************************************/
168inline
169bool GSkyPixel::is_2D(void) const
170{
171 return (m_size == 2);
172}
173
174
175/***********************************************************************//**
176 * @brief Set sky map pixel index
177 *
178 * @param[in] index Pixel index.
179 *
180 * Sets the 1D pixel index.
181 ***************************************************************************/
182inline
183void GSkyPixel::index(const double& index)
184{
185 // Set pixel index
186 m_size = 1;
187 m_x = index;
188 m_y = 0.0;
189
190 // Return
191 return;
192}
193
194
195/***********************************************************************//**
196 * @brief Set x value of sky map pixel
197 *
198 * @param[in] x X pixel index.
199 *
200 * Sets the X value of a 2D pixel index. The method does not alter the Y
201 * pixel index.
202 ***************************************************************************/
203inline
204void GSkyPixel::x(const double& x)
205{
206 m_size = 2;
207 m_x = x;
208 return;
209}
210
211
212/***********************************************************************//**
213 * @brief Set y value of sky map pixel
214 *
215 * @param[in] y Y pixel index.
216 *
217 * Sets the Y value of a 2D pixel index. The method does not alter the X
218 * pixel index.
219 ***************************************************************************/
220inline
221void GSkyPixel::y(const double& y)
222{
223 m_size = 2;
224 m_y = y;
225 return;
226}
227
228
229/***********************************************************************//**
230 * @brief Set x and y value of sky map pixel
231 *
232 * @param[in] x X pixel index.
233 * @param[in] y Y pixel index.
234 *
235 * Sets the X and Y value of a 2D pixel index.
236 ***************************************************************************/
237inline
238void GSkyPixel::xy(const double& x, const double& y)
239{
240 m_size = 2;
241 m_x = x;
242 m_y = y;
243 return;
244}
245
246
247/***********************************************************************//**
248 * @brief Return sky map pixel index
249 *
250 * @return Sky map pixel index
251 *
252 * Returns the 1D index of a sky map pixel. The method does not check whether
253 * the pixel is indeed a 1D pixel.
254 ***************************************************************************/
255inline
256const double& GSkyPixel::index(void) const
257{
258 return m_x;
259}
260
261
262/***********************************************************************//**
263 * @brief Return x value of sky map pixel
264 *
265 * @return X value of sky map pixel
266 *
267 * Returns the X value of a 2D sky map pixel. The method does not check
268 * whether the pixel is indeed a 2D pixel.
269 ***************************************************************************/
270inline
271const double& GSkyPixel::x(void) const
272{
273 return m_x;
274}
275
276
277/***********************************************************************//**
278 * @brief Return y value of sky pixel
279 *
280 * @return Y value of sky map pixel
281 *
282 * Returns the Y value of a 2D sky map pixel. The method does not check
283 * whether the pixel is indeed a 2D pixel.
284 ***************************************************************************/
285inline
286const double& GSkyPixel::y(void) const
287{
288 return m_y;
289}
290
291
292/***********************************************************************//**
293 * @brief Equality operator
294 *
295 * @param[in] a First sky pixel.
296 * @param[in] b Second sky pixel.
297 * @return True if first and second sky pixels are identical.
298 ***************************************************************************/
299inline
300bool operator==(const GSkyPixel &a, const GSkyPixel &b)
301{
302 return ((a.m_size == b.m_size) && (a.m_x == b.m_x) && (a.m_y == b.m_y));
303}
304
305
306/***********************************************************************//**
307 * @brief Inqquality operator
308 *
309 * @param[in] a First sky pixel.
310 * @param[in] b Second sky pixel.
311 * @return True if first and second sky pixels are different.
312 ***************************************************************************/
313inline
314bool operator!=(const GSkyPixel &a, const GSkyPixel &b)
315{
316 return ((a.m_size != b.m_size) || (a.m_x != b.m_x) || (a.m_y != b.m_y));
317}
318
319#endif /* GSKYPIXEL_HPP */
Definition of interface for all GammaLib classes.
bool operator!=(const GSkyPixel &a, const GSkyPixel &b)
Inqquality operator.
bool operator==(const GSkyPixel &a, const GSkyPixel &b)
Equality operator.
GChatter
Definition GTypemaps.hpp:33
@ NORMAL
Definition GTypemaps.hpp:36
Interface class for all GammaLib classes.
Definition GBase.hpp:52
Sky map pixel class.
Definition GSkyPixel.hpp:74
void copy_members(const GSkyPixel &pixel)
Copy class members.
int m_size
Pixel dimension (0=undefined, 1=1D, 2=2D)
void free_members(void)
Delete class members.
GSkyPixel & operator=(const GSkyPixel &pixel)
Assignment operator.
friend bool operator!=(const GSkyPixel &a, const GSkyPixel &b)
Inqquality operator.
friend bool operator==(const GSkyPixel &a, const GSkyPixel &b)
Equality operator.
std::string print(const GChatter &chatter=NORMAL) const
Print pixel.
const double & y(void) const
Return y value of sky pixel.
int size(void) const
Return pixel dimension.
GSkyPixel * clone(void) const
Clone sky map pixel.
bool is_1D(void) const
Check if pixel is 1D.
bool is_2D(void) const
Check if pixel is 2D.
void clear(void)
Clear instance.
double m_x
X index.
const double & x(void) const
Return x value of sky map pixel.
void init_members(void)
Initialise class members.
double m_y
Y index.
const double & index(void) const
Return sky map pixel index.
void xy(const double &x, const double &y)
Set x and y value of sky map pixel.
std::string classname(void) const
Return class name.
virtual ~GSkyPixel(void)
Destructor.
GSkyPixel(void)
Void constructor.
Definition GSkyPixel.cpp:57