GammaLib 2.0.0
Loading...
Searching...
No Matches
GSPIInstDir.cpp
Go to the documentation of this file.
1/***************************************************************************
2 * GSPIInstDir.cpp - INTEGRAL/SPI instrument direction class *
3 * ----------------------------------------------------------------------- *
4 * copyright (C) 2020-2021 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 GSPIInstDir.cpp
23 * @brief INTEGRAL/SPI instrument direction class implementation
24 * @author Juergen Knoedlseder
25 */
26
27/* __ Includes ___________________________________________________________ */
28#ifdef HAVE_CONFIG_H
29#include <config.h>
30#endif
31#include <cstring> // memcpy
32#include "GTools.hpp"
33#include "GSPIInstDir.hpp"
34
35/* __ Method name definitions ____________________________________________ */
36
37/* __ Macros _____________________________________________________________ */
38
39/* __ Coding definitions _________________________________________________ */
40
41/* __ Debug definitions __________________________________________________ */
42
43/* __ Prototypes _________________________________________________________ */
44
45/*==========================================================================
46 = =
47 = Constructors/destructors =
48 = =
49 ==========================================================================*/
50
51/***********************************************************************//**
52 * @brief Void constructor
53 *
54 * Creates an empty INTEGRAL/SPI instrument direction.
55 ***************************************************************************/
57{
58 // Initialise class members
60
61 // Return
62 return;
63}
64
65
66/***********************************************************************//**
67 * @brief SPI instrument direction constructor
68 *
69 * @param[in] dir Pointing direction.
70 * @param[in] detid Detector identifier.
71 ***************************************************************************/
72GSPIInstDir::GSPIInstDir(const GSkyDir& dir, const int& detid) : GInstDir()
73{
74 // Initialise class members
76
77 // Set members
78 m_dir = dir;
79 m_detid = detid;
80
81 // Return
82 return;
83}
84
85
86/***********************************************************************//**
87 * @brief Copy constructor
88 *
89 * @param[in] dir INTEGRAL/SPI instrument direction.
90 ***************************************************************************/
92{
93 // Initialise class members
95
96 // Copy members
98
99 // Return
100 return;
101}
102
103
104/***********************************************************************//**
105 * @brief Destructor
106 ***************************************************************************/
108{
109 // Free members
110 free_members();
111
112 // Return
113 return;
114}
115
116
117/*==========================================================================
118 = =
119 = Operators =
120 = =
121 ==========================================================================*/
122
123/***********************************************************************//**
124 * @brief Assignment operator
125 *
126 * @param[in] dir INTEGRAL/SPI instrument direction.
127 * @return INTEGRAL/SPI instrument direction.
128 ***************************************************************************/
130{
131 // Execute only if object is not identical
132 if (this != &dir) {
133
134 // Copy base class members
135 this->GInstDir::operator=(dir);
136
137 // Free members
138 free_members();
139
140 // Initialise private members
141 init_members();
142
143 // Copy members
145
146 } // endif: object was not identical
147
148 // Return this object
149 return *this;
150}
151
152
153/*==========================================================================
154 = =
155 = Public methods =
156 = =
157 ==========================================================================*/
158
159/***********************************************************************//**
160 * @brief Clear INTEGRAL/SPI instrument direction
161 *
162 * Clears INTEGRAL/SPI instrument direction by resetting all class members to
163 * an initial state. Any information that was present before will be lost.
164 ***************************************************************************/
166{
167 // Free members
168 free_members();
170
171 // Initialise private members
173 init_members();
174
175 // Return
176 return;
177}
178
179
180/***********************************************************************//**
181 * @brief Clone INTEGRAL/SPI instrument direction
182 *
183 * @return Pointer to deep copy of INTEGRAL/SPI instrument direction.
184 ***************************************************************************/
186{
187 return new GSPIInstDir(*this);
188}
189
190
191/***********************************************************************//**
192 * @brief Return instrument direction hash value
193 *
194 * @return Hash value.
195 *
196 * Returns a hash value that can be used in the response cache.
197 ***************************************************************************/
198u_int64_t GSPIInstDir::hash(void) const
199{
200 // Allocate static array to store the information as floats
201 static float buffer[2];
202
203 // Shift detector ID for addition to Right Ascension and Declination in
204 // radians
205 float shifted_detid = float(m_detid+10);
206
207 // Store the two sky coordinates as floats
208 buffer[0] = float(m_dir.ra() + shifted_detid);
209 buffer[1] = float(m_dir.dec() + shifted_detid);
210
211 // Map the floats to an unsigned 64 Bit integer
212 u_int64_t hash; std::memcpy(&hash, &buffer, sizeof hash);
213
214 // Return hash value
215 return hash;
216}
217
218
219/***********************************************************************//**
220 * @brief Print INTEGRAL/SPI instrument direction information
221 *
222 * @param[in] chatter Chattiness.
223 * @return String containing INTEGRAL/SPI instrument direction information.
224 ***************************************************************************/
225std::string GSPIInstDir::print(const GChatter& chatter) const
226{
227 // Initialise result string
228 std::string result;
229
230 // Continue only if chatter is not silent
231 if (chatter != SILENT) {
232
233 // Append instrument direction
234 std::string msg = "RA=" + gammalib::str(m_dir.ra_deg()) +
235 ", DEC=" + gammalib::str(m_dir.dec_deg()) +
236 ", DETID=" + gammalib::str(m_detid);
237 result.append(msg);
238
239 } // endif: chatter was not silent
240
241 // Return result
242 return result;
243}
244
245
246/*==========================================================================
247 = =
248 = Private methods =
249 = =
250 ==========================================================================*/
251
252/***********************************************************************//**
253 * @brief Initialise class members
254 ***************************************************************************/
256{
257 // Initialise members
258 m_dir.clear();
259 m_detid = 0;
260
261 // Return
262 return;
263}
264
265
266/***********************************************************************//**
267 * @brief Copy class members
268 *
269 * @param[in] dir INTEGRAL/SPI instrument direction.
270 ***************************************************************************/
272{
273 // Copy members
274 m_dir = dir.m_dir;
275 m_detid = dir.m_detid;
276
277 // Return
278 return;
279}
280
281
282/***********************************************************************//**
283 * @brief Delete class members
284 ***************************************************************************/
286{
287 // Return
288 return;
289}
INTEGRAL/SPI instrument direction class definition.
Gammalib tools definition.
GChatter
Definition GTypemaps.hpp:33
@ SILENT
Definition GTypemaps.hpp:34
Abstract instrument direction base class.
Definition GInstDir.hpp:51
virtual GInstDir & operator=(const GInstDir &dir)
Assignment operator.
Definition GInstDir.cpp:105
void init_members(void)
Initialise class members.
Definition GInstDir.cpp:141
void free_members(void)
Delete class members.
Definition GInstDir.cpp:163
INTEGRAL/SPI instrument direction class.
GSPIInstDir(void)
Void constructor.
void init_members(void)
Initialise class members.
virtual u_int64_t hash(void) const
Return instrument direction hash value.
void copy_members(const GSPIInstDir &dir)
Copy class members.
const int & detid(void) const
Return detector identifier.
const GSkyDir & dir(void) const
Return pointing direction.
GSkyDir m_dir
virtual void clear(void)
Clear INTEGRAL/SPI instrument direction.
virtual ~GSPIInstDir(void)
Destructor.
GSPIInstDir & operator=(const GSPIInstDir &dir)
Assignment operator.
virtual GSPIInstDir * clone(void) const
Clone INTEGRAL/SPI instrument direction.
void free_members(void)
Delete class members.
virtual std::string print(const GChatter &chatter=NORMAL) const
Print INTEGRAL/SPI instrument direction information.
Sky direction class.
Definition GSkyDir.hpp:62
double dec_deg(void) const
Returns Declination in degrees.
Definition GSkyDir.hpp:256
double ra_deg(void) const
Returns Right Ascension in degrees.
Definition GSkyDir.hpp:229
const double & dec(void) const
Return Declination in radians.
Definition GSkyDir.hpp:241
void clear(void)
Clear sky direction.
Definition GSkyDir.cpp:164
const double & ra(void) const
Return Right Ascension in radians.
Definition GSkyDir.hpp:214
std::string str(const unsigned short int &value)
Convert unsigned short integer value into string.
Definition GTools.cpp:489