// 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 _POLLUX_CATALOG_HH #define _POLLUX_CATALOG_HH #include #include #include "astro_object.hh" // catalog file data sizes #define CAT_NAME_SIZE 64 #define CAT_MAINTAINER_SIZE 1024 #define CAT_DATE_SIZE 16 #define CAT_TYPE_SIZE 16 #define CAT_DESCRIPTION_SIZE 4096 #define CAT_HISTORY_SIZE 1024 #define CAT_ACKNOWLEDGE_SIZE 1024 // element data sizes #define ELEMENT_NAME_SIZE 32 #define ELEMENT_UNIT_SIZE 32 #define ELEMENT_DESCRIPTION_SIZE 255 /* * catalog is RA_DIV * DEC_DIV * (MAX_MAG - MIN_MAG) array of objects * MAG_DIV 0 represents naked eye objects * MAG_DIV0_LIMIT then = 6 */ #define RA_DIV (360 / 5) #define DEC_DIV (180 / 5) #define MAG_MAX 20 #define MAG_MIN -2 #define MAG_EYE 6 /*! \namespace Pollux * \brief Object Catalog Manager * * All classes defined in Pollux are responsible in some way * of loading, saving, importing and managing object catalogs */ namespace Pollux { /*! \class Catalog * \brief catalog of objects. * * This class is a container for any single type of astronomical objects. * * It stores all deep sky objects in a 3 dimensional array based on ra*dec*mag * for clipping and quick searching. It also allow catalogs to be split * into several files. * * Near sky objects are stored in a 1 dimensional array depending on * there semi-major axis. */ class Catalog { public: /*! \enum CatType * \brief Catalog type descriptor */ enum CatType { DEEP, /*& result); * \brief Get objects from catalog */ int get_objects (std::vector& result); /*! \fn int load (std::string& name, std::string& path, Glib::Dispatcher* signal = 0); * \brief Load catalog from file */ int load (std::string& name, std::string& path, Glib::Dispatcher* signal = 0); /*! \fn int load_partial (std::string& name, std::string& path, int min_ra, int max_ra, int min_dec, int max_dec); * \brief Load partial catalog from file */ int load_partial (std::string& name, std::string& path, int min_ra, int max_ra, int min_dec, int max_dec); /*! \fn int save (std::string& name, std::string& path, Glib::Dispatcher* signal = 0); * \brief Save catalog to file */ int save (std::string& name, std::string& path, Glib::Dispatcher* signal = 0); /*! \fn void get_name (std::string& cat_name); * \brief Get catalog name */ void get_name (std::string& name); /*! \fn void get_description (std::string& desc); * \brief Get catalog description */ void get_description (std::string& desc); /*! \fn void get_type (std::string& type); * \brief Get catalog type */ void get_type (std::string& type); /*! \fn void get_maintainer (std::string& maintainer); * \brief Get catalog maintainer */ void get_maintainer (std::string& maintainer); /*! \fn void get_date (std::string& date); * \brief Get catalog creation date */ void get_date (std::string& date); /*! \fn int get_size (); * \brief Get catalog size */ int get_size (); /*! \fn double get_progress(); * \brief Returns the progress of Catalog load / save. */ double get_progress(); /*! \fn void get_ack (std::string& date); * \brief Get catalog creation date */ void get_ack (std::string& ack); /*! \fn void get_history (std::string& history); * \brief Get catalog history */ void get_history (std::string& history); /*! \fn void get_version (std::string& history); * \brief Get catalog version */ void get_version (std::string& history); private: // object storage std::vector m_objects[RA_DIV][DEC_DIV][MAG_MAX - MAG_MIN]; /*!< catalog objects */ // catalog info std::string m_name; /*!< catalog name */ std::string m_description; /*!< catalog description */ std::string m_type; /*!< catalog type */ std::string m_maintainer; /*!< catalog maintainer */ std::string m_date; /*!< catalog creation date */ std::string m_history; /*!< catalog history */ std::string m_acknowledge; /*!< catalog acknowledgements */ std::string m_version; /*!< catalog version */ // catalog file sectors int m_ra_fdiv; /*!< Number of RA file divisions */ int m_dec_fdiv; /*!< Number of DEC file divisions */ int m_ra_div_fsize; /*!< Size of RA file division in degrees */ int m_dec_div_fsize; /*!< Size of DEC file division in degrees */ // catalog storage data int m_size; /*!< Number of objects in catalog */ int m_add_size; /*!< Number of elements added to catalog */ int m_ra_div_size; /*!< Size of RA division in degrees */ int m_dec_div_size; /*!< Size of DEC division in degrees */ // load/save progress double m_progress; /*!< Operation progress 0.0 ... 1.0 */ // clipping int m_clip_min_ra; /*!< Clipping Min RA */ int m_clip_min_dec; /*!< Clipping Min DEC */ int m_clip_max_ra; /*!< Clipping Max RA */ int m_clip_max_dec; /*!< Clipping Max DEC */ int m_clip_max_mag; /*!< Clipping Max Mag */ int m_clip_min_mag; /*!< Clipping Min Mag */ // new catalog element data std::vector m_unknown_names; /*!< Unknown object data names */ /*! \struct extra_element * \brief extra element descriptors */ struct extra_element { std::string name; /*!< Element name */ std::string units; /*!< Element units */ std::string description; /*!< Element description */ }; // extra element vector std::vector m_extra_info; /*!< Extra element info */ /*! \struct file_header * \brief Catalog File Header */ struct file_header { char cat_name[CAT_NAME_SIZE]; /*!< Catalog name*/ char cat_maintainer[CAT_MAINTAINER_SIZE]; /*!< Catalog maintainer */ char cat_date[CAT_DATE_SIZE]; /*!< Catalog creationj date */ char cat_type[CAT_TYPE_SIZE]; /*!< Catalog type */ char cat_description[CAT_DESCRIPTION_SIZE]; /*!< Catalog description */ int cat_size; /*!< Number of objects in catalog */ int unknown_elements; /*!< Number of unkown element descriptions in catalog */ }; /*! \struct file_extra_element * \brief Description of extra elements in catalog */ struct file_extra_element { char name[ELEMENT_NAME_SIZE]; /*!< Element Name */ char units[ELEMENT_UNIT_SIZE]; /*!< Element units */ char description[ELEMENT_DESCRIPTION_SIZE]; /*!< Element description */ }; /*! \fn int save_sectors (std::string& file, Glib::Dispatcher* signal = 0); * \brief Save catalog sectors to file. */ int save_sectors (std::string& file, Glib::Dispatcher* signal = 0); /*! \fn int load_sectors (std::string& file, Glib::Dispatcher* signal = 0); * \brief Load catalog sectors. */ int load_sectors (std::string& file, Glib::Dispatcher* signal = 0); /*! \fn int load_sectors (std::string& file, int ra_start, int ra_sectors, int dec_start, int dec_sectors); * \brief Load catalog sectors. */ int load_sectors (std::string& file, int ra_start, int ra_sectors, int dec_start, int dec_sectors); /*! \fn int load_file (char* file); * \brief Load a catalog file into memory */ int load_file (char* file); }; } #endif