/*************************************************************************** * GGti.hpp - Good time interval class * * ----------------------------------------------------------------------- * * copyright (C) 2008-2016 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 GGti.hpp * @brief Good time interval class interface definition * @author Juergen Knoedlseder */ #ifndef GGTI_HPP #define GGTI_HPP /* __ Includes ___________________________________________________________ */ #include #include "GContainer.hpp" #include "GTime.hpp" #include "GTimeReference.hpp" #include "GFilename.hpp" /* __ Forward declarations _______________________________________________ */ class GXmlElement; class GFits; class GFitsTable; /***********************************************************************//** * @class GGti * * @brief Good Time Interval class * * This class holds a list of Good Time Intervals, i.e. time intervals that * are valid for science analysis. Times are stored using the GTime class. * The class also holds information about the time reference, which will * be retained when reading and used when writing, so that Good Time * Intervals are always written in the specified time reference. * * The class has no method for sorting of the Good Time Intervals; it is * expected that the Good Time Intervals are correctly set by the client. ***************************************************************************/ class GGti : public GContainer { public: // Constructors and destructors GGti(void); explicit GGti(const GFilename& filename); GGti(const GGti& gti); GGti(const GTime& tstart, const GTime& tstop); explicit GGti(const GXmlElement& xml); explicit GGti(const GTimeReference& ref); virtual ~GGti(void); // Operators GGti& operator=(const GGti& gti); // Methods void clear(void); GGti* clone(void) const; std::string classname(void) const; int size(void) const; bool is_empty(void) const; void append(const GTime& tstart, const GTime& tstop); void insert(const GTime& tstart, const GTime& tstop); void merge(void); void merge(const GTime& tstart, const GTime& tstop); void reduce(const GTime& tstart, const GTime& tstop); void remove(const int& index); void reserve(const int& num); void extend(const GGti& gti); void load(const GFilename& filename); void save(const GFilename& filename, const bool& clobber = false) const; void read(const GFitsTable& table); void write(GFits& fits, const std::string& extname = "GTI") const; void read(const GXmlElement& xml); void write(GXmlElement& xml) const; const GTime& tstart(void) const; const GTime& tstop(void) const; const GTime& tstart(const int& index) const; const GTime& tstop(const int& index) const; const double& telapse(void) const; const double& ontime(void) const; void reference(const GTimeReference& ref); const GTimeReference& reference(void) const; bool contains(const GTime& time) const; std::string print(const GChatter& chatter = NORMAL) const; protected: // Protected methods void init_members(void); void copy_members(const GGti& gti); void free_members(void); void set_attributes(void); void insert_gti(const int& index, const GTime& tstart, const GTime& tstop); // Protected data area int m_num; //!< Number of Good Time Intervals GTime m_tstart; //!< Start time of Good Time Intervals GTime m_tstop; //!< Stop time of Good Time Intervals double m_ontime; //!< Sum of Good Time Interval durations (in seconds) double m_telapse; //!< Time between start of first GTI and stop of last GTI (in seconds) GTime *m_start; //!< Array of start times GTime *m_stop; //!< Array of stop times GTimeReference m_reference; //!< Time reference GFilename m_xml_filename; //!< XML filename }; /***********************************************************************//** * @brief Return class name * * @return String containing the class name ("GGti"). ***************************************************************************/ inline std::string GGti::classname(void) const { return ("GGti"); } /***********************************************************************//** * @brief Return number of Good Time Intervals * * @return Number of Good Time Intervals. ***************************************************************************/ inline int GGti::size(void) const { return m_num; } /***********************************************************************//** * @brief Signal if there are no Good Time Intervals * * @return True if there are no Good Time Intervals. ***************************************************************************/ inline bool GGti::is_empty(void) const { return (m_num == 0); } #endif /* GGTI_HPP */