This commit is contained in:
Timur A. Fatkhullin 2025-09-19 12:12:12 +03:00
parent f5039a329b
commit 0f955b3c91
5 changed files with 731 additions and 382 deletions

View File

@ -8,6 +8,32 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
find_package(ASIO QUIET)
if (ASIO_FOUND)
# message(STATUS "ASIO library was found")
else()
message(STATUS "ASIO library was not found! Try to download it!")
include(FetchContent)
include(ExternalProject)
FetchContent_Declare(asio_lib
SOURCE_DIR ${CMAKE_BINARY_DIR}/asio_lib
BINARY_DIR ${CMAKE_BINARY_DIR}
GIT_REPOSITORY "https://github.com/chriskohlhoff/asio"
GIT_TAG "asio-1-32-0"
GIT_SHALLOW TRUE
GIT_SUBMODULES ""
GIT_PROGRESS TRUE
)
FetchContent_MakeAvailable(asio_lib)
# FetchContent_GetProperties(asio_lib SOURCE_DIR asio_SOURCE_DIR)
set(ASIO_INSTALL_DIR ${CMAKE_BINARY_DIR}/asio_lib/asio)
find_package(ASIO)
endif()
set(ASIBFM700_LIB_SRC asibfm700_common.h asibfm700_servocontroller.h asibfm700_servocontroller.cpp) set(ASIBFM700_LIB_SRC asibfm700_common.h asibfm700_servocontroller.h asibfm700_servocontroller.cpp)
set(ASIBFM700_LIB asibfm700mount) set(ASIBFM700_LIB asibfm700mount)

View File

@ -23,6 +23,9 @@ typedef mcc::MccDefaultPCM<asibfm700MountType> Asibfm700PCM;
typedef mcc::MccPZoneContainer<mcc::MccTimeDuration> Asibfm700PZoneContainer; typedef mcc::MccPZoneContainer<mcc::MccTimeDuration> Asibfm700PZoneContainer;
typedef mcc::utils::MccSpdlogLogger Asibfm700Logger; typedef mcc::utils::MccSpdlogLogger Asibfm700Logger;
/* MOUNT CONFIGURATION CLASS */
struct Asibfm700MountConfig { struct Asibfm700MountConfig {
std::chrono::milliseconds hardwarePollingPeriod{100}; // main cycle period std::chrono::milliseconds hardwarePollingPeriod{100}; // main cycle period
@ -32,11 +35,11 @@ struct Asibfm700MountConfig {
double siteElevation{2070.0}; // in meters double siteElevation{2070.0}; // in meters
double refractWavelength{0.55}; // in mkm double refractWavelength{0.55}; // in mkm
std::string leapSecondFilename{}; std::string leapSecondFilename{""}; // an empty filename means default precompiled string
std::string bulletinAFilename{}; std::string bulletinAFilename{""}; // an empty filename means default precompiled string
// PCM-related configuration // PCM-related configuration (no B-spline term, all coefficients are zero)
Asibfm700PCM::pcm_data_t pcmData{.type = mcc::MccDefaultPCMType::PCM_TYPE_GEOMETRY, Asibfm700PCM::pcm_data_t pcmData{.type = mcc::MccDefaultPCMType::PCM_TYPE_GEOMETRY,
.siteLatitude = siteLatitude, .siteLatitude = siteLatitude,
.geomCoefficients = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}}; .geomCoefficients = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}};
@ -53,4 +56,55 @@ struct Asibfm700MountConfig {
mcc::MccAngle pzLimitSwitchHAMax{}; // in radians mcc::MccAngle pzLimitSwitchHAMax{}; // in radians
}; };
/* MOUNT CONFIGURATION FILE DEFAULTS */
struct Asibfm700MountConfigFileDefailts {
std::string hardwarePollingPeriod{"100"}; // main cycle period in millisecs
std::string siteLatitude{"43.646711"}; // site latitude in degrees or sexagesimal format
std::string siteLongitude{"41.440732"}; // site longitude in degrees or sexagesimal format
std::string siteElevation{"2070.0"}; // site elevation in meters
std::string refractWavelength{"0.55"}; // wavelength at which refraction is calculated (in mkm)
std::string leapSecondFilename{""}; // an empty filename means default precompiled string
std::string bulletinAFilename{""}; // an empty filename means default precompiled string
// pointing correction model
std::string pcmType{"GEOMETRY"};
std::vector<std::string> pcmGeomCoeffs{"0.0", "0.0", "0.0", "0.0", "0.0", "0.0", "0.0", "0.0", "0.0"};
std::vector<std::string> pcmBsplineDegree{"3", "3"};
// [0, 360]
std::vector<std::string> pcmBsplineXknots{"0.0", "0.6981317", "1.3962634", "2.0943951", "2.7925268",
"3.4906585", "4.1887902", "4.88692191", "5.58505361", "6.28318531"};
// [-30, 90]
std::vector<std::string> pcmBsplineYknots{"-0.52359878", "-0.29088821", "-0.05817764", "0.17453293", "0.40724349",
"0.63995406", "0.87266463", "1.10537519", "1.33808576", "1.57079633"};
std::vector<std::string> pcmBsplineXcoeffs{};
std::vector<std::string> pcmBsplineYcoeffs{};
// slewing and tracking parameters
std::string sideralRate{"15.0410686"}; // arcseconds per second
std::string telemetryTimeout{"3"}; // timeout for telemetry updating in seconds
std::string minTimeToPZone{"10"}; // minimal time in seconds to prohibited zone
// a time interval to update prohibited zones related quantities
std::string updatingPZoneInterval{"5000"}; // in millisecs
std::string slewToleranceRadius{"5.0"}; // coordinates difference in arcsecs to stop slewing
std::string adjustCoordDiff{"50.0"}; // target-mount coordinate difference in arcsecs to start adjusting of slewing
std::string adjustCycleInterval{"300"}; // minimum time in millisecs between two successive adjustments
std::string slewTimeout{"3600"}; // slew process timeout
// a time shift into future to compute target position in future (UT1-scale time duration)
std::string timeShiftToTargetPoint{"10000"}; // in millisecs
std::string trackingCycleInterval{"300"}; // minimum time in millisecs between two successive tracking corrections
// prohibited zones
std::string pzMinAltitude{"10.0"}; // minimal altitude in degrees
std::string pzLimitSwitchHAMin{""}; // HA-axis limit switch minimal value
std::string pzLimitSwitchHAMaz{""}; // HA-axis limit switch maximal value
};
} // namespace asibfm700 } // namespace asibfm700

View File

