00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
#ifndef ArrayTime_CLASS
00028
#define ArrayTime_CLASS
00029
00030
#include <string>
00031
using std::string;
00032
00033
#include <vector>
00034
using std::vector;
00035
00036
#include <Interval.h>
00037
#include <UTCCorrection.h>
00038
00039
#ifndef WITHOUT_ACS
00040
#include <asdmIDLTypesC.h>
00041
using asdmIDLTypes::IDLArrayTime;
00042
#endif
00043
00044
#include "EndianStream.h"
00045
using asdm::EndianOSStream;
00046
using asdm::EndianISStream;
00047
00048
namespace asdm {
00049
00093 class ArrayTime :
public Interval {
00094
00095
public:
00096
00097
00098
const static int numberSigDigitsInASecond = 9;
00099
const static long long unitsInASecond = 1000000000LL;
00100
const static long long unitsInADayL = 86400000000000LL;
00101
const static double unitsInADay ;
00102
const static double unitsInADayDiv100 ;
00103
const static double julianDayOfBase ;
00104
const static long long julianDayOfBaseInUnitsInADayDiv100 = 2073600432000000000LL;
00105
00106
static bool isLeapYear(
int year);
00107
static double getMJD(
double jd);
00108
static double getJD(
double mjd);
00109
static ArrayTime add(
const ArrayTime &time,
const Interval &interval);
00110
static ArrayTime sub(
const ArrayTime &time,
const Interval &interval) ;
00111
static ArrayTime getArrayTime(
StringTokenizer &t) ;
00112
00113
ArrayTime();
00114
ArrayTime (
const string &s);
00115
ArrayTime(
const ArrayTime &t);
00116
#ifndef WITHOUT_ACS
00117
ArrayTime (
const IDLArrayTime &t);
00118
#endif
00119
ArrayTime(
int year,
int month,
double day);
00120
ArrayTime(
int year,
int month,
int day,
int hour,
int minute,
double second);
00121
ArrayTime(
double modifiedJulianDay);
00122
ArrayTime(
int modifiedJulianDay,
double secondsInADay);
00123
ArrayTime(
long long nanoseconds);
00124
00125
double getJD()
const;
00126
double getMJD()
const;
00127
double getJDI()
const;
00128
double getMJDI()
const;
00129
00130
#ifndef WITHOUT_ACS
00131
IDLArrayTime toIDLArrayTime()
const;
00132
#endif
00133
string toFITS()
const;
00134
00135
00139
void toBin(EndianOSStream& eoss);
00140
00146
static void toBin(
const vector<ArrayTime>& arrayTime, EndianOSStream& eoss);
00147
00153
static void toBin(
const vector<vector<ArrayTime> >& arrayTime, EndianOSStream& eoss);
00154
00160
static void toBin(
const vector<vector<vector<ArrayTime> > >& arrayTime, EndianOSStream& eoss);
00161
00168
static ArrayTime fromBin(EndianISStream& eiss);
00169
00176
static vector<ArrayTime>
from1DBin(EndianISStream & eiss);
00177
00184
static vector<vector<ArrayTime> >
from2DBin(EndianISStream & eiss);
00185
00192
static vector<vector<vector<ArrayTime> > >
from3DBin(EndianISStream & eiss);
00193
00194
int *getDateTime()
const;
00195
double getTimeOfDay()
const;
00196
int getDayOfWeek()
const;
00197
int getDayOfYear()
const;
00198 string timeOfDayToString()
const;
00199
double getLocalSiderealTime(
double longitudeInHours)
const;
00200
double getGreenwichMeanSiderealTime()
const;
00201
00202
static double unitToJD(
long long unit);
00203
static double unitToMJD(
long long unit);
00204
static long long jdToUnit(
double jd);
00205
static long long mjdToUnit(
double mjd);
00206
00207
static double utcCorrection(
double jd);
00208
00209
private:
00210
00211
static long long init(
int year,
int month,
double day);
00212
static long long init(
int year,
int month,
int day,
int hour,
int minute,
double second);
00213
long long FITSString(string t)
const;
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
static const UTCCorrection *UTCCorrectionTable;
00225
static const UTCCorrection UTCLast;
00226
00227 };
00228
00229
inline double ArrayTime::getJDI()
const {
return getJD();}
00230
inline double ArrayTime::getMJDI()const {
return getMJD();}
00231 }
00232
00233
#endif