diff --git a/CMakeLists.txt b/CMakeLists.txt index d10aba394..5e28b83a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,19 @@ if(NOT DEFINED C2A_NAME) set(C2A_NAME "c2a_oss") endif() +## Directory path for ini files +if(NOT DEFINED INI_FILE_DIR_FROM_EXE) + set(INI_FILE_DIR_FROM_EXE ../../data/sample/initialize_files) +endif() + +if(NOT DEFINED EXT_LIB_DIR_FROM_EXE) + set(EXT_LIB_DIR_FROM_EXE ../../${EXT_LIB_DIR}) +endif() + +if(NOT DEFINED CORE_DIR_FROM_EXE) + set(CORE_DIR_FROM_EXE ../../../s2e-core) +endif() + ## options to use C2A if(USE_C2A) option(BUILD_64BIT OFF) # force to build with 32bit diff --git a/common.cmake b/common.cmake index 03d9a1f11..fcc983a70 100644 --- a/common.cmake +++ b/common.cmake @@ -7,6 +7,11 @@ set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS FALSE) target_include_directories(${PROJECT_NAME} PUBLIC ${S2E_DIR}/src) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) +# Directory path setting +target_compile_definitions(${PROJECT_NAME} PRIVATE "INI_FILE_DIR_FROM_EXE=\"${INI_FILE_DIR_FROM_EXE}\"") +target_compile_definitions(${PROJECT_NAME} PRIVATE "EXT_LIB_DIR_FROM_EXE=\"${EXT_LIB_DIR_FROM_EXE}\"") +target_compile_definitions(${PROJECT_NAME} PRIVATE "CORE_DIR_FROM_EXE=\"${CORE_DIR_FROM_EXE}\"") + # Compile option if(MSVC) target_compile_options(${PROJECT_NAME} PUBLIC "/MP") # multi process build diff --git a/data/sample/initialize_files/sample_disturbance.ini b/data/sample/initialize_files/sample_disturbance.ini index 32da0bd19..7a7dd9690 100644 --- a/data/sample/initialize_files/sample_disturbance.ini +++ b/data/sample/initialize_files/sample_disturbance.ini @@ -3,7 +3,7 @@ calculation = DISABLE logging = ENABLE degree = 4 -coefficients_file_path = ../../../ExtLibraries/GeoPotential/egm96_to360.ascii +coefficients_file_path = EXT_LIB_DIR_FROM_EXE/GeoPotential/egm96_to360.ascii [MAGNETIC_DISTURBANCE] diff --git a/data/sample/initialize_files/sample_gnss.ini b/data/sample/initialize_files/sample_gnss.ini index 8b978c033..812d9c668 100644 --- a/data/sample/initialize_files/sample_gnss.ini +++ b/data/sample/initialize_files/sample_gnss.ini @@ -1,5 +1,5 @@ [GNSS_SATELLIES] -directory_path = ../../../ExtLibraries/sp3/ +directory_path = EXT_LIB_DIR_FROM_EXE/sp3/ calculation = DISABLE true_position_file_sort = IGS diff --git a/data/sample/initialize_files/sample_ground_station.ini b/data/sample/initialize_files/sample_ground_station.ini index e238f6220..ab57e1164 100644 --- a/data/sample/initialize_files/sample_ground_station.ini +++ b/data/sample/initialize_files/sample_ground_station.ini @@ -8,5 +8,5 @@ height_m = 3.4 elevation_limit_angle_deg = 5.0 [COMPONENT_FILES] -ground_station_antenna_file = ../../data/sample/initialize_files/components/ground_station_antenna.ini -ground_station_calculator_file = ../../data/sample/initialize_files/components/ground_station_calculator.ini +ground_station_antenna_file = INI_FILE_DIR_FROM_EXE/components/ground_station_antenna.ini +ground_station_calculator_file = INI_FILE_DIR_FROM_EXE/components/ground_station_calculator.ini diff --git a/data/sample/initialize_files/sample_local_environment.ini b/data/sample/initialize_files/sample_local_environment.ini index e2ca4bd8d..6c6e55a95 100644 --- a/data/sample/initialize_files/sample_local_environment.ini +++ b/data/sample/initialize_files/sample_local_environment.ini @@ -1,7 +1,7 @@ [MAGNETIC_FIELD_ENVIRONMENT] calculation = ENABLE logging = ENABLE -coefficient_file = ../../../s2e-core/src/library/external/igrf/igrf13.coef +coefficient_file = CORE_DIR_FROM_EXE/src/library/external/igrf/igrf13.coef magnetic_field_random_walk_standard_deviation_nT = 10.0 magnetic_field_random_walk_limit_nT = 400.0 magnetic_field_white_noise_standard_deviation_nT = 50.0 @@ -21,7 +21,7 @@ logging = ENABLE // NRLMSISE00: NRLMSISE00 model // HARRIS_PRIESTER: Harris-Priester model model = STANDARD -nrlmsise00_table_file = ../../../ExtLibraries/nrlmsise00/table/SpaceWeather-v1.2.txt +nrlmsise00_table_file = EXT_LIB_DIR_FROM_EXE/nrlmsise00/table/SpaceWeather-v1.2.txt // Whether using user-defined f10.7 and ap value // Ref of f10.7: https://www.swpc.noaa.gov/phenomena/f107-cm-radio-emissions // Ref of ap: http://wdc.kugi.kyoto-u.ac.jp/kp/kpexp-j.html diff --git a/data/sample/initialize_files/sample_satellite.ini b/data/sample/initialize_files/sample_satellite.ini index 471ce501f..f5f3dc3cc 100644 --- a/data/sample/initialize_files/sample_satellite.ini +++ b/data/sample/initialize_files/sample_satellite.ini @@ -126,22 +126,22 @@ error_tolerance = 0.0001 calculation = DISABLE debug = DISABLE solar_calc_setting = DISABLE -thermal_file_directory = ../../data/sample/initialize_files/thermal_csv_files/ +thermal_file_directory = INI_FILE_DIR_FROM_EXE/thermal_csv_files/ [SETTING_FILES] -local_environment_file = ../../data/sample/initialize_files/sample_local_environment.ini -disturbance_file = ../../data/sample/initialize_files/sample_disturbance.ini -structure_file = ../../data/sample/initialize_files/sample_structure.ini +local_environment_file = INI_FILE_DIR_FROM_EXE/sample_local_environment.ini +disturbance_file = INI_FILE_DIR_FROM_EXE/sample_disturbance.ini +structure_file = INI_FILE_DIR_FROM_EXE/sample_structure.ini [COMPONENT_FILES] -gyro_file = ../../data/sample/initialize_files/components/gyro_sensor.ini -magnetometer_file = ../../data/sample/initialize_files/components/magnetometer.ini -stt_file = ../../data/sample/initialize_files/components/star_sensor.ini -ss_file = ../../data/sample/initialize_files/components/sun_sensor.ini -gnss_file = ../../data/sample/initialize_files/components/gnss_receiver.ini -magetorquer_file = ../../data/sample/initialize_files/components/magnetorquer.ini -rw_file = ../../data/sample/initialize_files/components/reaction_wheel.ini -thruster_file = ../../data/sample/initialize_files/components/thruster.ini -force_generator_file = ../../data/sample/initialize_files/components/force_generator.ini -torque_generator_file = ../../data/sample/initialize_files/components/torque_generator.ini -antenna_file = ../../data/sample/initialize_files/components/spacecraft_antenna.ini +gyro_file = INI_FILE_DIR_FROM_EXE/components/gyro_sensor.ini +magnetometer_file = INI_FILE_DIR_FROM_EXE/components/magnetometer.ini +stt_file = INI_FILE_DIR_FROM_EXE/components/star_sensor.ini +ss_file = INI_FILE_DIR_FROM_EXE/components/sun_sensor.ini +gnss_file = INI_FILE_DIR_FROM_EXE/components/gnss_receiver.ini +magetorquer_file = INI_FILE_DIR_FROM_EXE/components/magnetorquer.ini +rw_file = INI_FILE_DIR_FROM_EXE/components/reaction_wheel.ini +thruster_file = INI_FILE_DIR_FROM_EXE/components/thruster.ini +force_generator_file = INI_FILE_DIR_FROM_EXE/components/force_generator.ini +torque_generator_file = INI_FILE_DIR_FROM_EXE/components/torque_generator.ini +antenna_file = INI_FILE_DIR_FROM_EXE/components/spacecraft_antenna.ini diff --git a/data/sample/initialize_files/sample_simulation_base.ini b/data/sample/initialize_files/sample_simulation_base.ini index c9a814ef1..5f27bbc5a 100644 --- a/data/sample/initialize_files/sample_simulation_base.ini +++ b/data/sample/initialize_files/sample_simulation_base.ini @@ -105,15 +105,15 @@ selected_body_name(10) = PLUTO [CSPICE_KERNELS] // CSPICE Kernel files definition -tls = ../../../ExtLibraries/cspice/generic_kernels/lsk/naif0010.tls -tpc1 = ../../../ExtLibraries/cspice/generic_kernels/pck/de-403-masses.tpc -tpc2 = ../../../ExtLibraries/cspice/generic_kernels/pck/gm_de431.tpc -tpc3 = ../../../ExtLibraries/cspice/generic_kernels/pck/pck00010.tpc -bsp = ../../../ExtLibraries/cspice/generic_kernels/spk/planets/de430.bsp +tls = EXT_LIB_DIR_FROM_EXE/cspice/generic_kernels/lsk/naif0010.tls +tpc1 = EXT_LIB_DIR_FROM_EXE/cspice/generic_kernels/pck/de-403-masses.tpc +tpc2 = EXT_LIB_DIR_FROM_EXE/cspice/generic_kernels/pck/gm_de431.tpc +tpc3 = EXT_LIB_DIR_FROM_EXE/cspice/generic_kernels/pck/pck00010.tpc +bsp = EXT_LIB_DIR_FROM_EXE/cspice/generic_kernels/spk/planets/de430.bsp [HIPPARCOS_CATALOGUE] -catalogue_file_path = ../../../ExtLibraries/HipparcosCatalogue/hip_main.csv +catalogue_file_path = EXT_LIB_DIR_FROM_EXE/HipparcosCatalogue/hip_main.csv max_magnitude = 3.0 // Max magnitude to read from Hip catalog calculation = DISABLE logging = DISABLE @@ -134,7 +134,7 @@ save_initialize_files = ENABLE // If you want to add a ground station, create the corresponding ground_station.ini, and specify it as ground_station_file(1), ground_station_file(2), ect. number_of_simulated_spacecraft = 1 number_of_simulated_ground_station = 1 -spacecraft_file(0) = ../../data/sample/initialize_files/sample_satellite.ini -ground_station_file(0) = ../../data/sample/initialize_files/sample_ground_station.ini -gnss_file = ../../data/sample/initialize_files/sample_gnss.ini +spacecraft_file(0) = INI_FILE_DIR_FROM_EXE/sample_satellite.ini +ground_station_file(0) = INI_FILE_DIR_FROM_EXE/sample_ground_station.ini +gnss_file = INI_FILE_DIR_FROM_EXE/sample_gnss.ini log_file_save_directory = ../../data/sample/logs/ diff --git a/src/library/initialize/initialize_file_access.cpp b/src/library/initialize/initialize_file_access.cpp index 73db33cc9..407a1aade 100644 --- a/src/library/initialize/initialize_file_access.cpp +++ b/src/library/initialize/initialize_file_access.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "../utilities/macros.hpp" @@ -120,14 +121,26 @@ void IniAccess::ReadChar(const char* section_name, const char* key_name, const i } std::string IniAccess::ReadString(const char* section_name, const char* key_name) { + std::string value; #ifdef WIN32 char temp[kMaxCharLength]; ReadChar(section_name, key_name, kMaxCharLength, temp); - return std::string(temp); + value = std::string(temp); #else - std::string value = ini_reader_.GetString(section_name, key_name, "NULL"); - return value; + value = ini_reader_.GetString(section_name, key_name, "NULL"); #endif + // Special characters + // INI_FILE_DIR + std::string ini_path = INI_FILE_DIR_FROM_EXE; + value = std::regex_replace(value, std::regex("INI_FILE_DIR_FROM_EXE"), ini_path); + // EXT_LIB_DIR + std::string ext_lib_path = EXT_LIB_DIR_FROM_EXE; + value = std::regex_replace(value, std::regex("EXT_LIB_DIR_FROM_EXE"), ext_lib_path); + // CORE_DIR + std::string s2e_core_path = CORE_DIR_FROM_EXE; + value = std::regex_replace(value, std::regex("CORE_DIR_FROM_EXE"), s2e_core_path); + + return value; } bool IniAccess::ReadEnable(const char* section_name, const char* key_name) { @@ -139,16 +152,16 @@ bool IniAccess::ReadEnable(const char* section_name, const char* key_name) { std::vector IniAccess::ReadStrVector(const char* section_name, const char* key_name) { std::vector data; - char temp[kMaxCharLength]; + std::string temp; unsigned int i = 0; while (true) { std::stringstream c_name; c_name << key_name << "(" << i << ")"; - ReadChar(section_name, c_name.str().c_str(), kMaxCharLength, temp); + temp = ReadString(section_name, c_name.str().c_str()); #ifdef WIN32 - if (temp[0] == NULL) { + if (temp.c_str()[0] == NULL) { #else - if (!strcmp(temp, "NULL")) { + if (!strcmp(temp.c_str(), "NULL")) { #endif break; } else { diff --git a/src/s2e.cpp b/src/s2e.cpp index 63001e86f..ed446ee20 100644 --- a/src/s2e.cpp +++ b/src/s2e.cpp @@ -47,7 +47,8 @@ int main(int argc, char *argv[]) start = system_clock::now(); std::string data_path = "../../data/"; - std::string ini_file = "../../data/sample/initialize_files/sample_simulation_base.ini"; + std::string ini_path = INI_FILE_DIR_FROM_EXE; + std::string ini_file = ini_path + "/sample_simulation_base.ini"; // Parsing arguments: SatAttSim [ini_file] if (argc == 0) {