@ -67,7 +67,7 @@ static std::string MCC_DEFAULT_IERS_BULLETIN_A_FILE = R"--(
* * * *
* Rapid Service/Prediction of Earth Orientation * * Rapid Service/Prediction of Earth Orientation *
********************************************************************** **********************************************************************
14 August 2025 Vol. XXXVIII No. 033 18 September 2025 Vol. XXXVIII No. 038
______________________________________________________________________ ______________________________________________________________________
GENERAL INFORMATION: GENERAL INFORMATION:
MJD = Julian Date - 2 400 000.5 days MJD = Julian Date - 2 400 000.5 days
@ -116,13 +116,13 @@ static std::string MCC_DEFAULT_IERS_BULLETIN_A_FILE = R"--(
IERS Rapid Service IERS Rapid Service
MJD x error y error UT1-UTC error MJD x error y error UT1-UTC error
" " " " s s " " " " s s
25 8 8 60895 0.21521 .00009 0.41904 .00009 0.069826 0.000016 25 9 12 60930 0.23641 .00009 0.37563 .00009 0.087597 0.000019
25 8 9 60896 0.21558 .00009 0.41771 .00009 0.070764 0.000016 25 9 13 60931 0.23625 .00009 0.37386 .00009 0.087797 0.000019
25 8 10 60897 0.21616 .00009 0.41640 .00009 0.071442 0.000017 25 9 14 60932 0.23581 .00009 0.37195 .00009 0.088287 0.000018
25 8 11 60898 0.21726 .00009 0.41513 .00009 0.071836 0.000016 25 9 15 60933 0.23524 .00009 0.37002 .00009 0.088904 0.000018
25 8 12 60899 0.21832 .00009 0.41407 .00009 0.071996 0.000017 25 9 16 60934 0.23474 .00009 0.36811 .00009 0.089550 0.000018
25 8 13 60900 0.21871 .00009 0.41314 .00009 0.072040 0.000013 25 9 17 60935 0.23429 .00009 0.36628 .00009 0.090064 0.000017
25 8 14 60901 0.21892 .00009 0.41223 .00009 0.072161 0.000011 25 9 18 60936 0.23365 .00009 0.36457 .00009 0.090446 0.000012
_______________________________________________________________________ _______________________________________________________________________
@ -130,387 +130,416 @@ static std::string MCC_DEFAULT_IERS_BULLETIN_A_FILE = R"--(
The following formulas will not reproduce the predictions given below, The following formulas will not reproduce the predictions given below,
but may be used to extend the predictions beyond the end of this table. but may be used to extend the predictions beyond the end of this table.
x = 0.1410 + 0.1141 cos A + 0.0905 sin A - 0.0377 cos C - 0.0594 sin C x = 0.1436 + 0.1390 cos A + 0.0191 sin A - 0.0493 cos C - 0.0375 sin C
y = 0.3821 + 0.0927 cos A - 0.1005 sin A - 0.0594 cos C + 0.0377 sin C y = 0.3727 + 0.0292 cos A - 0.1261 sin A - 0.0375 cos C + 0.0493 sin C
UT1-UTC = 0.0478 + 0.00010 (MJD - 60909) - (UT2-UT1) UT1-UTC = 0.0561 + 0.00009 (MJD - 60944) - (UT2-UT1)
where A = 2*pi*(MJD-60901)/365.25 and C = 2*pi*(MJD-60901)/435. where A = 2*pi*(MJD-60936)/365.25 and C = 2*pi*(MJD-60936)/435.
TAI-UTC(MJD 60902) = 37.0 TAI-UTC(MJD 60937) = 37.0
The accuracy may be estimated from the expressions: The accuracy may be estimated from the expressions:
S x,y = 0.00068 (MJD-60901)**0.80 S t = 0.00025 (MJD-60901)**0.75 S x,y = 0.00068 (MJD-60936)**0.80 S t = 0.00025 (MJD-60936)**0.75
Estimated accuracies are: Predictions 10 d 20 d 30 d 40 d Estimated accuracies are: Predictions 10 d 20 d 30 d 40 d
Polar coord's 0.004 0.007 0.010 0.013 Polar coord's 0.004 0.007 0.010 0.013
UT1-UTC 0.0014 0.0024 0.0032 0.0040 UT1-UTC 0.0014 0.0024 0.0032 0.0040
MJD x(arcsec) y(arcsec) UT1-UTC(sec) MJD x(arcsec) y(arcsec) UT1-UTC(sec)
2025 8 15 60902 0.2191 0.4112 0.07241 2025 9 19 60937 0.2332 0.3628 0.09058
2025 8 16 60903 0.2193 0.4101 0.07289 2025 9 20 60938 0.2326 0.3612 0.09050
2025 8 17 60904 0.2196 0.4090 0.07364 2025 9 21 60939 0.2321 0.3596 0.09031
2025 8 18 60905 0.2200 0.4078 0.07462 2025 9 22 60940 0.2316 0.3580 0.09013
2025 8 19 60906 0.2205 0.4066 0.07573 2025 9 23 60941 0.2311 0.3566 0.09003
2025 8 20 60907 0.2210 0.4054 0.07685 2025 9 24 60942 0.2307 0.3551 0.09005
2025 8 21 60908 0.2215 0.4042 0.07788 2025 9 25 60943 0.2302 0.3538 0.09021
2025 8 22 60909 0.2220 0.4029 0.07870 2025 9 26 60944 0.2297 0.3525 0.09054
2025 8 23 60910 0.2225 0.4018 0.07929 2025 9 27 60945 0.2291 0.3512 0.09105
2025 8 24 60911 0.2229 0.4006 0.07964 2025 9 28 60946 0.2285 0.3499 0.09169
2025 8 25 60912 0.2233 0.3994 0.07982 2025 9 29 60947 0.2279 0.3487 0.09238
2025 8 26 60913 0.2237 0.3982 0.07994 2025 9 30 60948 0.2273 0.3474 0.09302
2025 8 27 60914 0.2241 0.3970 0.08012 2025 10 1 60949 0.2266 0.3462 0.09355
2025 8 28 60915 0.2244 0.3957 0.08043 2025 10 2 60950 0.2260 0.3450 0.09389
2025 8 29 60916 0.2247 0.3945 0.08090 2025 10 3 60951 0.2253 0.3438 0.09394
2025 8 30 60917 0.2250 0.3932 0.08154 2025 10 4 60952 0.2246 0.3426 0.09368
2025 8 31 60918 0.2253 0.3919 0.08233 2025 10 5 60953 0.2239 0.3414 0.09310
2025 9 1 60919 0.2256 0.3907 0.08321 2025 10 6 60954 0.2232 0.3402 0.09230
2025 9 2 60920 0.2258 0.3894 0.08411 2025 10 7 60955 0.2225 0.3390 0.09141
2025 9 3 60921 0.2260 0.3881 0.08494 2025 10 8 60956 0.2218 0.3379 0.09060
2025 9 4 60922 0.2262 0.3868 0.08561 2025 10 9 60957 0.2210 0.3367 0.09003
2025 9 5 60923 0.2263 0.3855 0.08601 2025 10 10 60958 0.2202 0.3356 0.08978
2025 9 6 60924 0.2265 0.3842 0.08608 2025 10 11 60959 0.2194 0.3345 0.08982
2025 9 7 60925 0.2266 0.3829 0.08580 2025 10 12 60960 0.2186 0.3333 0.09007
2025 9 8 60926 0.2267 0.3816 0.08522 2025 10 13 60961 0.2177 0.3322 0.09039
2025 9 9 60927 0.2267 0.3803 0.08448 2025 10 14 60962 0.2168 0.3312 0.09064
2025 9 10 60928 0.2267 0.3790 0.08373 2025 10 15 60963 0.2159 0.3301 0.09072
2025 9 11 60929 0.2267 0.3777 0.08314 2025 10 16 60964 0.2150 0.3290 0.09058
2025 9 12 60930 0.2267 0.3764 0.08283 2025 10 17 60965 0.2141 0.3280 0.09023
2025 9 13 60931 0.2267 0.3751 0.08283 2025 10 18 60966 0.2132 0.3269 0.08973
2025 9 14 60932 0.2266 0.3738 0.08308 2025 10 19 60967 0.2122 0.3259 0.08915
2025 9 15 60933 0.2265 0.3724 0.08349 2025 10 20 60968 0.2112 0.3249 0.08858
2025 9 16 60934 0.2263 0.3711 0.08390 2025 10 21 60969 0.2102 0.3239 0.08809
2025 9 17 60935 0.2262 0.3698 0.08421 2025 10 22 60970 0.2092 0.3229 0.08774
2025 9 18 60936 0.2260 0.3685 0.08434 2025 10 23 60971 0.2081 0.3220 0.08755
2025 9 19 60937 0.2258 0.3672 0.08426 2025 10 24 60972 0.2070 0.3210 0.08753
2025 9 20 60938 0.2256 0.3659 0.08400 2025 10 25 60973 0.2059 0.3201 0.08765
2025 9 21 60939 0.2253 0.3646 0.08360 2025 10 26 60974 0.2048 0.3192 0.08785
2025 9 22 60940 0.2250 0.3633 0.08315 2025 10 27 60975 0.2037 0.3183 0.08808
2025 9 23 60941 0.2247 0.3620 0.08272 2025 10 28 60976 0.2026 0.3174 0.08823
2025 9 24 60942 0.2244 0.3607 0.08239 2025 10 29 60977 0.2014 0.3166 0.08825
2025 9 25 60943 0.2240 0.3595 0.08220 2025 10 30 60978 0.2003 0.3157 0.08804
2025 9 26 60944 0.2236 0.3582 0.08219 2025 10 31 60979 0.1991 0.3149 0.08756
2025 9 27 60945 0.2232 0.3569 0.08235 2025 11 1 60980 0.1979 0.3141 0.08678
2025 9 28 60946 0.2228 0.3556 0.08264 2025 11 2 60981 0.1966 0.3133 0.08574
2025 9 29 60947 0.2223 0.3544 0.08302 2025 11 3 60982 0.1954 0.3125 0.08453
2025 9 30 60948 0.2218 0.3531 0.08339 2025 11 4 60983 0.1941 0.3118 0.08332
2025 10 1 60949 0.2213 0.3519 0.08369 2025 11 5 60984 0.1929 0.3110 0.08228
2025 10 2 60950 0.2208 0.3506 0.08381 2025 11 6 60985 0.1916 0.3103 0.08154
2025 10 3 60951 0.2202 0.3494 0.08367 2025 11 7 60986 0.1903 0.3096 0.08112
2025 10 4 60952 0.2196 0.3482 0.08322 2025 11 8 60987 0.1890 0.3089 0.08097
2025 10 5 60953 0.2190 0.3470 0.08244 2025 11 9 60988 0.1877 0.3083 0.08095
2025 10 6 60954 0.2184 0.3458 0.08143 2025 11 10 60989 0.1863 0.3076 0.08091
2025 10 7 60955 0.2177 0.3446 0.08031 2025 11 11 60990 0.1850 0.3070 0.08073
2025 10 8 60956 0.2171 0.3434 0.07929 2025 11 12 60991 0.1836 0.3064 0.08037
2025 10 9 60957 0.2164 0.3422 0.07851 2025 11 13 60992 0.1823 0.3059 0.07984
2025 10 10 60958 0.2156 0.3410 0.07804 2025 11 14 60993 0.1809 0.3053 0.07917
2025 10 11 60959 0.2149 0.3399 0.07788 2025 11 15 60994 0.1795 0.3048 0.07843
2025 10 12 60960 0.2141 0.3387 0.07790 2025 11 16 60995 0.1781 0.3043 0.07772
2025 10 13 60961 0.2133 0.3376 0.07799 2025 11 17 60996 0.1767 0.3038 0.07708
2025 10 14 60962 0.2125 0.3365 0.07800 2025 11 18 60997 0.1753 0.3033 0.07658
2025 10 15 60963 0.2117 0.3354 0.07785 2025 11 19 60998 0.1738 0.3029 0.07625
2025 10 16 60964 0.2108 0.3343 0.07750 2025 11 20 60999 0.1724 0.3024 0.07612
2025 10 17 60965 0.2100 0.3332 0.07696 2025 11 21 61000 0.1709 0.3020 0.07616
2025 10 18 60966 0.2091 0.3321 0.07629 2025 11 22 61001 0.1695 0.3017 0.07633
2025 10 19 60967 0.2082 0.3311 0.07556 2025 11 23 61002 0.1680 0.3013 0.07657
2025 10 20 60968 0.2072 0.3300 0.07484 2025 11 24 61003 0.1666 0.3010 0.07680
2025 10 21 60969 0.2063 0.3290 0.07422 2025 11 25 61004 0.1651 0.3007 0.07694
2025 10 22 60970 0.2053 0.3280 0.07375 2025 11 26 61005 0.1636 0.3004 0.07692
2025 10 23 60971 0.2043 0.3270 0.07347 2025 11 27 61006 0.1621 0.3001 0.07667
2025 10 24 60972 0.2033 0.3260 0.07337 2025 11 28 61007 0.1607 0.2999 0.07617
2025 10 25 60973 0.2022 0.3250 0.07345 2025 11 29 61008 0.1592 0.2996 0.07543
2025 10 26 60974 0.2012 0.3241 0.07364 2025 11 30 61009 0.1577 0.2994 0.07451
2025 10 27 60975 0.2001 0.3231 0.07388 2025 12 1 61010 0.1562 0.2993 0.07353
2025 10 28 60976 0.1990 0.3222 0.07410 2025 12 2 61011 0.1547 0.2991 0.07263
2025 10 29 60977 0.1979 0.3213 0.07419 2025 12 3 61012 0.1532 0.2990 0.07197
2025 10 30 60978 0.1968 0.3204 0.07409 2025 12 4 61013 0.1517 0.2989 0.07160
2025 10 31 60979 0.1957 0.3196 0.07374 2025 12 5 61014 0.1501 0.2988 0.07152
2025 11 1 60980 0.1945 0.3187 0.07309 2025 12 6 61015 0.1486 0.2987 0.07163
2025 11 2 60981 0.1933 0.3179 0.07220 2025 12 7 61016 0.1471 0.2987 0.07178
2025 11 3 60982 0.1922 0.3171 0.07115 2025 12 8 61017 0.1456 0.2987 0.07181
2025 11 4 60983 0.1910 0.3163 0.07011 2025 12 9 61018 0.1441 0.2987 0.07166
2025 11 5 60984 0.1898 0.3155 0.06924 2025 12 10 61019 0.1426 0.2987 0.07131
2025 11 6 60985 0.1885 0.3147 0.06866 2025 12 11 61020 0.1411 0.2988 0.07081
2025 11 7 60986 0.1873 0.3140 0.06841 2025 12 12 61021 0.1396 0.2989 0.07025
2025 11 8 60987 0.1860 0.3133 0.06842 2025 12 13 61022 0.1381 0.2990 0.06971
2025 11 9 60988 0.1848 0.3126 0.06856 2025 12 14 61023 0.1366 0.2991 0.06926
2025 11 10 60989 0.1835 0.3119 0.06868 2025 12 15 61024 0.1351 0.2993 0.06895
2025 11 11 60990 0.1822 0.3112 0.06866 2025 12 16 61025 0.1336 0.2994 0.06883
2025 11 12 60991 0.1809 0.3106 0.06845 2025 12 17 61026 0.1321 0.2996 0.06890
2025 11 13 60992 0.1796 0.3100 0.06806 2025 12 18 61027 0.1306 0.2999 0.06916
2025 11 14 60993 0.1782 0.3094 0.06755 2025 12 19 61028 0.1292 0.3001 0.06957
2025 11 15 60994 0.1769 0.3088 0.06698 2025 12 20 61029 0.1277 0.3004 0.07007
2025 11 16 60995 0.1755 0.3082 0.06643 2025 12 21 61030 0.1262 0.3007 0.07059
2025 11 17 60996 0.1742 0.3077 0.06596 2025 12 22 61031 0.1247 0.3010 0.07104
2025 11 18 60997 0.1728 0.3072 0.06564 2025 12 23 61032 0.1233 0.3013 0.07135
2025 11 19 60998 0.1714 0.3067 0.06550 2025 12 24 61033 0.1218 0.3017 0.07147
2025 11 20 60999 0.1701 0.3062 0.06555 2025 12 25 61034 0.1204 0.3021 0.07135
2025 11 21 61000 0.1687 0.3058 0.06578 2025 12 26 61035 0.1190 0.3025 0.07102
2025 11 22 61001 0.1673 0.3053 0.06615 2025 12 27 61036 0.1176 0.3029 0.07051
2025 11 23 61002 0.1659 0.3049 0.06660 2025 12 28 61037 0.1161 0.3033 0.06993
2025 11 24 61003 0.1644 0.3045 0.06704 2025 12 29 61038 0.1147 0.3038 0.06940
2025 11 25 61004 0.1630 0.3042 0.06739 2025 12 30 61039 0.1133 0.3043 0.06903
2025 11 26 61005 0.1616 0.3038 0.06759 2025 12 31 61040 0.1120 0.3048 0.06892
2025 11 27 61006 0.1602 0.3035 0.06756 2026 1 1 61041 0.1106 0.3053 0.06908
2025 11 28 61007 0.1587 0.3032 0.06728 2026 1 2 61042 0.1092 0.3059 0.06945
2025 11 29 61008 0.1573 0.3029 0.06677 2026 1 3 61043 0.1079 0.3065 0.06989
2025 11 30 61009 0.1558 0.3027 0.06607 2026 1 4 61044 0.1066 0.3071 0.07027
2025 12 1 61010 0.1544 0.3024 0.06523 2026 1 5 61045 0.1052 0.3077 0.07042
2025 12 2 61011 0.1529 0.3022 0.06448 2026 1 6 61046 0.1039 0.3083 0.07034
2025 12 3 61012 0.1515 0.3020 0.06395 2026 1 7 61047 0.1026 0.3090 0.07006
2025 12 4 61013 0.1500 0.3019 0.06373 2026 1 8 61048 0.1013 0.3097 0.06966
2025 12 5 61014 0.1486 0.3017 0.06379 2026 1 9 61049 0.1001 0.3104 0.06924
2025 12 6 61015 0.1471 0.3016 0.06403 2026 1 10 61050 0.0988 0.3111 0.06889
2025 12 7 61016 0.1456 0.3015 0.06430 2026 1 11 61051 0.0976 0.3118 0.06867
2025 12 8 61017 0.1442 0.3015 0.06446 2026 1 12 61052 0.0964 0.3126 0.06863
2025 12 9 61018 0.1427 0.3014 0.06442 2026 1 13 61053 0.0951 0.3134 0.06879
2025 12 10 61019 0.1413 0.3014 0.06419 2026 1 14 61054 0.0940 0.3142 0.06912
2025 12 11 61020 0.1398 0.3014 0.06380 2026 1 15 61055 0.0928 0.3150 0.06961
2025 12 12 61021 0.1383 0.3014 0.06335 2026 1 16 61056 0.0916 0.3158 0.07020
2025 12 13 61022 0.1369 0.3015 0.06291 2026 1 17 61057 0.0905 0.3167 0.07081
2025 12 14 61023 0.1354 0.3015 0.06256 2026 1 18 61058 0.0893 0.3175 0.07136
2025 12 15 61024 0.1340 0.3016 0.06234 2026 1 19 61059 0.0882 0.3184 0.07177
2025 12 16 61025 0.1325 0.3017 0.06230 2026 1 20 61060 0.0872 0.3193 0.07197
2025 12 17 61026 0.1311 0.3019 0.06246 2026 1 21 61061 0.0861 0.3202 0.07192
2025 12 18 61027 0.1297 0.3020 0.06279 2026 1 22 61062 0.0850 0.3212 0.07163
2025 12 19 61028 0.1282 0.3022 0.06328 2026 1 23 61063 0.0840 0.3221 0.07115
2025 12 20 61029 0.1268 0.3024 0.06386 2026 1 24 61064 0.0830 0.3231 0.07059
2025 12 21 61030 0.1254 0.3027 0.06444 2026 1 25 61065 0.0820 0.3241 0.07005
2025 12 22 61031 0.1239 0.3029 0.06496 2026 1 26 61066 0.0810 0.3251 0.06965
2025 12 23 61032 0.1225 0.3032 0.06533 2026 1 27 61067 0.0801 0.3261 0.06947
2025 12 24 61033 0.1211 0.3035 0.06550 2026 1 28 61068 0.0791 0.3271 0.06954
2025 12 25 61034 0.1197 0.3038 0.06544 2026 1 29 61069 0.0782 0.3282 0.06982
2025 12 26 61035 0.1183 0.3041 0.06515 2026 1 30 61070 0.0773 0.3293 0.07020
2025 12 27 61036 0.1170 0.3045 0.06469 2026 1 31 61071 0.0765 0.3303 0.07055
2025 12 28 61037 0.1156 0.3049 0.06414 2026 2 1 61072 0.0756 0.3314 0.07072
2025 12 29 61038 0.1142 0.3053 0.06364 2026 2 2 61073 0.0748 0.3325 0.07065
2025 12 30 61039 0.1129 0.3057 0.06331 2026 2 3 61074 0.0740 0.3336 0.07034
2025 12 31 61040 0.1115 0.3062 0.06323 2026 2 4 61075 0.0732 0.3348 0.06984
2026 1 1 61041 0.1102 0.3066 0.06342 2026 2 5 61076 0.0724 0.3359 0.06926
2026 1 2 61042 0.1089 0.3071 0.06382 2026 2 6 61077 0.0717 0.3371 0.06871
2026 1 3 61043 0.1076 0.3077 0.06429 2026 2 7 61078 0.0710 0.3382 0.06827
2026 1 4 61044 0.1063 0.3082 0.06469 2026 2 8 61079 0.0703 0.3394 0.06799
2026 1 5 61045 0.1050 0.3087 0.06489 2026 2 9 61080 0.0696 0.3406 0.06791
2026 1 6 61046 0.1037 0.3093 0.06486 2026 2 10 61081 0.0690 0.3418 0.06801
2026 1 7 61047 0.1024 0.3099 0.06463 2026 2 11 61082 0.0684 0.3430 0.06828
2026 1 8 61048 0.1012 0.3105 0.06428 2026 2 12 61083 0.0678 0.3442 0.06867
2026 1 9 61049 0.0999 0.3112 0.06391 2026 2 13 61084 0.0672 0.3454 0.06909
2026 1 10 61050 0.0987 0.3118 0.06361 2026 2 14 61085 0.0667 0.3467 0.06948
2026 1 11 61051 0.0975 0.3125 0.06344 2026 2 15 61086 0.0662 0.3479 0.06974
2026 1 12 61052 0.0963 0.3132 0.06344 2026 2 16 61087 0.0657 0.3492 0.06979
2026 1 13 61053 0.0951 0.3139 0.06364 2026 2 17 61088 0.0652 0.3504 0.06959
2026 1 14 61054 0.0940 0.3147 0.06401 2026 2 18 61089 0.0648 0.3517 0.06911
2026 1 15 61055 0.0928 0.3154 0.06454 2026 2 19 61090 0.0643 0.3530 0.06842
2026 1 16 61056 0.0917 0.3162 0.06517 2026 2 20 61091 0.0640 0.3543 0.06759
2026 1 17 61057 0.0906 0.3170 0.06582 2026 2 21 61092 0.0636 0.3556 0.06677
2026 1 18 61058 0.0895 0.3178 0.06640 2026 2 22 61093 0.0632 0.3568 0.06607
2026 1 19 61059 0.0884 0.3186 0.06684 2026 2 23 61094 0.0629 0.3581 0.06559
2026 1 20 61060 0.0874 0.3195 0.06707 2026 2 24 61095 0.0626 0.3595 0.06538
2026 1 21 61061 0.0863 0.3203 0.06706 2026 2 25 61096 0.0624 0.3608 0.06539
2026 1 22 61062 0.0853 0.3212 0.06680 2026 2 26 61097 0.0621 0.3621 0.06553
2026 1 23 61063 0.0843 0.3221 0.06636 2026 2 27 61098 0.0619 0.3634 0.06568
2026 1 24 61064 0.0833 0.3230 0.06582 2026 2 28 61099 0.0618 0.3647 0.06570
2026 1 25 61065 0.0823 0.3239 0.06531 2026 3 1 61100 0.0616 0.3660 0.06549
2026 1 26 61066 0.0814 0.3249 0.06494 2026 3 2 61101 0.0615 0.3674 0.06504
2026 1 27 61067 0.0804 0.3259 0.06479 2026 3 3 61102 0.0614 0.3687 0.06437
2026 1 28 61068 0.0795 0.3268 0.06489 2026 3 4 61103 0.0613 0.3700 0.06356
2026 1 29 61069 0.0786 0.3278 0.06520 2026 3 5 61104 0.0612 0.3714 0.06272
2026 1 30 61070 0.0778 0.3288 0.06562 2026 3 6 61105 0.0612 0.3727 0.06196
2026 1 31 61071 0.0769 0.3298 0.06599 2026 3 7 61106 0.0612 0.3741 0.06134
2026 2 1 61072 0.0761 0.3309 0.06620 2026 3 8 61107 0.0612 0.3754 0.06092
2026 2 2 61073 0.0753 0.3319 0.06617 2026 3 9 61108 0.0613 0.3767 0.06070
2026 2 3 61074 0.0745 0.3330 0.06589 2026 3 10 61109 0.0614 0.3781 0.06065
2026 2 4 61075 0.0737 0.3341 0.06543 2026 3 11 61110 0.0615 0.3794 0.06074
2026 2 5 61076 0.0730 0.3351 0.06490 2026 3 12 61111 0.0616 0.3807 0.06091
2026 2 6 61077 0.0723 0.3362 0.06439 2026 3 13 61112 0.0618 0.3821 0.06106
2026 2 7 61078 0.0716 0.3373 0.06401 2026 3 14 61113 0.0619 0.3834 0.06112
2026 2 8 61079 0.0709 0.3385 0.06379 2026 3 15 61114 0.0622 0.3847 0.06099
2026 2 9 61080 0.0703 0.3396 0.06378 2026 3 16 61115 0.0624 0.3860 0.06062
2026 2 10 61081 0.0696 0.3407 0.06396 2026 3 17 61116 0.0627 0.3874 0.05996
2026 2 11 61082 0.0690 0.3419 0.06432 2026 3 18 61117 0.0630 0.3887 0.05903
2026 2 12 61083 0.0685 0.3431 0.06481 2026 3 19 61118 0.0633 0.3900 0.05790
2026 2 13 61084 0.0679 0.3442 0.06537 2026 3 20 61119 0.0636 0.3913 0.05671
2026 2 14 61085 0.0674 0.3454 0.06590 2026 3 21 61120 0.0640 0.3926 0.05560
2026 2 15 61086 0.0669 0.3466 0.06634 2026 3 22 61121 0.0644 0.3939 0.05469
2026 2 16 61087 0.0664 0.3478 0.06660 2026 3 23 61122 0.0648 0.3952 0.05405
2026 2 17 61088 0.0659 0.3490 0.06664 2026 3 24 61123 0.0652 0.3965 0.05367
2026 2 18 61089 0.0655 0.3503 0.06646 2026 3 25 61124 0.0657 0.3978 0.05346
2026 2 19 61090 0.0651 0.3515 0.06608 2026 3 26 61125 0.0662 0.3990 0.05330
2026 2 20 61091 0.0647 0.3527 0.06560 2026 3 27 61126 0.0667 0.4003 0.05308
2026 2 21 61092 0.0643 0.3540 0.06514 2026 3 28 61127 0.0673 0.4016 0.05271
2026 2 22 61093 0.0640 0.3552 0.06482 2026 3 29 61128 0.0678 0.4028 0.05216
2026 2 23 61094 0.0637 0.3564 0.06470 2026 3 30 61129 0.0684 0.4041 0.05143
2026 2 24 61095 0.0634 0.3577 0.06483 2026 3 31 61130 0.0691 0.4053 0.05060
2026 2 25 61096 0.0632 0.3590 0.06515 2026 4 1 61131 0.0697 0.4065 0.04975
2026 2 26 61097 0.0629 0.3602 0.06557 2026 4 2 61132 0.0704 0.4077 0.04897
2026 2 27 61098 0.0627 0.3615 0.06596 2026 4 3 61133 0.0711 0.4089 0.04834
2026 2 28 61099 0.0625 0.3628 0.06620 2026 4 4 61134 0.0718 0.4101 0.04791
2026 3 1 61100 0.0624 0.3641 0.06619 2026 4 5 61135 0.0725 0.4113 0.04770
2026 3 2 61101 0.0623 0.3654 0.06591 2026 4 6 61136 0.0733 0.4125 0.04770
2026 3 3 61102 0.0622 0.3666 0.06538 2026 4 7 61137 0.0740 0.4136 0.04788
2026 3 4 61103 0.0621 0.3679 0.06470 2026 4 8 61138 0.0749 0.4148 0.04816
2026 3 5 61104 0.0620 0.3692 0.06398 2026 4 9 61139 0.0757 0.4159 0.04847
2026 3 6 61105 0.0620 0.3705 0.06332 2026 4 10 61140 0.0765 0.4170 0.04874
2026 3 7 61106 0.0620 0.3718 0.06280 2026 4 11 61141 0.0774 0.4182 0.04888
2026 3 8 61107 0.0620 0.3731 0.06247 2026 4 12 61142 0.0783 0.4193 0.04884
2026 3 9 61108 0.0621 0.3744 0.06235 2026 4 13 61143 0.0792 0.4203 0.04856
2026 3 10 61109 0.0621 0.3757 0.06241 2026 4 14 61144 0.0801 0.4214 0.04803
2026 3 11 61110 0.0622 0.3770 0.06263 2026 4 15 61145 0.0811 0.4225 0.04729
2026 3 12 61111 0.0624 0.3783 0.06293 2026 4 16 61146 0.0821 0.4235 0.04644
2026 3 13 61112 0.0625 0.3796 0.06322 2026 4 17 61147 0.0831 0.4245 0.04561
2026 3 14 61113 0.0627 0.3809 0.06341 2026 4 18 61148 0.0841 0.4255 0.04496
2026 3 15 61114 0.0629 0.3821 0.06342 2026 4 19 61149 0.0851 0.4265 0.04460
2026 3 16 61115 0.0631 0.3834 0.06320 2026 4 20 61150 0.0862 0.4275 0.04455
2026 3 17 61116 0.0634 0.3847 0.06271 2026 4 21 61151 0.0873 0.4285 0.04474
2026 3 18 61117 0.0637 0.3860 0.06199 2026 4 22 61152 0.0883 0.4294 0.04502
2026 3 19 61118 0.0640 0.3873 0.06113 2026 4 23 61153 0.0895 0.4304 0.04526
2026 3 20 61119 0.0643 0.3885 0.06024 2026 4 24 61154 0.0906 0.4313 0.04532
2026 3 21 61120 0.0647 0.3898 0.05943 2026 4 25 61155 0.0917 0.4322 0.04515
2026 3 22 61121 0.0651 0.3911 0.05880 2026 4 26 61156 0.0929 0.4331 0.04475
2026 3 23 61122 0.0655 0.3923 0.05842 2026 4 27 61157 0.0941 0.4339 0.04417
2026 3 24 61123 0.0659 0.3936 0.05830 2026 4 28 61158 0.0953 0.4348 0.04355
2026 3 25 61124 0.0664 0.3948 0.05832 2026 4 29 61159 0.0965 0.4356 0.04299
2026 3 26 61125 0.0668 0.3961 0.05841 2026 4 30 61160 0.0977 0.4364 0.04255
2026 3 27 61126 0.0673 0.3973 0.05840 2026 5 1 61161 0.0990 0.4372 0.04228
2026 3 28 61127 0.0679 0.3985 0.05821 2026 5 2 61162 0.1002 0.4380 0.04226
2026 3 29 61128 0.0684 0.3997 0.05777 2026 5 3 61163 0.1015 0.4387 0.04252
2026 3 30 61129 0.0690 0.4010 0.05709 2026 5 4 61164 0.1028 0.4394 0.04297
2026 3 31 61130 0.0696 0.4022 0.05624 2026 5 5 61165 0.1041 0.4401 0.04352
2026 4 1 61131 0.0702 0.4034 0.05523 2026 5 6 61166 0.1054 0.4408 0.04410
2026 4 2 61132 0.0709 0.4045 0.05420 2026 5 7 61167 0.1067 0.4415 0.04462
2026 4 3 61133 0.0715 0.4057 0.05330 2026 5 8 61168 0.1081 0.4422 0.04494
2026 4 4 61134 0.0722 0.4069 0.05257 2026 5 9 61169 0.1094 0.4428 0.04517
2026 4 5 61135 0.0729 0.4080 0.05202 2026 5 10 61170 0.1108 0.4434 0.04517
2026 4 6 61136 0.0737 0.4092 0.05164 2026 5 11 61171 0.1121 0.4440 0.04495
2026 4 7 61137 0.0744 0.4103 0.05137 2026 5 12 61172 0.1135 0.4446 0.04445
2026 4 8 61138 0.0752 0.4114 0.05123 2026 5 13 61173 0.1149 0.4451 0.04382
2026 4 9 61139 0.0760 0.4125 0.05118 2026 5 14 61174 0.1163 0.4456 0.04324
2026 4 10 61140 0.0768 0.4136 0.05105 2026 5 15 61175 0.1177 0.4461 0.04278
2026 4 11 61141 0.0777 0.4147 0.05087 2026 5 16 61176 0.1192 0.4466 0.04261
2026 4 12 61142 0.0786 0.4158 0.05044 2026 5 17 61177 0.1206 0.4471 0.04273
2026 4 13 61143 0.0794 0.4169 0.04970 2026 5 18 61178 0.1220 0.4475 0.04312
2026 4 14 61144 0.0803 0.4179 0.04867 2026 5 19 61179 0.1235 0.4479 0.04371
2026 4 15 61145 0.0813 0.4189 0.04739 2026 5 20 61180 0.1249 0.4483 0.04431
2026 4 16 61146 0.0822 0.4200 0.04601 2026 5 21 61181 0.1264 0.4487 0.04475
2026 4 17 61147 0.0832 0.4210 0.04462 2026 5 22 61182 0.1279 0.4490 0.04498
2026 4 18 61148 0.0842 0.4219 0.04343 2026 5 23 61183 0.1294 0.4494 0.04506
2026 4 19 61149 0.0852 0.4229 0.04254 2026 5 24 61184 0.1308 0.4497 0.04496
2026 4 20 61150 0.0862 0.4239 0.04195 2026 5 25 61185 0.1323 0.4500 0.04474
2026 4 21 61151 0.0872 0.4248 0.04156 2026 5 26 61186 0.1338 0.4502 0.04465
2026 4 22 61152 0.0883 0.4258 0.04129 2026 5 27 61187 0.1353 0.4505 0.04475
2026 4 23 61153 0.0894 0.4267 0.04098 2026 5 28 61188 0.1368 0.4507 0.04502
2026 4 24 61154 0.0905 0.4276 0.04050 2026 5 29 61189 0.1383 0.4509 0.04558
2026 4 25 61155 0.0916 0.4284 0.03988 2026 5 30 61190 0.1398 0.4510 0.04628
2026 4 26 61156 0.0927 0.4293 0.03914 2026 5 31 61191 0.1413 0.4512 0.04715
2026 4 27 61157 0.0939 0.4302 0.03829 2026 6 1 61192 0.1428 0.4513 0.04812
2026 4 28 61158 0.0950 0.4310 0.03744 2026 6 2 61193 0.1443 0.4514 0.04919
2026 4 29 61159 0.0962 0.4318 0.03659 2026 6 3 61194 0.1459 0.4515 0.05023
2026 4 30 61160 0.0974 0.4326 0.03591 2026 6 4 61195 0.1474 0.4515 0.05123
2026 5 1 61161 0.0986 0.4334 0.03540 2026 6 5 61196 0.1489 0.4515 0.05208
2026 5 2 61162 0.0998 0.4341 0.03522 2026 6 6 61197 0.1504 0.4515 0.05274
2026 5 3 61163 0.1010 0.4348 0.03525 2026 6 7 61198 0.1519 0.4515 0.05319
2026 5 4 61164 0.1023 0.4356 0.03547 2026 6 8 61199 0.1534 0.4515 0.05341
2026 5 5 61165 0.1035 0.4363 0.03594 2026 6 9 61200 0.1549 0.4514 0.05345
2026 5 6 61166 0.1048 0.4369 0.03644 2026 6 10 61201 0.1564 0.4513 0.05332
2026 5 7 61167 0.1061 0.4376 0.03697 2026 6 11 61202 0.1579 0.4512 0.05318
2026 5 8 61168 0.1074 0.4382 0.03741 2026 6 12 61203 0.1594 0.4511 0.05321
2026 5 9 61169 0.1087 0.4389 0.03765 2026 6 13 61204 0.1609 0.4509 0.05350
2026 5 10 61170 0.1100 0.4395 0.03762 2026 6 14 61205 0.1624 0.4507 0.05402
2026 5 11 61171 0.1114 0.4400 0.03733 2026 6 15 61206 0.1639 0.4505 0.05474
2026 5 12 61172 0.1127 0.4406 0.03682 2026 6 16 61207 0.1654 0.4503 0.05546
2026 5 13 61173 0.1140 0.4411 0.03611 2026 6 17 61208 0.1668 0.4501 0.05612
2026 5 14 61174 0.1154 0.4416 0.03540 2026 6 18 61209 0.1683 0.4498 0.05665
2026 5 15 61175 0.1168 0.4421 0.03481 2026 6 19 61210 0.1698 0.4495 0.05691
2026 5 16 61176 0.1182 0.4426 0.03447 2026 6 20 61211 0.1712 0.4492 0.05708
2026 5 17 61177 0.1195 0.4431 0.03440 2026 6 21 61212 0.1727 0.4488 0.05709
2026 5 18 61178 0.1209 0.4435 0.03458 2026 6 22 61213 0.1741 0.4485 0.05708
2026 5 19 61179 0.1223 0.4439 0.03496 2026 6 23 61214 0.1755 0.4481 0.05714
2026 5 20 61180 0.1237 0.4443 0.03531 2026 6 24 61215 0.1770 0.4477 0.05734
2026 5 21 61181 0.1252 0.4447 0.03553 2026 6 25 61216 0.1784 0.4473 0.05777
2026 5 22 61182 0.1266 0.4450 0.03563 2026 6 26 61217 0.1798 0.4468 0.05836
2026 5 23 61183 0.1280 0.4453 0.03555 2026 6 27 61218 0.1812 0.4463 0.05918
2026 5 24 61184 0.1294 0.4456 0.03538 2026 6 28 61219 0.1826 0.4458 0.06018
2026 5 25 61185 0.1309 0.4459 0.03522 2026 6 29 61220 0.1839 0.4453 0.06126
2026 5 26 61186 0.1323 0.4462 0.03510 2026 6 30 61221 0.1853 0.4448 0.06233
2026 5 27 61187 0.1337 0.4464 0.03509 2026 7 1 61222 0.1867 0.4442 0.06335
2026 5 28 61188 0.1352 0.4466 0.03526 2026 7 2 61223 0.1880 0.4437 0.06424
2026 5 29 61189 0.1366 0.4468 0.03571 2026 7 3 61224 0.1893 0.4431 0.06492
2026 5 30 61190 0.1381 0.4469 0.03643 2026 7 4 61225 0.1906 0.4425 0.06546
2026 5 31 61191 0.1395 0.4471 0.03730 2026 7 5 61226 0.1919 0.4418 0.06588
2026 6 1 61192 0.1410 0.4472 0.03832 2026 7 6 61227 0.1932 0.4412 0.06616
2026 6 2 61193 0.1425 0.4473 0.03948 2026 7 7 61228 0.1945 0.4405 0.06642
2026 6 3 61194 0.1439 0.4474 0.04058 2026 7 8 61229 0.1957 0.4398 0.06666
2026 6 4 61195 0.1454 0.4474 0.04160 2026 7 9 61230 0.1970 0.4391 0.06707
2026 6 5 61196 0.1468 0.4474 0.04249 2026 7 10 61231 0.1982 0.4383 0.06769
2026 6 6 61197 0.1483 0.4475 0.04322 2026 7 11 61232 0.1994 0.4376 0.06867
2026 6 7 61198 0.1497 0.4474 0.04372 2026 7 12 61233 0.2006 0.4368 0.06987
2026 6 8 61199 0.1512 0.4474 0.04404 2026 7 13 61234 0.2018 0.4360 0.07117
2026 6 9 61200 0.1526 0.4473 0.04420 2026 7 14 61235 0.2030 0.4352 0.07254
2026 6 10 61201 0.1541 0.4472 0.04427 2026 7 15 61236 0.2041 0.4344 0.07370
2026 6 11 61202 0.1555 0.4471 0.04441 2026 7 16 61237 0.2052 0.4335 0.07464
2026 6 12 61203 0.1570 0.4470 0.04471 2026 7 17 61238 0.2063 0.4327 0.07533
2026 6 13 61204 0.1584 0.4468 0.04527 2026 7 18 61239 0.2074 0.4318 0.07582
2026 6 14 61205 0.1598 0.4467 0.04607 2026 7 19 61240 0.2085 0.4309 0.07620
2026 6 15 61206 0.1613 0.4465 0.04699 2026 7 20 61241 0.2095 0.4300 0.07664
2026 6 16 61207 0.1627 0.4462 0.04805 2026 7 21 61242 0.2106 0.4290 0.07722
2026 6 17 61208 0.1641 0.4460 0.04907 2026 7 22 61243 0.2116 0.4281 0.07797
2026 6 18 61209 0.1655 0.4457 0.04991 2026 7 23 61244 0.2126 0.4271 0.07895
2026 6 19 61210 0.1669 0.4454 0.05056 2026 7 24 61245 0.2136 0.4261 0.08016
2026 6 20 61211 0.1683 0.4451 0.05105 2026 7 25 61246 0.2145 0.4252 0.08152
2026 6 21 61212 0.1697 0.4448 0.05136 2026 7 26 61247 0.2154 0.4241 0.08295
2026 6 22 61213 0.1711 0.4444 0.05165 2026 7 27 61248 0.2163 0.4231 0.08436
2026 6 23 61214 0.1725 0.4440 0.05210 2026 7 28 61249 0.2172 0.4221 0.08577
2026 6 24 61215 0.1738 0.4436 0.05266 2026 7 29 61250 0.2181 0.4210 0.08699
2026 6 25 61216 0.1752 0.4432 0.05340 2026 7 30 61251 0.2190 0.4200 0.08801
2026 6 26 61217 0.1765 0.4428 0.05430 2026 7 31 61252 0.2198 0.4189 0.08888
2026 6 27 61218 0.1779 0.4423 0.05539 2026 8 1 61253 0.2206 0.4178 0.08954
2026 6 28 61219 0.1792 0.4418 0.05654 2026 8 2 61254 0.2214 0.4167 0.09007
2026 6 29 61220 0.1805 0.4413 0.05779 2026 8 3 61255 0.2221 0.4156 0.09056
2026 6 30 61221 0.1818 0.4408 0.05910 2026 8 4 61256 0.2228 0.4145 0.09105
2026 7 1 61222 0.1831 0.4402 0.06048 2026 8 5 61257 0.2236 0.4133 0.09163
2026 7 2 61223 0.1844 0.4397 0.06171 2026 8 6 61258 0.2242 0.4122 0.09239
2026 7 3 61224 0.1856 0.4391 0.06280 2026 8 7 61259 0.2249 0.4110 0.09343
2026 7 4 61225 0.1869 0.4385 0.06369 2026 8 8 61260 0.2255 0.4099 0.09474
2026 7 5 61226 0.1881 0.4378 0.06434 2026 8 9 61261 0.2261 0.4087 0.09612
2026 7 6 61227 0.1893 0.4372 0.06480 2026 8 10 61262 0.2267 0.4075 0.09750
2026 7 7 61228 0.1905 0.4365 0.06523 2026 8 11 61263 0.2273 0.4063 0.09878
2026 7 8 61229 0.1917 0.4358 0.06572 2026 8 12 61264 0.2278 0.4051 0.09973
2026 7 9 61230 0.1929 0.4351 0.06633 2026 8 13 61265 0.2284 0.4039 0.10038
2026 7 10 61231 0.1941 0.4344 0.06723 2026 8 14 61266 0.2288 0.4027 0.10079
2026 7 11 61232 0.1952 0.4336 0.06843 2026 8 15 61267 0.2293 0.4015 0.10111
2026 7 12 61233 0.1964 0.4329 0.06985 2026 8 16 61268 0.2297 0.4002 0.10141
2026 7 13 61234 0.1975 0.4321 0.07146 2026 8 17 61269 0.2302 0.3990 0.10185
2026 7 14 61235 0.1986 0.4313 0.07292 2026 8 18 61270 0.2305 0.3977 0.10247
2026 7 15 61236 0.1996 0.4304 0.07413 2026 8 19 61271 0.2309 0.3965 0.10329
2026 7 16 61237 0.2007 0.4296 0.07502 2026 8 20 61272 0.2312 0.3952 0.10434
2026 7 17 61238 0.2018 0.4288 0.07557 2026 8 21 61273 0.2316 0.3939 0.10554
2026 7 18 61239 0.2028 0.4279 0.07596 2026 8 22 61274 0.2318 0.3927 0.10684
2026 7 19 61240 0.2038 0.4270 0.07629 2026 8 23 61275 0.2321 0.3914 0.10813
2026 7 20 61241 0.2048 0.4261 0.07668 2026 8 24 61276 0.2323 0.3901 0.10930
2026 7 21 61242 0.2058 0.4252 0.07728 2026 8 25 61277 0.2325 0.3888 0.11041
2026 7 22 61243 0.2067 0.4242 0.07807 2026 8 26 61278 0.2327 0.3876 0.11138
2026 7 23 61244 0.2076 0.4233 0.07908 2026 8 27 61279 0.2329 0.3863 0.11213
2026 7 24 61245 0.2085 0.4223 0.08036 2026 8 28 61280 0.2330 0.3850 0.11267
2026 7 25 61246 0.2094 0.4213 0.08180 2026 8 29 61281 0.2331 0.3837 0.11302
2026 7 26 61247 0.2103 0.4203 0.08338 2026 8 30 61282 0.2332 0.3824 0.11313
2026 7 27 61248 0.2112 0.4193 0.08491 2026 8 31 61283 0.2332 0.3811 0.11316
2026 7 28 61249 0.2120 0.4183 0.08647 2026 9 1 61284 0.2332 0.3798 0.11330
2026 7 29 61250 0.2128 0.4173 0.08786 2026 9 2 61285 0.2332 0.3785 0.11355
2026 7 30 61251 0.2136 0.4162 0.08904 2026 9 3 61286 0.2332 0.3772 0.11400
2026 7 31 61252 0.2143 0.4151 0.08998 2026 9 4 61287 0.2331 0.3759 0.11460
2026 8 1 61253 0.2151 0.4141 0.09076 2026 9 5 61288 0.2330 0.3746 0.11532
2026 8 2 61254 0.2158 0.4130 0.09130 2026 9 6 61289 0.2329 0.3733 0.11599
2026 8 3 61255 0.2165 0.4119 0.09180 2026 9 7 61290 0.2328 0.3721 0.11654
2026 8 4 61256 0.2172 0.4108 0.09232 2026 9 8 61291 0.2326 0.3708 0.11692
2026 8 5 61257 0.2178 0.4096 0.09294 2026 9 9 61292 0.2324 0.3695 0.11713
2026 8 6 61258 0.2184 0.4085 0.09372 2026 9 10 61293 0.2322 0.3682 0.11707
2026 8 7 61259 0.2190 0.4074 0.09466 2026 9 11 61294 0.2319 0.3669 0.11686
2026 8 8 61260 0.2196 0.4062 0.09591 2026 9 12 61295 0.2317 0.3657 0.11659
2026 8 9 61261 0.2202 0.4050 0.09728 2026 9 13 61296 0.2314 0.3644 0.11633
2026 8 10 61262 0.2207 0.4039 0.09868 2026 9 14 61297 0.2310 0.3631 0.11621
2026 8 11 61263 0.2212 0.4027 0.09988 2026 9 15 61298 0.2307 0.3619 0.11636
2026 8 12 61264 0.2217 0.4015 0.10077 2026 9 16 61299 0.2303 0.3606 0.11676
2026 8 13 61265 0.2221 0.4003 0.10141 2026 9 17 61300 0.2299 0.3594 0.11735
2026 8 14 61266 0.2226 0.3991 0.10182 2026 9 18 61301 0.2295 0.3581 0.11815
These predictions are based on all announced leap seconds. These predictions are based on all announced leap seconds.
CELESTIAL POLE OFFSET SERIES:
NEOS Celestial Pole Offset Series
MJD dpsi error deps error
(msec. of arc)
60914 -122.00 0.72 -10.11 0.10
60915 -122.35 0.72 -10.32 0.10
60916 -122.39 0.72 -10.40 0.10
60917 -122.15 0.87 -10.37 0.08
60918 -121.82 1.55 -10.36 0.13
60919 -121.58 1.55 -10.47 0.13
60920 -121.41 2.06 -10.63 0.17
60921 -121.29 1.79 -10.71 0.18
60922 -121.23 1.79 -10.68 0.18
60923 -121.31 1.79 -10.60 0.18
IAU2000A Celestial Pole Offset Series
MJD dX error dY error
(msec. of arc)
60914 0.331 0.288 -0.053 0.104
60915 0.361 0.288 -0.033 0.104
60916 0.397 0.288 -0.014 0.104
60917 0.439 0.346 0.001 0.079
60918 0.479 0.618 0.011 0.128
60919 0.514 0.618 0.014 0.128
60920 0.536 0.819 0.010 0.173
60921 0.540 0.714 -0.003 0.178
60922 0.531 0.714 -0.023 0.178
60923 0.513 0.714 -0.047 0.178
)--"; )--";

