// 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 2 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, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// Copyright 2003 Liam Girdwood
#ifndef _CASTOR_GALAXY_HH
#define _CASTOR_GALAXY_HH
#include "deep_object.hh"
namespace Castor
{
/*! \class Galaxy
* \brief Nova Galaxy Object
*
* This class contains the following parameters
*
* - Btot Total Magnitude (double)
* - MType Galaxy Type (string)
* - PA Position angle (double)
* - RadVel Radial Velocity (double)
* - MinAxis Minor Axis (double)
* - MajAxis Major Axis (double)
*
*/
class Galaxy : public DeepObject
{
public:
/*! \fn Galaxy()
* \brief Constructor
*/
Galaxy();
/*! \fn ~Galaxy();
* \brief Destructor
*/
~Galaxy();
/*! \fn int save (std::ofstream* file);
* \brief Save object to file.
*/
int save (std::ofstream* file);
/*! \fn int load (std::ifstream* file);
* \brief Load object from file.
*/
int load (std::ifstream* file);
/*! \fn bool add_element (std::string& name, element_type type, std::string& value);
* \brief Add a data element.
*/
bool add_element (std::string& name, element_type type, std::string& value);
/*! \fn bool check_element (std::string& name);
* \brief Is object type known ?
*/
bool check_element (std::string& name);
/*! \fn void get_hrz_posn (double JD, ln_lnlat_posn* observer, ln_hrz_posn* posn);
* \brief Get object horizontal position
*/
void get_hrz_posn (double JD, ln_lnlat_posn* observer, ln_hrz_posn* posn);
/*! \fn void get_rst_time (double JD, ln_lnlat_posn* observer, ln_rst_time* time);
* \brief Get object rise, transit and set time.
*/
void get_rst_time (double JD, ln_lnlat_posn* observer, ln_rst_time* time);
/*! \fn void get_posn(double& ra, double& dec);
* \brief Get object Right Ascension and declination
*/
void get_posn(double& ra, double& dec);
/*! \fn void get_id(std::string& id);
* \brief Get object identification number.
*/
void get_id(std::string& id);
/*! \fn void get_name(std::string& name);
* \brief Get object name.
*/
void get_name(std::string& name);
/*! \fn virtual void get_info (std::list& value);
* \brief Get object information
*/
void get_info (std::list& value);
/*! \fn void render(double x, double y, double mag_max, Gnome::Canvas::Group& group, bool bright);
* \brief Render object
*/
void render(double x, double y, double mag_max, Gnome::Canvas::Group& group, bool bright, double ppd = 0);
/*! \fn void get_axis (double& maj, double& min);
* \brief Get the major and minor axis
*/
void get_axis (double& maj, double& min);
/*! \fn double get_pa ();
* \brief Get position angle
*/
double get_pa ();
/*! \fn double get_radvel();
* \brief Get radial velocity
*/
double get_radvel();
protected:
std::string m_mtype; /*!< Galaxy type */
double m_maj_axis; /*!< Galaxy major axis (arcmins) */
double m_min_axis; /*!< Galaxy minor axis (arcmins) */
double m_pa; /*!< Galaxy position angle */
double m_radvel; /*!< Galaxy radial velocity (kms) */
};
}
#endif