Skip to content

Commit

Permalink
Merge pull request #140 from simon-van-hulle/feature/rangeObservations
Browse files Browse the repository at this point in the history
Exposing functionality for reading txt tracking files
  • Loading branch information
DominicDirkx authored Mar 8, 2024
2 parents 5b9fbdc + 3878658 commit dcf7c5b
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 3 deletions.
4 changes: 3 additions & 1 deletion tudatpy/data/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@
"read_matrix_history_from_file",
"missile_DATCOM_data",
"DynamicCoefficientNames",
"StaticCoefficientNames"
"StaticCoefficientNames",
"read_tracking_txt_file",
"TrackingTxtFileContents",
]
74 changes: 73 additions & 1 deletion tudatpy/kernel/expose_io.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "tudat/io/solarActivityData.h"
#include "tudat/io/readOdfFile.h"
#include "tudat/io/readTabulatedWeatherData.h"
#include "tudat/io/readTrackingTxtFile.h"

#include <pybind11/stl.h>

Expand Down Expand Up @@ -180,7 +181,78 @@ void expose_io(py::module &m) {
py::arg( "interpolator_settings" ) = tudat::interpolators::linearInterpolation( ),
py::arg( "ground_stations_per_complex" ) = tudat::simulation_setup::getDefaultDsnStationNamesPerComplex( ),
py::arg( "body_with_ground_stations_name" ) = "Earth",
get_docstring("set_dsn_weather_data_in_ground_stations").c_str() );
get_docstring("set_dsn_weather_data_in_ground_stations").c_str( ) );

m.def("read_tracking_txt_file",
&tio::createTrackingTxtFileContents,
py::arg("file_name"),
py::arg("column_types"),
py::arg("comment_symbol") = '#',
py::arg("value_separators") = ",:\t ",
get_docstring("read_tracking_txt_file").c_str( ) );

py::class_<tudat::input_output::TrackingTxtFileContents,
std::shared_ptr<tudat::input_output::TrackingTxtFileContents>>(
m, "TrackingTxtFileContents",get_docstring("TrackingTxtFileContents").c_str() )
.def(py::init<const std::string, const std::vector<std::string>, const char, const std::string>(),
py::arg("file_name"),
py::arg("column_types"),
py::arg("comment_symbol") = '#',
py::arg("value_separators") = ",:\t ",
get_docstring("TrackingTxtFileContents").c_str( ) )
.def_property_readonly("column_field_types",
&tio::TrackingTxtFileContents::getRawColumnTypes,
get_docstring("TrackingTxtFileContents.column_field_types").c_str( ) )
.def_property_readonly("double_datamap",
&tio::TrackingTxtFileContents::getDoubleDataMap,
get_docstring("TrackingTxtFileContents.double_datamap").c_str( ) )
.def_property_readonly("raw_datamap",
&tio::TrackingTxtFileContents::getRawDataMap,
get_docstring("TrackingTxtFileContents.raw_datamap").c_str( ) )
.def_property_readonly("num_rows",
&tio::TrackingTxtFileContents::getNumRows,
get_docstring("TrackingTxtFileContents.num_rows").c_str( ) );