233
mcc/mcc_configfile.h Normal file
View File

@ -0,0 +1,233 @@
#pragma once
/* MOUNT CONTRO: COMPONENTS */
#include <concepts>
#include <cstddef>
#include <filesystem>
#include <fstream>
#include <unordered_map>
#include <variant>
#include "mcc_traits.h"
#include "mcc_utils.h"
namespace mcc
{
/*
* A VERY SIMPLE CONFIG-FILE READER-PARSER
*
* format:
* key = value1, value2, ...
*
* a line beginning from '#' symbol is a comment and will be skipped
* a line containing from only ' ' is skipped
*/
class MccConfigFile
{
public:
static constexpr char COMMENT_SYMBOL = '#';
static constexpr char KEY_VALUE_DELIM = '=';
static constexpr char VALUE_VALUE_DELIM = ',';
typedef std::variant<std::monostate, std::string, std::vector<std::string>> config_value_t;
typedef std::unordered_map<std::string, config_value_t> config_t;
// typedef std::unordered_map<std::string, std::variant<std::monostate, std::string, std::vector<std::string>>>
// config_t;
MccConfigFile(const config_t& init_config = {})
: _currentFilename(), _currentConfig(init_config) {
};
MccConfigFile(std::derived_from<std::basic_istream<char>> auto const& stream, const config_t& init_config = {})
: MccConfigFile(init_config)
{
load(stream);
}
MccConfigFile(traits::mcc_input_char_range auto const& filename, const config_t& init_config = {})
: MccConfigFile(init_config)
{
load(filename);
}
config_value_t& operator[](traits::mcc_input_char_range auto&& key)
{
if constexpr (std::convertible_to<std::decay_t<decltype(key)>, typename config_t::key_type>) {
return _currentConfig[key];
} else {
typename config_t::key_type skey;
std::ranges::copy(std::forward<decltype(key)>(key), std::back_inserter(skey));
return _currentConfig[key];
}
}
const config_value_t& operator[](traits::mcc_input_char_range auto&& key) const
{
return const_cast<const MccConfigFile&>(*this).operator[](std::forward<decltype(key)>(key));
}
std::error_code load(std::derived_from<std::basic_istream<char>> auto& stream)
{
_currentConfig.clear();
// read line-by-line
for (std::string line; std::getline(stream, line);) {
if (line.empty()) {
continue;
}
auto sv = utils::trimSpaces(line, utils::TrimType::TRIM_LEFT);
if (sv.size()) {
if (sv[0] == COMMENT_SYMBOL) { // comment string
continue;
}
auto it = std::ranges::find(sv, KEY_VALUE_DELIM);
if (it == sv.begin()) { // empty key! skip!
continue;
}
auto key = utils::trimSpaces(std::string_view{sv.begin(), it}, utils::TrimType::TRIM_RIGHT);
std::string skey = {key.begin(), key.end()};
if (it == sv.end()) { // only key
_currentConfig[skey] = {};
} else { // key and value
auto vals = utils::trimSpaces(std::string_view{it + 1, sv.end()});
auto it_dlm = std::ranges::find(vals, VALUE_VALUE_DELIM);
if (it_dlm == vals.end()) { // scalar value
_currentConfig[skey] = std::string{vals.begin(), vals.end()};
} else { // vector of values
std::vector<std::string> elems;
// while (it_dlm != vals.end()) {
// auto el = utils::trimSpaces(std::string_view{vals.begin(), it_dlm});
// elems.emplace_back(el.begin(), el.end());
// vals = {it_dlm + 1, vals.end()};
// it_dlm = std::ranges::find(vals, VALUE_VALUE_DELIM);
// }
for (const auto& el :
std::views::split(vals, VALUE_VALUE_DELIM) |
std::views::transform([](const auto& sv) { return utils::trimSpaces(sv); })) {
elems.emplace_back(el.begin(), el.end());
}
_currentConfig[skey] = elems;
}
}
} else { // the string contains from only spaces
continue;
}
}
return {};
}
std::error_code load(traits::mcc_input_char_range auto const& filename)
{
std::filesystem::path pt(filename.begin(), filename.end());
// first, check file existence
std::error_code ec;
auto pt_cn = std::filesystem::canonical(pt, ec);
if (ec) {
return ec;
}
std::ifstream fin(pt_cn);
if (!fin.is_open()) {
return std::make_error_code(std::errc::no_such_file_or_directory);
// return std::make_error_code(std::errc::permission_denied);
}
_currentFilename = pt_cn.string();
load(fin);
fin.close();
return {};
}
std::error_code save() const
{
std::ofstream fst(_currentFilename, std::ios::trunc);
if (!fst.is_open()) {
return std::make_error_code(std::errc::no_such_file_or_directory);
}
const std::time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
fst << "#\n";
fst << "# Created by MccConfigFile class (" << std::put_time(std::localtime(&now), "[%F %T]") << ")\n";
fst << "#\n";
for (auto& [key, value] : _currentConfig) {
fst << key;
if (auto v_str = std::get_if<1>(&value)) {
fst << " = " << *v_str;
} else if (auto v_vec = std::get_if<2>(&value)) {
fst << " = " << (*v_vec)[0];
for (size_t i = 1; i < v_vec->size(); ++i) {
fst << ", " << (*v_vec)[i];
}
} // std::monostate here
fst << "\n";
}
fst.close();
return {};
}
std::error_code save(traits::mcc_input_char_range auto const& filename)
{
if (std::distance(filename.begin(), filename.end()) == 0) {
return std::make_error_code(std::errc::no_such_file_or_directory);
}
std::ranges::copy(filename, std::back_inserter(_currentFilename));
return save();
}
std::string currentFilename() const
{
return _currentFilename;
}
const config_t& config() const
{
return _currentConfig;
}
// config_t& config()
// {
// return _currentConfig;
// }
private:
std::string _currentFilename;
config_t _currentConfig;
};
} // namespace mcc

