-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathasteroid_despatch.cpp
executable file
·88 lines (71 loc) · 2.55 KB
/
asteroid_despatch.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "asteroid_despatch.h"
const double AsteroidDespatchTracker:: DepartureJulianday_ = 2456994.764023; // 2014/12/03 06:20:12 UTC
const double AsteroidDespatchTracker:: DespatchTransmitterFrequency_ = 437.325;
const double AsteroidDespatchTracker:: SecondsMorseEnd_ = 9.0 * 3600.0;
const double AsteroidDespatchTracker:: SecondsBaudotEnd_ = 108.0 * 3600.0;
const double AsteroidDespatchTracker:: SecondsBeaconEnd_ = (30.0 * 24.0) * 3600.0;
AsteroidDespatchTracker:: AsteroidDespatchTracker (void): AsteroidTracker ()
{
Planet:: OrbitInfo despatch_orbit;
despatch_orbit.epochJDay = 2457023.5; // 2015/1/01 00:00:00 UTC
despatch_orbit.keplerian.a = 1.003881127; // [AU]
despatch_orbit.keplerian.e = 0.08741828512; // [-]
despatch_orbit.keplerian.i = 6.796995362; // [deg]
despatch_orbit.keplerian.w = 96.90057903; // [deg]
despatch_orbit.keplerian.W = 250.5520871; // [deg]
despatch_orbit.keplerian.M0 = 101.6280436; // [deg]
AsteroidTracker:: setAsteroidOrbitInfo (despatch_orbit);
}
AsteroidDespatchTracker:: ~AsteroidDespatchTracker (void)
{
//
}
int AsteroidDespatchTracker:: setTargetUnixtime (double unixtime)
{
double target_julianday;
tf::convertUnixtime2Jd (&target_julianday, unixtime);
if (target_julianday < DepartureJulianday_)
{
return 3;
}
return AsteroidTracker:: setTargetUnixtime (unixtime);
}
void AsteroidDespatchTracker:: getDepartureTime (double *unixtime) const
{
double departure_unixtime;
tf::convertJd2Unixtime (&departure_unixtime, DepartureJulianday_);
*unixtime = departure_unixtime;
}
void AsteroidDespatchTracker:: getDespatchDownlinkFrequency (double *MHz) const
{
double down, up;
SpaceObjectTracker:: getTargetDopplerCoeff (&down, &up);
*MHz = down * DespatchTransmitterFrequency_;
}
void AsteroidDespatchTracker:: getDespatchPhase (std:: string *phase) const
{
double seconds_from_departure;
calcSecondsFromDeparture (&seconds_from_departure);
if (seconds_from_departure > SecondsBeaconEnd_) {
*phase = "radio_stop";
}
else if (seconds_from_departure > SecondsBaudotEnd_) {
*phase = "3";
}
else if (seconds_from_departure > SecondsMorseEnd_) {
*phase = "2";
}
else if (seconds_from_departure > 0.0) {
*phase = "1";
}
else {
*phase = "not_defined";
}
}
void AsteroidDespatchTracker:: calcSecondsFromDeparture (double* second) const
{
const double SecondsDay = 24.0 * 3600.0;
double target_julianday;
AsteroidTracker::getTargetTime (&target_julianday);
*second = (target_julianday - DepartureJulianday_) * SecondsDay;
}