/*************************************************************************** * GHorizDir.hpp - Horizontal direction class * * ----------------------------------------------------------------------- * * copyright (C) 2014 by Karl Kosack * * ----------------------------------------------------------------------- * * * * 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 GHorizDir.hpp * @brief Horizontal direction class interface definition * @author Karl Kosack */ #ifndef GHORIZDIR_HPP #define GHORIZDIR_HPP /* __ Includes ___________________________________________________________ */ #include #include "GBase.hpp" #include "GVector.hpp" #include "GMath.hpp" /* __ Compile options ____________________________________________________ */ /***********************************************************************//** * @class GHorizDir * * @brief Horizontal (Alt/Az) direction class * * This class is essentially a copy of GSkyDir and implements a * spherical coordinate on the sky, in horizontal coordinates as seen * from Earth. * * @note since this class shares much functionality with GSkyDir, a * common base-class should probably be created in the future to avoid * duplication of code. ***************************************************************************/ class GHorizDir : public GBase { // Operator friends friend bool operator==(const GHorizDir &a, const GHorizDir &b); friend bool operator!=(const GHorizDir &a, const GHorizDir &b); public: // Constructors and destructors GHorizDir(void); GHorizDir(const GHorizDir& dir); virtual ~GHorizDir(void); // Operators GHorizDir& operator=(const GHorizDir& dir); // Methods void clear(void); GHorizDir* clone(void) const; std::string classname(void) const; void altaz(const double& alt, const double& az); void altaz_deg(const double& alt, const double& az); void celvector(const GVector& vector); void rotate_deg(const double& phi, const double& theta); const double& alt(void) const; const double& az(void) const; double zenith(void) const; double zenith_deg(void) const; double alt_deg(void) const; double az_deg(void) const; GVector celvector(void) const; double dist(const GHorizDir& dir) const; double dist_deg(const GHorizDir& dir) const; std::string print(const GChatter& chatter = NORMAL) const; private: // Private methods void init_members(void); void copy_members(const GHorizDir& dir); void free_members(void); // Private members double m_alt; //!< altitude in radians double m_az; //!< azimuth in radians }; /***********************************************************************//** * @brief Return class name * * @return String containing the class name ("GHorizDir"). ***************************************************************************/ inline std::string GHorizDir::classname(void) const { return ("GHorizDir"); } /***********************************************************************//** * @brief Return zenith angle in radians * * @return zenith angle in radians. ***************************************************************************/ inline double GHorizDir::zenith() const { return (gammalib::pihalf - m_alt); } /***********************************************************************//** * @brief Return zenith angle in degrees * * @return zenith angle in degrees. ***************************************************************************/ inline double GHorizDir::zenith_deg() const { return (zenith() * gammalib::rad2deg); } /***********************************************************************//** * @brief Return altitude angle in radians * * @return Altitude angle in radians. ***************************************************************************/ inline const double& GHorizDir::alt() const { return m_alt; } /***********************************************************************//** * @brief Return altitude angle in degrees * * @return Altitude angle in degrees. ***************************************************************************/ inline double GHorizDir::alt_deg() const { return (m_alt * gammalib::rad2deg); } /***********************************************************************//** * @brief Return azimuth angle in radians * * @return Azimuth angle in radians. ***************************************************************************/ inline const double& GHorizDir::az() const { return m_az; } /***********************************************************************//** * @brief Return azimuth angle in degrees * * @return Azimuth angle in degrees. ***************************************************************************/ inline double GHorizDir::az_deg() const { return (m_az * gammalib::rad2deg); } #endif /* GHORIZDIR_HPP */