View File

@ -87,6 +87,13 @@ namespace mcc
// PCM_TYPE_BSPLINE - pure 2D B-spline corrections // PCM_TYPE_BSPLINE - pure 2D B-spline corrections
enum class MccDefaultPCMType { PCM_TYPE_GEOMETRY, PCM_TYPE_GEOMETRY_BSPLINE, PCM_TYPE_BSPLINE }; enum class MccDefaultPCMType { PCM_TYPE_GEOMETRY, PCM_TYPE_GEOMETRY_BSPLINE, PCM_TYPE_BSPLINE };
template <MccDefaultPCMType TYPE>
static constexpr std::string_view MccDefaultPCMTypeString =
TYPE == MccDefaultPCMType::PCM_TYPE_GEOMETRY ? "GEOMETRY"
: TYPE == MccDefaultPCMType::PCM_TYPE_GEOMETRY_BSPLINE ? "GEOMETRY-BSPLINE"
: TYPE == MccDefaultPCMType::PCM_TYPE_GEOMETRY_BSPLINE ? "BSPLINE"
: "UNKNOWN";
template <MccMountType MOUNT_TYPE> template <MccMountType MOUNT_TYPE>
class MccDefaultPCM : public mcc_PCM_interface_t<std::error_code> class MccDefaultPCM : public mcc_PCM_interface_t<std::error_code>
{ {