From feded18dd07ea51d60470f2c8dae3207f4b0f3a0 Mon Sep 17 00:00:00 2001 From: Agnes Heppich Date: Thu, 27 Dec 2018 12:14:49 -0500 Subject: [PATCH] speed up, check if previous index is same as current --- modules/dsn/managers/radecmanager.cpp | 23 +++++++++++--------- modules/dsn/managers/radecmanager.h | 5 ++++- modules/dsn/translation/radectranslation.cpp | 4 ++-- modules/dsn/translation/radectranslation.h | 2 +- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/modules/dsn/managers/radecmanager.cpp b/modules/dsn/managers/radecmanager.cpp index b5a2060d10..07806f16c2 100644 --- a/modules/dsn/managers/radecmanager.cpp +++ b/modules/dsn/managers/radecmanager.cpp @@ -62,24 +62,27 @@ namespace openspace { int idx = DataFileHelper::findFileIndexForCurrentTime(time, timeDoubles); //If index is same as previous, don't parse the data again - if(idx != prevIndex){ - prevIndex = idx; - + if(idx != prevFileIndex){ + prevFileIndex = idx; updateRadecData(idx); - int index = DataFileHelper::findFileIndexForCurrentTime(time, minuteTimes); - updateActiveMinute(index); + if (positions.size()) { + int index = DataFileHelper::findFileIndexForCurrentTime(time, minuteTimes); + updateActiveMinute(index); + } } - } if (positions.size() && !correctUpdateInterval(time)) { //Compensate for light travel time to the spacecraft int idx = DataFileHelper::findFileIndexForCurrentTime(time, minuteTimes); - updateActiveMinute(idx); + if (idx != prevMinIndex) { + prevMinIndex = idx; + updateActiveMinute(idx); - double lighttimeCompensation = positions[idx].lightTravelTime; - int compensatedIdx = DataFileHelper::findFileIndexForCurrentTime(time + lighttimeCompensation, minuteTimes); - getPositionInVector(compensatedIdx); + double lighttimeCompensation = positions[idx].lightTravelTime; + int compensatedIdx = DataFileHelper::findFileIndexForCurrentTime(time + lighttimeCompensation, minuteTimes); + getPositionInVector(compensatedIdx); + } } diff --git a/modules/dsn/managers/radecmanager.h b/modules/dsn/managers/radecmanager.h index 9714af97a1..b7ba6c2616 100644 --- a/modules/dsn/managers/radecmanager.h +++ b/modules/dsn/managers/radecmanager.h @@ -45,7 +45,10 @@ namespace openspace { mutable double lightTravelTime; //Downlink light time travel time in seconds mutable int lightTravelHours; }; - mutable int prevIndex; + + //Used to determine if we need to search for new data + mutable int prevFileIndex; + mutable int prevMinIndex; mutable std::vector positions; mutable std::vector minuteTimes; diff --git a/modules/dsn/translation/radectranslation.cpp b/modules/dsn/translation/radectranslation.cpp index d9baf79677..d92c33bbe2 100644 --- a/modules/dsn/translation/radectranslation.cpp +++ b/modules/dsn/translation/radectranslation.cpp @@ -166,7 +166,7 @@ glm::dvec3 RadecTranslation::position(const UpdateData& data) const{ if (!haveDataForTime) { LWARNING(fmt::format("No positioning data available for {} at time {}", radecManager.objectIdentifier.c_str(), data.time.UTC())); - return radecToCartesianCoordinates({ 0,0,0 }); + return _position;//radecToCartesianCoordinates({ 0,0,0 }); } else { glm::dvec3 pos = radecManager.getPosForTime(data.time.j2000Seconds()); @@ -174,7 +174,7 @@ glm::dvec3 RadecTranslation::position(const UpdateData& data) const{ return _position; } } - else return radecToCartesianCoordinates({ 0,0,0 }); + else return _position; } } // namespace openspace diff --git a/modules/dsn/translation/radectranslation.h b/modules/dsn/translation/radectranslation.h index 6c1ce4c331..b8b7b6fb78 100644 --- a/modules/dsn/translation/radectranslation.h +++ b/modules/dsn/translation/radectranslation.h @@ -57,7 +57,7 @@ private: ///Transforms the cartesian coordinates with a rotation and a translation glm::dvec3 radecToCartesianCoordinates(glm::vec3 pos) const; ///Translated position - mutable glm::vec3 _position; + mutable glm::dvec3 _position = {0.0,0.0,0.0}; ///Determines between what dates there is data available. Set in the asset file. double _dataStart, _dataEnd; ///Determines how many minutes between updates in positioning data