/***************************************************************************
* GSkyProjection.cpp - Abstract sky projection base class *
* ----------------------------------------------------------------------- *
* copyright (C) 2010-2012 by Juergen Knoedlseder *
* ----------------------------------------------------------------------- *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see . *
* *
***************************************************************************/
/**
* @file GSkyProjection.cpp
* @brief Abstract sky projection base class implementation
* @author Juergen Knoedlseder
*/
/* __ Includes ___________________________________________________________ */
#ifdef HAVE_CONFIG_H
#include
#endif
#include "GException.hpp"
#include "GTools.hpp"
#include "GSkyProjection.hpp"
/* __ Method name definitions ____________________________________________ */
#define G_COORDSYS_SET "GSkyProjection::coordsys(std::string)"
/* __ Macros _____________________________________________________________ */
/* __ Coding definitions _________________________________________________ */
/* __ Debug definitions __________________________________________________ */
/* __ Local prototypes ___________________________________________________ */
/* __ Constants __________________________________________________________ */
/*==========================================================================
= =
= Constructors/destructors =
= =
==========================================================================*/
/***********************************************************************//**
* @brief Void constructor
***************************************************************************/
GSkyProjection::GSkyProjection(void)
{
// Initialise class members
init_members();
// Return
return;
}
/***********************************************************************//**
* @brief Copy constructor
*
* @param[in] proj Sky projection.
***************************************************************************/
GSkyProjection::GSkyProjection(const GSkyProjection& proj)
{
// Initialise class members
init_members();
// Copy members
copy_members(proj);
// Return
return;
}
/***********************************************************************//**
* @brief Destructor
***************************************************************************/
GSkyProjection::~GSkyProjection(void)
{
// Free members
free_members();
// Return
return;
}
/*==========================================================================
= =
= Operators =
= =
==========================================================================*/
/***********************************************************************//**
* @brief Assignment operator
*
* @param[in] proj Sky projection.
* @return Sky projection.
***************************************************************************/
GSkyProjection& GSkyProjection::operator= (const GSkyProjection& proj)
{
// Execute only if object is not identical
if (this != &proj) {
// Free members
free_members();
// Initialise private members for clean destruction
init_members();
// Copy members
copy_members(proj);
} // endif: object was not identical
// Return this object
return *this;
}
/*==========================================================================
= =
= Public methods =
= =
==========================================================================*/
/***********************************************************************//**
* @brief Returns coordinate system.
*
* @return Coordinate system string.
*
* Returns one of
* 'EQU' (equatorial),
* 'GAL' (galactic),
***************************************************************************/
std::string GSkyProjection::coordsys(void) const
{
// Set coordinate system
std::string s_coordsys;
switch (m_coordsys) {
case 0:
s_coordsys = "EQU";
break;
case 1:
s_coordsys = "GAL";
break;
default:
s_coordsys = "UNKNOWN";
break;
}
// Return coordinate system
return s_coordsys;
}
/***********************************************************************//**
* @brief Set coordinate system
*
* @param[in] coordsys Coordinate system
*
* @exception GException::wcs_bad_coords
* Invalid coordsys parameter.
*
* Set coordinate system from std::string. The method recognizes the
* following codes:
* 'EQU', 'CEL', 'C': celestial,
* 'GAL', 'G': galactic,
***************************************************************************/
void GSkyProjection::coordsys(const std::string& coordsys)
{
// Convert argument to upper case
std::string ucoordsys = gammalib::toupper(coordsys);
// Set coordinate system
if (ucoordsys == "EQU" || ucoordsys == "CEL" || ucoordsys == "C") {
m_coordsys = 0;
}
else if (ucoordsys == "GAL" || ucoordsys == "G") {
m_coordsys = 1;
}
else {
throw GException::wcs_bad_coords(G_COORDSYS_SET, coordsys);
}
// Return
return;
}
/*==========================================================================
= =
= Protected methods =
= =
==========================================================================*/
/***********************************************************************//**
* @brief Initialise class members
***************************************************************************/
void GSkyProjection::init_members(void)
{
// Initialise members
m_coordsys = 0; // 0 means EQU
// Return
return;
}
/***********************************************************************//**
* @brief Copy class members
*
* @param[in] proj Sky projection.
***************************************************************************/
void GSkyProjection::copy_members(const GSkyProjection& proj)
{
// Copy attributes
m_coordsys = proj.m_coordsys;
// Return
return;
}
/***********************************************************************//**
* @brief Delete class members
***************************************************************************/
void GSkyProjection::free_members(void)
{
// Return
return;
}
/*==========================================================================
= =
= Friends =
= =
==========================================================================*/
/***********************************************************************//**
* @brief Equality operator
*
* @param[in] a First sky projection.
* @param[in] b Second sky projection.
* @return True if @p a and @p b are identical.
***************************************************************************/
bool operator==(const GSkyProjection &a, const GSkyProjection &b)
{
// Return result
return a.compare(b);
}
/***********************************************************************//**
* @brief Non-equality operator
*
* @param[in] a First sky projection.
* @param[in] b Second sky projection.
* @return True if @p a and @p b are not identical.
***************************************************************************/
bool operator!=(const GSkyProjection &a, const GSkyProjection &b)
{
// Return result
return !(a == b);
}