added extension of signal activity with regards to light time travel

This commit is contained in:
Lovisa Hassler
2018-11-28 11:08:15 -05:00
parent fcb991b986
commit 01aefbee9a
4 changed files with 31 additions and 21 deletions

View File

@@ -42,26 +42,34 @@ namespace openspace {
}
bool SignalManager::signalParser(int index) {
std::string filename = _dataFiles[index];
std::ifstream ifs(filename);
nlohmann::json j = nlohmann::json::parse(ifs);
SignalManager::Signal structSignal;
SignalManager::Signal structSignal;
// TODO handle the start time/ end time with regard to light time travel
// ie. This has to be different for uplink and downlink
// light time travel should extend endtime for uplink, and start time for downlink
for (const auto& signalsInJson : j["Signals"]) {
structSignal.dishName = signalsInJson["facility"].get<std::string>();
structSignal.spacecraft = signalsInJson["projuser"].get<std::string>();
structSignal.endTime = signalsInJson["eot"].get<std::string>();
structSignal.startTime = signalsInJson["bot"].get<std::string>();
structSignal.direction = signalsInJson["direction"].get<std::string>();
structSignal.lightTravelTime = 71397.6659308273;
for (const auto& signalsInJson : j["Signals"]) {
structSignal.dishName = signalsInJson["facility"].get<std::string>();
structSignal.spacecraft = signalsInJson["projuser"].get<std::string>();
structSignal.endTime = signalsInJson["eot"].get<std::string>();
structSignal.startTime = signalsInJson["bot"].get<std::string>();
structSignal.direction = signalsInJson["direction"].get<std::string>();
structSignal.lightTravelTime = 71397.6659308273;
//Add signals to vector of signals
_signalData.signals.push_back(structSignal);
if (structSignal.direction == "uplink") {
structSignal.endTimeExtension = structSignal.lightTravelTime;
}
else if (structSignal.direction == "downlink") {
structSignal.startTimeExtension = structSignal.lightTravelTime;
}
else if (structSignal.direction == "both") {
structSignal.endTimeExtension = structSignal.lightTravelTime;
structSignal.startTimeExtension = structSignal.lightTravelTime;
}
//Add signal to vector of signals
_signalData.signals.push_back(structSignal);
}
return true;

View File

@@ -45,6 +45,8 @@ namespace openspace {
std::string direction;
std::string startTime;
std::string endTime;
double startTimeExtension = 0.0;
double endTimeExtension = 0.0;
double timeSinceStart = 0.0;
double lightTravelTime;
};

View File

@@ -291,8 +291,8 @@ void RenderableSignals::update(const UpdateData& data) {
for (int i = 0; i < SignalManager::_signalData.signals.size(); i++) {
SignalManager::Signal currentSignal = SignalManager::_signalData.signals[i];
if (isSignalActive(currentTime, currentSignal.startTime, currentSignal.endTime, currentSignal.lightTravelTime)) {
currentSignal.timeSinceStart = currentTime - Time::convertTime(currentSignal.startTime);
if (isSignalActive(currentTime, currentSignal)) {
currentSignal.timeSinceStart = currentTime - (Time::convertTime(currentSignal.startTime) - currentSignal.startTimeExtension);
pushSignalDataToVertexArray(currentSignal);
}
};
@@ -343,10 +343,10 @@ int RenderableSignals::findFileIndexForCurrentTime(double time, std::vector<doub
}
// Todo: handle signalIsSending, not only signalIsActive for the signal segments
bool RenderableSignals::isSignalActive(double currentTime, std::string signalStartTime,
std::string signalEndTime, double lightTravelTime) {
double startTimeInSeconds = SpiceManager::ref().ephemerisTimeFromDate(signalStartTime);
double endTimeInSeconds = SpiceManager::ref().ephemerisTimeFromDate(signalEndTime) + lightTravelTime;
bool RenderableSignals::isSignalActive(double currentTime, SignalManager::Signal signal) {
double startTimeInSeconds = SpiceManager::ref().ephemerisTimeFromDate(signal.startTime) - signal.startTimeExtension;
double endTimeInSeconds = SpiceManager::ref().ephemerisTimeFromDate(signal.endTime) + signal.endTimeExtension;
if (startTimeInSeconds <= currentTime && endTimeInSeconds >= currentTime)
return true;

View File

@@ -183,7 +183,7 @@ namespace openspace {
UniformCache(modelViewStation, modelViewSpacecraft, projection) _uniformCache;
/*Checks if the current time is within a signal's start and endtime*/
bool isSignalActive(double currentTime, std::string signalStartTime, std::string signalEndTime, double lightTravelTime);
bool isSignalActive(double currentTime, SignalManager::Signal signal);
/// Size buffer for signal vector
int _signalSizeBuffer = 10;