py::enum_<tudat::input_output::TrackingDataType>(m, "TrackingDataType",
get_docstring("TrackingDataType").c_str())
.value("year", tudat::input_output::TrackingDataType::year, get_docstring("TrackingDataType.year").c_str())
.value("month", tudat::input_output::TrackingDataType::month, get_docstring("TrackingDataType.month").c_str())
.value("day", tudat::input_output::TrackingDataType::day, get_docstring("TrackingDataType.day").c_str())
.value("hour", tudat::input_output::TrackingDataType::hour, get_docstring("TrackingDataType.hour").c_str())
.value("minute", tudat::input_output::TrackingDataType::minute, get_docstring("TrackingDataType.minute").c_str())
.value("second", tudat::input_output::TrackingDataType::second, get_docstring("TrackingDataType.second").c_str())
.value("time_tag_delay", tudat::input_output::TrackingDataType::time_tag_delay, get_docstring("TrackingDataType.time_tag_delay").c_str())
.value("observation_time_scale", tudat::input_output::TrackingDataType::observation_time_scale, get_docstring("TrackingDataType.observation_time_scale").c_str())
.value("file_name", tudat::input_output::TrackingDataType::file_name, get_docstring("TrackingDataType.file_name").c_str())
.value("n_way_light_time", tudat::input_output::TrackingDataType::n_way_light_time, get_docstring("TrackingDataType.n_way_light_time").c_str())
.value("light_time_measurement_delay", tudat::input_output::TrackingDataType::light_time_measurement_delay, get_docstring("TrackingDataType.light_time_measurement_delay").c_str())
.value("light_time_measurement_accuracy", tudat::input_output::TrackingDataType::light_time_measurement_accuracy, get_docstring("TrackingDataType.light_time_measurement_accuracy").c_str())
.value("dsn_transmitting_station_nr", tudat::input_output::TrackingDataType::dsn_transmitting_station_nr, get_docstring("TrackingDataType.dsn_transmitting_station_nr").c_str())
.value("dsn_receiving_station_nr", tudat::input_output::TrackingDataType::dsn_receiving_station_nr, get_docstring("TrackingDataType.dsn_receiving_station_nr").c_str())
.value("observation_body", tudat::input_output::TrackingDataType::observation_body, get_docstring("TrackingDataType.observation_body").c_str())
.value("observed_body", tudat::input_output::TrackingDataType::observed_body, get_docstring("TrackingDataType.observed_body").c_str())
.value("spacecraft_id", tudat::input_output::TrackingDataType::spacecraft_id, get_docstring("TrackingDataType.spacecraft_id").c_str())
.value("planet_nr", tudat::input_output::TrackingDataType::planet_nr, get_docstring("TrackingDataType.planet_nr").c_str())
.value("tdb_time_j2000", tudat::input_output::TrackingDataType::tdb_time_j2000, get_docstring("TrackingDataType.tdb_time_j2000").c_str())
.value("tdb_spacecraft_j2000", tudat::input_output::TrackingDataType::tdb_spacecraft_j2000, get_docstring("TrackingDataType.tdb_spacecraft_j2000").c_str())
.value("x_planet_frame", tudat::input_output::TrackingDataType::x_planet_frame, get_docstring("TrackingDataType.x_planet_frame").c_str())
.value("y_planet_frame", tudat::input_output::TrackingDataType::y_planet_frame, get_docstring("TrackingDataType.y_planet_frame").c_str())
.value("z_planet_frame", tudat::input_output::TrackingDataType::z_planet_frame, get_docstring("TrackingDataType.z_planet_frame").c_str())
.value("vx_planet_frame", tudat::input_output::TrackingDataType::vx_planet_frame, get_docstring("TrackingDataType.vx_planet_frame").c_str())
.value("vy_planet_frame", tudat::input_output::TrackingDataType::vy_planet_frame, get_docstring("TrackingDataType.vy_planet_frame").c_str())
.value("vz_planet_frame", tudat::input_output::TrackingDataType::vz_planet_frame, get_docstring("TrackingDataType.vz_planet_frame").c_str())
.value("residual_de405", tudat::input_output::TrackingDataType::residual_de405, get_docstring("TrackingDataType.residual_de405").c_str())
.value("spacecraft_transponder_delay", tudat::input_output::TrackingDataType::spacecraft_transponder_delay, get_docstring("TrackingDataType.spacecraft_transponder_delay").c_str())
.value("uplink_frequency", tudat::input_output::TrackingDataType::uplink_frequency, get_docstring("TrackingDataType.uplink_frequency").c_str())
.value("downlink_frequency", tudat::input_output::TrackingDataType::downlink_frequency, get_docstring("TrackingDataType.downlink_frequency").c_str())
.value("signal_to_noise", tudat::input_output::TrackingDataType::signal_to_noise, get_docstring("TrackingDataType.signal_to_noise").c_str())
.value("spectral_max", tudat::input_output::TrackingDataType::spectral_max, get_docstring("TrackingDataType.spectral_max").c_str())
.value("doppler_measured_frequency", tudat::input_output::TrackingDataType::doppler_measured_frequency, get_docstring("TrackingDataType.doppler_measured_frequency").c_str())
.value("doppler_base_frequency", tudat::input_output::TrackingDataType::doppler_base_frequency, get_docstring("TrackingDataType.doppler_base_frequency").c_str())
.value("doppler_noise", tudat::input_output::TrackingDataType::doppler_noise, get_docstring("TrackingDataType.doppler_noise").c_str())
.value("doppler_bandwidth", tudat::input_output::TrackingDataType::doppler_bandwidth, get_docstring("TrackingDataType.doppler_bandwidth").c_str())
.value("vlbi_station_name", tudat::input_output::TrackingDataType::vlbi_station_name, get_docstring("TrackingDataType.vlbi_station_name").c_str())
.export_values();
};

}// namespace io
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "tudat/simulation/estimation_setup/createObservationModel.h"
#include "tudat/simulation/estimation_setup/observationSimulationSettings.h"
#include "tudat/simulation/estimation_setup/processOdfFile.h"
#include "tudat/simulation/estimation_setup/processTrackingTxtFile.h"

