12#ifndef WSFORBITDETERMINATIONFUSION_HPP
13#define WSFORBITDETERMINATIONFUSION_HPP
15#include "wsf_space_export.h"
20#include "UtCallbackHolder.hpp"
21class UtECI_Conversion;
22class UtOrbitalPropagator;
23class UtOrbitalPropagatorBase;
59 static bool IsBearingElevation(
const UtMeasurementData& aTrack);
60 static bool IsLocation(
const UtMeasurementData& aTrack);
63 bool AnglesOnlyInitialGuess(
const UtVec3d& aUnitTargetVecECI_1,
64 const UtVec3d& aSiteLocECI_1,
65 const UtVec3d& aUnitTargetVecECI_2,
66 const UtVec3d& aSiteLocECI_2,
68 UtVec3d& aLocationECI_1,
69 UtVec3d& aLocationECI_2);
71 using MeasurementList = std::vector<const WsfMeasurement*>;
73 bool AnglesOnlyKinematicSolution(
const MeasurementList& aData,
74 std::vector<UtVec3d>& aLocECI,
75 std::vector<UtVec3d>& aVelECI);
76 void ComputeVelocities(
const MeasurementList& aData,
const std::vector<UtVec3d>& aLocECI, std::vector<UtVec3d>& aVelECI);
78 void ComputeCircularLocationsAndSpeeds(
const UtVec3d& aUnitTargetVecECI_1,
79 const UtVec3d& aSiteLocECI_1,
80 const UtVec3d& aUnitTargetVecECI_2,
81 const UtVec3d& aSiteLocECI_2,
84 UtVec3d& aLocationECI_1,
85 UtVec3d& aLocationECI_2,
86 double& aGeometricSpeed,
87 double& aGravitationalSpeed);
88 void ComputeLambertf_g(
const UtVec3d& aLocECI,
const UtVec3d& aVelECI,
double aDeltaT,
double& aF,
double& aG);
90 bool CreateFilterOnTrack(
double aSimTime,
WsfLocalTrack& aLocalTrack, UtOrbitalPropagatorBase& aPropagator);
92 void ConvertBearingElevation(
const UtMeasurementData& aBearingElevationTrack,
93 UtVec3d& aUnitTargetVecECI,
94 UtVec3d& aSiteLocationECI);
96 void ConvertLocation(
const UtECI_Conversion& aConversion,
const UtMeasurementData& aLocationTrack, UtVec3d& aTargetLocECI);
98 MeasurementList GetFusionCandidates(
WsfLocalTrack& aLocalTrack,
const WsfTrack& aNonLocalTrack,
bool aGetAnglesCandidates);
100 bool FuseInitialLocations(
double aSimTime,
WsfLocalTrack& aLocalTrack,
const WsfTrack& aNonLocalTrack);
104 void GetSimCalendarTime(
double aSimTime, UtCalendar& aSimCalendarTime);
106 bool UpdateTrackFromEstimate(
double aSimTime,
WsfLocalTrack& aLocalTrack, UtMeasurementData& aEstimate);
108 void PrintAnglesOnlyData(
const WsfTrack& aTrack,
109 const UtVec3d& aLocationECI,
110 const UtVec3d& aVelocityECI,
111 double aRange)
const;
113 UtOrbitalPropagatorBase* GetPropagator(
const WsfTrack& aTrack);
115 UtOrbitalPropagatorBase* AddPropagator(
WsfTrack& aTrack);
117 const ut::CentralBody& GetCentralBody()
const;
120 unsigned mNumberOfAnglesMeasurementsNeeded;
121 double mLambertConvergenceTolerance;
122 double mRangeErrorFactor;
123 unsigned mAnglesOnlyMaxIterations;
124 double mAnglesOnlyLinearTolerance;
bool Initialize(WsfTrackManager *aTrackManagerPtr) override
Perform any necessary initialization.
Definition WsfDefaultFusion.cpp:72
bool ProcessInput(UtInput &aInput) override
Definition WsfDefaultFusion.cpp:56
WsfDefaultFusion(const WsfScenario &aScenario, bool aIsWeightedAverage=false)
Definition WsfDefaultFusion.cpp:43
void ReviewTrack(WsfLocalTrack &aLocalTrack) override
Definition WsfDefaultFusion.cpp:87
bool UpdateLocalTrackFromNonLocalTrack(double aSimTime, WsfLocalTrack &aLocalTrack, const WsfTrack &aNonLocalTrack) override
Definition WsfDefaultFusion.cpp:105
WsfFusionStrategy()
Definition WsfFusionStrategy.cpp:111
Definition WsfSensorResult.hpp:129
Definition WsfLocalTrack.hpp:32
A measurement class that provides WSF-specific interfaces and data extrapolation.
Definition WsfMeasurement.hpp:32
WsfFusionStrategy * Clone() const override
Create a clone of "this" object.
Definition WsfOrbitDeterminationFusion.hpp:42
WsfOrbitDeterminationFusion & operator=(const WsfOrbitDeterminationFusion &)=delete
WsfOrbitDeterminationFusion(const WsfScenario &aScenario)
Definition WsfOrbitDeterminationFusion.cpp:115
bool UpdateLocalResultFromNonLocalResult(double aSimTime, WsfLocalSensorResult &aLocalResult, const WsfSensorResult &aNonLocalResult) override
Definition WsfOrbitDeterminationFusion.hpp:47
~WsfOrbitDeterminationFusion() override=default
WsfOrbitDeterminationFusion(const WsfOrbitDeterminationFusion &aSrc)=default
Implement an OrbitDeterminationKalmanFilter as a WsfFilter.
Definition WsfOrbitDeterminationKalmanFilter.hpp:26
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfSensorResult.hpp:27
Definition WsfTrackManager.hpp:62
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120