CppEphem
CEDate.h
Go to the documentation of this file.
1 /***************************************************************************
2  * CEDate.h: CppEphem *
3  * ----------------------------------------------------------------------- *
4  * Copyright © 2016-2019 JCardenzana *
5  * ----------------------------------------------------------------------- *
6  * *
7  * This program is free software: you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation, either version 3 of the License, or *
10  * (at your option) any later version. *
11  * *
12  * This program is distributed in the hope that it will be useful, *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15  * GNU General Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with this program. If not, see <http://www.gnu.org/licenses/>. *
19  * *
20  ***************************************************************************/
21 
22 #ifndef CEDate_h
23 #define CEDate_h
24 
25 #include <iostream>
26 #include <string>
27 #include <vector>
28 
29 // CppEphem HEADERS
30 #include "CETime.h"
31 #include <CENamespace.h>
32 
33 // SOFA HEADER
34 #include "sofa.h"
35 
36 /**********************************************************************/
39 enum CEDateType {JD,
40  MJD,
41  GREGORIAN
42  } ;
43 
44 class CEDate {
45 public:
46  // Default constructor
47  CEDate(double date=CurrentJD(), CEDateType date_format=CEDateType::JD) ;
48  explicit CEDate(std::vector<double> date) ;
49  explicit CEDate(const CEDate& other) ;
50  virtual ~CEDate();
51 
52  CEDate& operator=(const CEDate& other);
53 
54  // Method that can be used to change the date that is stored in this object
55  virtual void SetDate(const double& date=CurrentJD(),
56  const CEDateType& time_format=CEDateType::JD) ;
57  // Method for setting the dates from the Gregorian calendar dates
58  virtual void SetDate(std::vector<double> date) ;
59 
60  /***********************************************************
61  * Methods for getting the stored date in the various formats
62  ***********************************************************/
63  double GetDate(CEDateType time_format=CEDateType::JD) const;
64  virtual double JD() const;
65  virtual double MJD() const;
66  virtual double Gregorian() const;
67  virtual std::vector<double> GregorianVect();
68  int Year();
69  int Month();
70  int Day();
71  double DayFraction();
72 
73  /***********************************************************
74  * Methods for converting between different formats
75  ***********************************************************/
76  static double Gregorian2JD(double gregorian);
77  static double GregorianVect2JD(std::vector<double> gregorian);
78  static double Gregorian2MJD(double gregorian);
79  static double GregorianVect2MJD(std::vector<double> gregorian);
80  static double JD2MJD(double jd);
81  static double JD2Gregorian(const double jd);
82  static std::vector<double> JD2GregorianVect(double jd);
83  static double MJD2JD(double mjd);
84  static double MJD2Gregorian(double mjd);
85  static std::vector<double> MJD2GregorianVect(double mjd);
86  static void UTC2UT1(const double& mjd,
87  double* ut11,
88  double* ut12) ;
89  static void UTC2TT(const double& mjd,
90  double* tt1,
91  double* tt2) ;
92  static void UTC2TDB(const double& mjd,
93  double* tdb1,
94  double* tdb2) ;
95 
96  /***********************************************************
97  * Some useful helper methods
98  ***********************************************************/
99 
100  static double GetMJD2JDFactor();
101  static double dut1(const double& date,
102  const CEDateType& date_type=CEDateType::JD) ;
103  double dut1(void) const;
104  // static double dut1Error(double date, CEDateType date_type=CEDateType::JD) ;
105  // double dut1Error() ;
106  static double xpolar(const double& date,
107  const CEDateType& date_type=CEDateType::JD) ;
108  double xpolar(void) const;
109  static double ypolar(const double& date,
110  const CEDateType& date_type=CEDateType::JD) ;
111  double ypolar(void) const;
112 
113  static double GregorianVect2Gregorian(std::vector<double> gregorian) ;
114  static std::vector<double> Gregorian2GregorianVect(double gregorian) ;
115  virtual double GetSecondsSinceMidnight(const double& utc_offset=0.0) ;
116  virtual double GetTime(const double& utc_offset=0.0) const;
117  virtual double GetTime_UTC() const;
118  static double CurrentJD();
119  void SetReturnType(CEDateType return_type);
120 
121  /************************************************************
122  * Overloaded operators
123  ************************************************************/
124 
125  operator double();
126  operator double() const;
127 
128 private:
129 
130  void free_members(void);
131  void copy_members(const CEDate& other);
132  void init_members(void);
133 
134  /************************************************************
135  * Variables that hold the time information
136  ************************************************************/
137  double julian_date_ ;
138  double mod_julian_date_ ;
139  double gregorian_date_ ;
140  std::vector<double> gregorian_date_vect_ ;
143 
144 };
145 
146 
147 /**********************************************************************/
150 inline
151 double CEDate::JD(void) const
152 {
153  return julian_date_;
154 }
155 
156 
157 /**********************************************************************/
160 inline
161 double CEDate::MJD(void) const
162 {
163  return mod_julian_date_;
164 }
165 
166 
167 /**********************************************************************/
170 inline
171 double CEDate::Gregorian(void) const
172 {
173  return gregorian_date_;
174 }
175 
176 
177 /**********************************************************************/
180 inline
181 std::vector<double> CEDate::GregorianVect(void)
182 {
183  return gregorian_date_vect_;
184 }
185 
186 
187 /**********************************************************************/
190 inline
191 int CEDate::Year(void)
192 {
193  return gregorian_date_vect_[0];
194 }
195 
196 
197 /**********************************************************************/
200 inline
201 int CEDate::Month(void)
202 {
203  return gregorian_date_vect_[1];
204 }
205 
206 
207 /**********************************************************************/
210 inline
211 int CEDate::Day(void)
212 {
213  return gregorian_date_vect_[2];
214 }
215 
216 
217 /**********************************************************************/
220 inline
221 double CEDate::DayFraction(void)
222 {
223  return gregorian_date_vect_[3];
224 }
225 
226 
227 /**********************************************************************/
236 inline
237 double CEDate::GetMJD2JDFactor(void)
238 {
239  return DJM0;
240 }
241 
242 
243 /**********************************************************************/
247 inline
248 void CEDate::SetReturnType(CEDateType return_type)
249 {
250  return_type_ = return_type;
251 }
252 
253 
254 #endif /* CEDate_h */
CEDate::GregorianVect2Gregorian
static double GregorianVect2Gregorian(std::vector< double > gregorian)
Helper method for converting from Gregorian vector format to the non-vector format.
Definition: CEDate.cpp:545
CEDate::init_members
void init_members(void)
Initialize the data members.
Definition: CEDate.cpp:699
CEDate::GetTime_UTC
virtual double GetTime_UTC() const
Method for getting the current UTC time.
Definition: CEDate.cpp:621
CENamespace.h
CEDate::gregorian_date_
double gregorian_date_
Gregorian calendar date. Format as YYYYMMDD.DD.
Definition: CEDate.h:133
CEDate
Definition: CEDate.h:43
CEDate::CEDate
CEDate(double date=CurrentJD(), CEDateType date_format=CEDateType::JD)
Constructor from some date format.
Definition: CEDate.cpp:45
CEDateType
CEDateType
Date enum.
Definition: CEDate.h:38
CEDate::DayFraction
double DayFraction()
Get the Gregorian calendar day fraction.
Definition: CEDate.h:220
CEDate::copy_members
void copy_members(const CEDate &other)
Copy data members from another date object.
Definition: CEDate.cpp:686
CEDate::GetTime
virtual double GetTime(const double &utc_offset=0.0) const
Method for getting the current time.
Definition: CEDate.cpp:607
CEDate::Gregorian2GregorianVect
static std::vector< double > Gregorian2GregorianVect(double gregorian)
Helper method for converting from non-vector formatted Gregorian date to vector format Gregorian date...
Definition: CEDate.cpp:564
CEDate::xpolar
double xpolar(void) const
Polar motion (x) for a given date.
Definition: CEDate.cpp:507
CETime.h
CEDate::UTC2TDB
static void UTC2TDB(const double &mjd, double *tdb1, double *tdb2)
Convert the UTC MJD to TDB JD (useful for planet computations)
Definition: CEDate.cpp:429
CEDate::Gregorian2JD
static double Gregorian2JD(double gregorian)
Gregorian calendar date -> Julian date.
Definition: CEDate.cpp:287
CEDate::Gregorian2MJD
static double Gregorian2MJD(double gregorian)
Gregorian calendar formatted date -> Julian date converter.
Definition: CEDate.cpp:343
CEDate::free_members
void free_members(void)
Free data members.
Definition: CEDate.cpp:675
CEDate::mod_julian_date_
double mod_julian_date_
Modified Julian date formated.
Definition: CEDate.h:132
CEDate::GregorianVect2JD
static double GregorianVect2JD(std::vector< double > gregorian)
Gregorian calendar vector formatted date -> Julian date converter.
Definition: CEDate.cpp:307
CEDate::UTC2UT1
static void UTC2UT1(const double &mjd, double *ut11, double *ut12)
Convert the UTC MJD to UT1 JD.
Definition: CEDate.cpp:384
CEDate::MJD2GregorianVect
static std::vector< double > MJD2GregorianVect(double mjd)
Modified Julian date -> Gregorian calendar, vector formatted date.
Definition: CEDate.cpp:272
CEDate::julian_date_
double julian_date_
Julian date formated.
Definition: CEDate.h:131
JD
Julian Date.
Definition: CEDate.h:56
CEDate::gregorian_date_vect_
std::vector< double > gregorian_date_vect_
Vector containing the gregorian calendar date 0 - Year, 1 - Month, 2 - date, 3 - date fraction.
Definition: CEDate.h:134
CEDate::ypolar
double ypolar(void) const
Polar motion (y) for a given date.
Definition: CEDate.cpp:533
CEDate::~CEDate
virtual ~CEDate()
Destructor.
Definition: CEDate.cpp:80
CEDate::GetMJD2JDFactor
static double GetMJD2JDFactor()
Gets the stored SOFA Julian date to Mod Julian date factor 'DJM0'.
Definition: CEDate.h:236
CEDate::GregorianVect2MJD
static double GregorianVect2MJD(std::vector< double > gregorian)
Gregorian calendar vector formatted date -> Modified Julian date converter.
Definition: CEDate.cpp:362
CEDate::JD2GregorianVect
static std::vector< double > JD2GregorianVect(double jd)
Julian date -> modified Julian date conversion method.
Definition: CEDate.cpp:211
CEDate::GetDate
double GetDate(CEDateType time_format=CEDateType::JD) const
Return the date in a given format.
Definition: CEDate.cpp:155
MJD
Modified Julian Date.
Definition: CEDate.h:57
GREGORIAN
Gregorian calendar (year, month, day)
Definition: CEDate.h:58
CEDate::CurrentJD
static double CurrentJD()
Static method for getting the current Julian date.
Definition: CEDate.cpp:632
CEDate::Day
int Day()
Get the Gregorian calendar day.
Definition: CEDate.h:210
CEDate::SetDate
virtual void SetDate(const double &date=CurrentJD(), const CEDateType &time_format=CEDateType::JD)
Set the date based on an actual date and the desired time_format.
Definition: CEDate.cpp:107
CEDate::JD2Gregorian
static double JD2Gregorian(const double jd)
Julian date -> Gregorian calendar date conversion method.
Definition: CEDate.cpp:193
CEDate::MJD
virtual double MJD() const
Get the Modified Julian date represented by this object.
Definition: CEDate.h:160
CEDate::operator=
CEDate & operator=(const CEDate &other)
Copy assignent operator.
Definition: CEDate.cpp:90
CEDate::GetSecondsSinceMidnight
virtual double GetSecondsSinceMidnight(const double &utc_offset=0.0)
Method for getting the number of seconds since midnight.
Definition: CEDate.cpp:591
CEDate::GregorianVect
virtual std::vector< double > GregorianVect()
Get the Gregorian calendar date formatted as a vector.
Definition: CEDate.h:180
CEDate::Gregorian
virtual double Gregorian() const
Get the Gregorian calendar date formatted as a double.
Definition: CEDate.h:170
CEDate::SetReturnType
void SetReturnType(CEDateType return_type)
Set the return type from the overloaded 'operator double'.
Definition: CEDate.h:247
CEDate::dut1
double dut1(void) const
Return dut1 based on the date represented by this object.
Definition: CEDate.cpp:462
CEDate::UTC2TT
static void UTC2TT(const double &mjd, double *tt1, double *tt2)
Convert the UTC MJD to TT JD.
Definition: CEDate.cpp:405
CEDate::JD
virtual double JD() const
Get the Julian date represented by this object.
Definition: CEDate.h:150
CEDate::return_type_
CEDateType return_type_
what format the 'operator double' will return
Definition: CEDate.h:136
CEDate::MJD2JD
static double MJD2JD(double mjd)
Modified Julian date -> Julian date conversion method.
Definition: CEDate.cpp:241
CEDate::Year
int Year()
Get the Gregorian calendar year.
Definition: CEDate.h:190
CEDate::Month
int Month()
Get the Gregorian calendar month.
Definition: CEDate.h:200
CEDate::JD2MJD
static double JD2MJD(double jd)
Julian date -> modified Julian date conversion method.
Definition: CEDate.cpp:182
CEDate::MJD2Gregorian
static double MJD2Gregorian(double mjd)
Modified Julian date -> Gregorian calendar date conversion method.
Definition: CEDate.cpp:253