#include "tudatpy/docstrings.h"
#include "tudatpy/scalarTypes.h"
Expand Down Expand Up @@ -744,7 +745,15 @@ void expose_observation_setup(py::module &m) {
&tss::ObservationSimulationSettings<double>::getObservationNoiseFunction,
py::overload_cast< const std::function< double( const double ) >& >(
&tss::ObservationSimulationSettings<double>::setObservationNoiseFunction ),
get_docstring("ObservationSimulationSettings.noise_function").c_str() );
get_docstring("ObservationSimulationSettings.noise_function").c_str() )
.def_property("observable_type",
&tss::ObservationSimulationSettings<double>::getObservableType,
&tss::ObservationSimulationSettings<double>::setObservableType,
get_docstring("ObservationSimulationSettings.observable_type").c_str() )
.def_property_readonly("link_ends",
&tss::ObservationSimulationSettings<double>::getLinkEnds,
get_docstring("ObservationSimulationSettings.link_ends").c_str() );



py::class_<tss::TabulatedObservationSimulationSettings<double>,
Expand Down Expand Up @@ -1137,6 +1146,32 @@ void expose_observation_setup(py::module &m) {
{ tom::dsn_one_way_averaged_doppler, tom::one_way_differenced_range } },
get_docstring("change_simulation_settings_observable_types").c_str() );

/////////////////////////////////////////////////////////////////////////////////////////////////
// Tracking Txt OBSERVATIONS
/////////////////////////////////////////////////////////////////////////////////////////////////

m.def("create_tracking_txtfile_observation_collection",
py::overload_cast<
const std::shared_ptr<tudat::input_output::TrackingTxtFileContents>,
const std::string,
const std::vector<tom::ObservableType>,
const std::map<std::string, Eigen::Vector3d>,
const tom::ObservationAncilliarySimulationSettings&,
std::pair<TIME_TYPE, TIME_TYPE>>(&tom::createTrackingTxtFileObservationCollection<double, TIME_TYPE>),
py::arg("raw_tracking_txtfile_contents"),
py::arg("spacecraft_name"),
py::arg("observable_types_to_process") = std::vector<tom::ObservableType>(),
py::arg("earth_fixed_ground_station_positions") = tss::getApproximateDsnGroundStationPositions(),
py::arg("ancillary_settings") = tom::ObservationAncilliarySimulationSettings(),
py::arg("start_and_end_times_to_process") = std::make_pair<TIME_TYPE, TIME_TYPE>(TUDAT_NAN, TUDAT_NAN),
get_docstring("create_tracking_txtfile_observation_collection").c_str());

m.def("observation_settings_from_collection",
py::overload_cast<std::shared_ptr<tom::ObservationCollection<double, TIME_TYPE> >>(
&tss::getObservationSimulationSettingsFromObservations<double, TIME_TYPE>),
py::arg("observed_observation_collection"),
get_docstring("observation_settings_from_collection").c_str()
);

//////////////////////////////////////////// DEPRECATED ////////////////////////////////////////////

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
continuous_arc_simulation_settings, \
continuous_arc_simulation_settings_list, \
create_odf_observed_observation_collection, \
create_tracking_txtfile_observation_collection, \
doppler_ancilliary_settings, \
dsn_default_turnaround_ratios, \
dsn_n_way_doppler_ancilliary_settings, \
Expand Down

0 comments on commit dcf7c5b

Please sign in to comment.