This commit is contained in:
Timur A. Fatkhullin 2025-08-04 22:23:26 +03:00
parent f661dfad44
commit 864e257884
8 changed files with 554 additions and 633 deletions

View File

@ -50,12 +50,16 @@ struct AsibFM700MountControls {
AsibFM700PointingErrorCorrection PEC;
AsibFM700Hardware hardware;
AsibFM700Telemetry telemetry{astrometryEngine, PEC, hardware};
AsibFM700SlewModel<LoggerT> slewModel;
AsibFM700GuidingModel<LoggerT> guidingModel;
std::tuple<mcc::MccAltLimitPZ<mcc::MccAltLimitKind::MIN_ALT_LIMIT>> prohibitedZones;
AsibFM700SlewModel<LoggerT> slewModel{PEC, hardware, prohibitedZones};
AsibFM700GuidingModel<LoggerT> guidingModel{PEC, hardware, prohibitedZones};
};
static_assert(mcc::traits::mcc_mount_controls_c<AsibFM700MountControls<mcc::utils::MccSpdlogLogger>>);
// global mount configuration
struct AsibFM700Config {

View File

@ -15,10 +15,10 @@ static std::string MCC_DEFAULT_LEAP_SECONDS_FILE = R"--(
# Value of TAI-UTC in second valid beetween the initial value until
# the epoch given on the next line. The last line reads that NO
# leap second was introduced since the corresponding date
# Updated through IERS Bulletin 69 issued in January 2025
# Updated through IERS Bulletin 70 issued in July 2025
#
#
# File expires on 28 December 2025
# File expires on 28 June 2026
#
#
# MJD Date TAI-UTC (s)
@ -67,7 +67,7 @@ static std::string MCC_DEFAULT_IERS_BULLETIN_A_FILE = R"--(
* *
* Rapid Service/Prediction of Earth Orientation *
**********************************************************************
3 July 2025 Vol. XXXVIII No. 027
31 July 2025 Vol. XXXVIII No. 031
______________________________________________________________________
GENERAL INFORMATION:
MJD = Julian Date - 2 400 000.5 days
@ -76,13 +76,15 @@ static std::string MCC_DEFAULT_IERS_BULLETIN_A_FILE = R"--(
where pi = 3.14159265... and T is the date in Besselian years.
TT = TAI + 32.184 seconds
DUT1= (UT1-UTC) transmitted with time signals
= 0.0 seconds beginning 26 December 2024 at 0000 UTC
= +0.1 seconds beginning 10 July 2025 at 0000 UTC
Beginning 1 January 2017:
TAI-UTC = 37.000 000 seconds
***********************************************************************
* ANNOUNCEMENTS: *
* *
* There will NOT be a leap second introduced in UTC *
* at the end of December 2025. *
* *
* The primary source for IERS Rapid Service/Prediction Center (RS/PC) *
* data products is the official IERS RS/PC website: *
* https://maia.usno.navy.mil *
@ -114,48 +116,13 @@ static std::string MCC_DEFAULT_IERS_BULLETIN_A_FILE = R"--(
IERS Rapid Service
MJD x error y error UT1-UTC error
" " " " s s
25 6 27 60853 0.15472 .00009 0.44036 .00009 0.040354 0.000022
25 6 28 60854 0.15644 .00009 0.44013 .00009 0.041389 0.000023
25 6 29 60855 0.15844 .00009 0.44006 .00009 0.042204 0.000024
25 6 30 60856 0.16029 .00009 0.44003 .00009 0.042854 0.000016
25 7 1 60857 0.16204 .00009 0.43988 .00009 0.043427 0.000013
25 7 2 60858 0.16365 .00009 0.43965 .00009 0.043890 0.000012
25 7 3 60859 0.16516 .00009 0.43931 .00009 0.044366 0.000009
IERS Final Values
MJD x y UT1-UTC
" " s
25 5 2 60797 0.0865 0.4180 0.03007
25 5 3 60798 0.0873 0.4191 0.03031
25 5 4 60799 0.0882 0.4202 0.03039
25 5 5 60800 0.0889 0.4212 0.03031
25 5 6 60801 0.0898 0.4221 0.03006
25 5 7 60802 0.0907 0.4232 0.02970
25 5 8 60803 0.0915 0.4238 0.02932
25 5 9 60804 0.0925 0.4244 0.02898
25 5 10 60805 0.0939 0.4247 0.02874
25 5 11 60806 0.0955 0.4251 0.02855
25 5 12 60807 0.0970 0.4259 0.02849
25 5 13 60808 0.0980 0.4268 0.02857
25 5 14 60809 0.0990 0.4277 0.02880
25 5 15 60810 0.1001 0.4288 0.02915
25 5 16 60811 0.1008 0.4299 0.02958
25 5 17 60812 0.1012 0.4309 0.02999
25 5 18 60813 0.1016 0.4316 0.03034
25 5 19 60814 0.1027 0.4318 0.03056
25 5 20 60815 0.1040 0.4321 0.03061
25 5 21 60816 0.1052 0.4328 0.03042
25 5 22 60817 0.1063 0.4338 0.02998
25 5 23 60818 0.1073 0.4346 0.02931
25 5 24 60819 0.1081 0.4356 0.02856
25 5 25 60820 0.1086 0.4365 0.02791
25 5 26 60821 0.1096 0.4368 0.02748
25 5 27 60822 0.1106 0.4373 0.02744
25 5 28 60823 0.1114 0.4375 0.02772
25 5 29 60824 0.1116 0.4380 0.02813
25 5 30 60825 0.1120 0.4375 0.02851
25 5 31 60826 0.1127 0.4374 0.02881
25 6 1 60827 0.1132 0.4377 0.02899
25 7 25 60881 0.19849 .00009 0.43231 .00009 0.060664 0.000023
25 7 26 60882 0.19962 .00009 0.43171 .00009 0.061061 0.000018
25 7 27 60883 0.20063 .00009 0.43095 .00009 0.061275 0.000018
25 7 28 60884 0.20201 .00009 0.43031 .00009 0.061376 0.000016
25 7 29 60885 0.20393 .00009 0.42977 .00009 0.061481 0.000016
25 7 30 60886 0.20609 .00009 0.42900 .00009 0.061552 0.000012
25 7 31 60887 0.20824 .00009 0.42803 .00009 0.061682 0.000006
_______________________________________________________________________
@ -163,486 +130,401 @@ static std::string MCC_DEFAULT_IERS_BULLETIN_A_FILE = R"--(
The following formulas will not reproduce the predictions given below,
but may be used to extend the predictions beyond the end of this table.
x = 0.1314 + 0.0400 cos A + 0.1547 sin A - 0.0075 cos C - 0.0886 sin C
y = 0.3810 + 0.1454 cos A - 0.0330 sin A - 0.0886 cos C + 0.0075 sin C
UT1-UTC = 0.0606 + 0.00011 (MJD - 60867) - (UT2-UT1)
x = 0.1419 + 0.0946 cos A + 0.1166 sin A - 0.0303 cos C - 0.0701 sin C
y = 0.3863 + 0.1145 cos A - 0.0825 sin A - 0.0701 cos C + 0.0303 sin C
UT1-UTC = 0.0464 + 0.00010 (MJD - 60895) - (UT2-UT1)
where A = 2*pi*(MJD-60859)/365.25 and C = 2*pi*(MJD-60859)/435.
where A = 2*pi*(MJD-60887)/365.25 and C = 2*pi*(MJD-60887)/435.
TAI-UTC(MJD 60860) = 37.0
TAI-UTC(MJD 60888) = 37.0
The accuracy may be estimated from the expressions:
S x,y = 0.00068 (MJD-60859)**0.80 S t = 0.00025 (MJD-60859)**0.75
S x,y = 0.00068 (MJD-60887)**0.80 S t = 0.00025 (MJD-60887)**0.75
Estimated accuracies are: Predictions 10 d 20 d 30 d 40 d
Polar coord's 0.004 0.007 0.010 0.013
UT1-UTC 0.0014 0.0024 0.0032 0.0040
MJD x(arcsec) y(arcsec) UT1-UTC(sec)
2025 7 4 60860 0.1666 0.4389 0.04491
2025 7 5 60861 0.1680 0.4385 0.04561
2025 7 6 60862 0.1694 0.4380 0.04651
2025 7 7 60863 0.1708 0.4375 0.04762
2025 7 8 60864 0.1721 0.4369 0.04889
2025 7 9 60865 0.1734 0.4364 0.05025
2025 7 10 60866 0.1747 0.4359 0.05163
2025 7 11 60867 0.1760 0.4353 0.05295
2025 7 12 60868 0.1772 0.4347 0.05411
2025 7 13 60869 0.1785 0.4341 0.05505
2025 7 14 60870 0.1797 0.4335 0.05573
2025 7 15 60871 0.1809 0.4329 0.05615
2025 7 16 60872 0.1821 0.4322 0.05641
2025 7 17 60873 0.1832 0.4315 0.05666
2025 7 18 60874 0.1844 0.4308 0.05701
2025 7 19 60875 0.1855 0.4301 0.05759
2025 7 20 60876 0.1867 0.4294 0.05843
2025 7 21 60877 0.1878 0.4286 0.05953
2025 7 22 60878 0.1889 0.4278 0.06082
2025 7 23 60879 0.1899 0.4271 0.06216
2025 7 24 60880 0.1910 0.4263 0.06342
2025 7 25 60881 0.1920 0.4254 0.06451
2025 7 26 60882 0.1931 0.4246 0.06536
2025 7 27 60883 0.1941 0.4237 0.06600
2025 7 28 60884 0.1951 0.4229 0.06647
2025 7 29 60885 0.1960 0.4220 0.06686
2025 7 30 60886 0.1970 0.4211 0.06726
2025 7 31 60887 0.1979 0.4201 0.06774
2025 8 1 60888 0.1988 0.4192 0.06835
2025 8 2 60889 0.1997 0.4182 0.06912
2025 8 3 60890 0.2006 0.4173 0.07005
2025 8 4 60891 0.2015 0.4163 0.07113
2025 8 5 60892 0.2023 0.4153 0.07233
2025 8 6 60893 0.2031 0.4143 0.07357
2025 8 7 60894 0.2039 0.4132 0.07478
2025 8 8 60895 0.2047 0.4122 0.07584
2025 8 9 60896 0.2054 0.4111 0.07666
2025 8 10 60897 0.2062 0.4101 0.07718
2025 8 11 60898 0.2069 0.4090 0.07742
2025 8 12 60899 0.2075 0.4079 0.07746
2025 8 13 60900 0.2082 0.4068 0.07741
2025 8 14 60901 0.2089 0.4057 0.07742
2025 8 15 60902 0.2095 0.4045 0.07762
2025 8 16 60903 0.2101 0.4034 0.07809
2025 8 17 60904 0.2106 0.4022 0.07884
2025 8 18 60905 0.2112 0.4011 0.07981
2025 8 19 60906 0.2117 0.3999 0.08088
2025 8 20 60907 0.2122 0.3987 0.08193
2025 8 21 60908 0.2127 0.3975 0.08285
2025 8 22 60909 0.2132 0.3963 0.08355
2025 8 23 60910 0.2136 0.3951 0.08403
2025 8 24 60911 0.2140 0.3939 0.08432
2025 8 25 60912 0.2144 0.3927 0.08451
2025 8 26 60913 0.2147 0.3915 0.08467
2025 8 27 60914 0.2151 0.3902 0.08488
2025 8 28 60915 0.2154 0.3890 0.08522
2025 8 29 60916 0.2157 0.3877 0.08573
2025 8 30 60917 0.2159 0.3865 0.08641
2025 8 31 60918 0.2162 0.3852 0.08727
2025 9 1 60919 0.2164 0.3840 0.08825
2025 9 2 60920 0.2165 0.3827 0.08931
2025 9 3 60921 0.2167 0.3814 0.09034
2025 9 4 60922 0.2168 0.3802 0.09125
2025 9 5 60923 0.2169 0.3789 0.09195
2025 9 6 60924 0.2170 0.3776 0.09236
2025 9 7 60925 0.2171 0.3763 0.09245
2025 9 8 60926 0.2171 0.3750 0.09226
2025 9 9 60927 0.2171 0.3738 0.09190
2025 9 10 60928 0.2171 0.3725 0.09154
2025 9 11 60929 0.2171 0.3712 0.09134
2025 9 12 60930 0.2170 0.3699 0.09141
2025 9 13 60931 0.2169 0.3686 0.09178
2025 9 14 60932 0.2168 0.3673 0.09239
2025 9 15 60933 0.2167 0.3661 0.09314
2025 9 16 60934 0.2165 0.3648 0.09389
2025 9 17 60935 0.2163 0.3635 0.09452
2025 9 18 60936 0.2161 0.3622 0.09495
2025 9 19 60937 0.2158 0.3609 0.09516
2025 9 20 60938 0.2156 0.3597 0.09517
2025 9 21 60939 0.2153 0.3584 0.09503
2025 9 22 60940 0.2150 0.3571 0.09484
2025 9 23 60941 0.2146 0.3559 0.09466
2025 9 24 60942 0.2142 0.3546 0.09458
2025 9 25 60943 0.2139 0.3534 0.09465
2025 9 26 60944 0.2134 0.3521 0.09489
2025 9 27 60945 0.2130 0.3509 0.09530
2025 9 28 60946 0.2125 0.3497 0.09585
2025 9 29 60947 0.2120 0.3484 0.09649
2025 9 30 60948 0.2115 0.3472 0.09713
2025 10 1 60949 0.2110 0.3460 0.09770
2025 10 2 60950 0.2104 0.3448 0.09809
2025 10 3 60951 0.2099 0.3436 0.09823
2025 10 4 60952 0.2093 0.3424 0.09807
2025 10 5 60953 0.2086 0.3412 0.09759
2025 10 6 60954 0.2080 0.3401 0.09687
2025 10 7 60955 0.2073 0.3389 0.09605
2025 10 8 60956 0.2066 0.3378 0.09532
2025 10 9 60957 0.2059 0.3366 0.09483
2025 10 10 60958 0.2052 0.3355 0.09464
2025 10 11 60959 0.2044 0.3344 0.09475
2025 10 12 60960 0.2036 0.3333 0.09504
2025 10 13 60961 0.2028 0.3322 0.09538
2025 10 14 60962 0.2020 0.3311 0.09563
2025 10 15 60963 0.2012 0.3300 0.09571
2025 10 16 60964 0.2003 0.3290 0.09557
2025 10 17 60965 0.1994 0.3280 0.09524
2025 10 18 60966 0.1985 0.3269 0.09475
2025 10 19 60967 0.1976 0.3259 0.09419
2025 10 20 60968 0.1967 0.3249 0.09361
2025 10 21 60969 0.1957 0.3239 0.09312
2025 10 22 60970 0.1947 0.3230 0.09276
2025 10 23 60971 0.1937 0.3220 0.09259
2025 10 24 60972 0.1927 0.3211 0.09259
2025 10 25 60973 0.1917 0.3202 0.09276
2025 10 26 60974 0.1906 0.3193 0.09305
2025 10 27 60975 0.1896 0.3184 0.09337
2025 10 28 60976 0.1885 0.3175 0.09366
2025 10 29 60977 0.1874 0.3166 0.09383
2025 10 30 60978 0.1863 0.3158 0.09380
2025 10 31 60979 0.1851 0.3150 0.09350
2025 11 1 60980 0.1840 0.3142 0.09291
2025 11 2 60981 0.1828 0.3134 0.09206
2025 11 3 60982 0.1817 0.3126 0.09105
2025 11 4 60983 0.1805 0.3119 0.09004
2025 11 5 60984 0.1793 0.3112 0.08919
2025 11 6 60985 0.1781 0.3105 0.08864
2025 11 7 60986 0.1768 0.3098 0.08841
2025 11 8 60987 0.1756 0.3091 0.08843
2025 11 9 60988 0.1743 0.3085 0.08858
2025 11 10 60989 0.1731 0.3078 0.08870
2025 11 11 60990 0.1718 0.3072 0.08868
2025 11 12 60991 0.1705 0.3066 0.08847
2025 11 13 60992 0.1692 0.3061 0.08807
2025 11 14 60993 0.1679 0.3055 0.08754
2025 11 15 60994 0.1666 0.3050 0.08696
2025 11 16 60995 0.1652 0.3045 0.08638
2025 11 17 60996 0.1639 0.3040 0.08589
2025 11 18 60997 0.1626 0.3035 0.08554
2025 11 19 60998 0.1612 0.3031 0.08537
2025 11 20 60999 0.1598 0.3027 0.08539
2025 11 21 61000 0.1585 0.3023 0.08559
2025 11 22 61001 0.1571 0.3019 0.08593
2025 11 23 61002 0.1557 0.3015 0.08634
2025 11 24 61003 0.1543 0.3012 0.08675
2025 11 25 61004 0.1529 0.3009 0.08707
2025 11 26 61005 0.1515 0.3006 0.08724
2025 11 27 61006 0.1501 0.3004 0.08718
2025 11 28 61007 0.1487 0.3001 0.08688
2025 11 29 61008 0.1473 0.2999 0.08634
2025 11 30 61009 0.1459 0.2997 0.08562
2025 12 1 61010 0.1445 0.2995 0.08484
2025 12 2 61011 0.1431 0.2994 0.08414
2025 12 3 61012 0.1417 0.2993 0.08368
2025 12 4 61013 0.1402 0.2991 0.08352
2025 12 5 61014 0.1388 0.2991 0.08365
2025 12 6 61015 0.1374 0.2990 0.08395
2025 12 7 61016 0.1360 0.2990 0.08429
2025 12 8 61017 0.1345 0.2990 0.08452
2025 12 9 61018 0.1331 0.2990 0.08456
2025 12 10 61019 0.1317 0.2990 0.08439
2025 12 11 61020 0.1303 0.2991 0.08408
2025 12 12 61021 0.1288 0.2991 0.08369
2025 12 13 61022 0.1274 0.2993 0.08332
2025 12 14 61023 0.1260 0.2994 0.08304
2025 12 15 61024 0.1246 0.2995 0.08289
2025 12 16 61025 0.1232 0.2997 0.08293
2025 12 17 61026 0.1218 0.2999 0.08316
2025 12 18 61027 0.1204 0.3001 0.08357
2025 12 19 61028 0.1190 0.3004 0.08414
2025 12 20 61029 0.1176 0.3006 0.08479
2025 12 21 61030 0.1162 0.3009 0.08546
2025 12 22 61031 0.1149 0.3012 0.08606
2025 12 23 61032 0.1135 0.3016 0.08651
2025 12 24 61033 0.1121 0.3019 0.08676
2025 12 25 61034 0.1108 0.3023 0.08678
2025 12 26 61035 0.1094 0.3027 0.08657
2025 12 27 61036 0.1081 0.3031 0.08620
2025 12 28 61037 0.1068 0.3035 0.08575
2025 12 29 61038 0.1055 0.3040 0.08535
2025 12 30 61039 0.1042 0.3045 0.08513
2025 12 31 61040 0.1029 0.3050 0.08516
2026 1 1 61041 0.1016 0.3055 0.08548
2026 1 2 61042 0.1003 0.3061 0.08601
2026 1 3 61043 0.0990 0.3067 0.08663
2026 1 4 61044 0.0978 0.3072 0.08720
2026 1 5 61045 0.0966 0.3079 0.08759
2026 1 6 61046 0.0953 0.3085 0.08776
2026 1 7 61047 0.0941 0.3091 0.08775
2026 1 8 61048 0.0929 0.3098 0.08763
2026 1 9 61049 0.0917 0.3105 0.08749
2026 1 10 61050 0.0906 0.3112 0.08742
2026 1 11 61051 0.0894 0.3120 0.08746
2026 1 12 61052 0.0883 0.3127 0.08766
2026 1 13 61053 0.0871 0.3135 0.08801
2026 1 14 61054 0.0860 0.3143 0.08852
2026 1 15 61055 0.0849 0.3151 0.08915
2026 1 16 61056 0.0838 0.3159 0.08984
2026 1 17 61057 0.0828 0.3168 0.09052
2026 1 18 61058 0.0817 0.3176 0.09108
2026 1 19 61059 0.0807 0.3185 0.09145
2026 1 20 61060 0.0797 0.3194 0.09156
2026 1 21 61061 0.0787 0.3203 0.09138
2026 1 22 61062 0.0777 0.3212 0.09092
2026 1 23 61063 0.0768 0.3222 0.09023
2026 1 24 61064 0.0758 0.3232 0.08943
2026 1 25 61065 0.0749 0.3241 0.08864
2026 1 26 61066 0.0740 0.3251 0.08797
2026 1 27 61067 0.0731 0.3261 0.08752
2026 1 28 61068 0.0723 0.3272 0.08730
2026 1 29 61069 0.0715 0.3282 0.08730
2026 1 30 61070 0.0706 0.3293 0.08740
2026 1 31 61071 0.0698 0.3303 0.08748
2026 2 1 61072 0.0691 0.3314 0.08742
2026 2 2 61073 0.0683 0.3325 0.08715
2026 2 3 61074 0.0676 0.3336 0.08668
2026 2 4 61075 0.0669 0.3347 0.08606
2026 2 5 61076 0.0662 0.3359 0.08538
2026 2 6 61077 0.0655 0.3370 0.08476
2026 2 7 61078 0.0649 0.3381 0.08430
2026 2 8 61079 0.0643 0.3393 0.08405
2026 2 9 61080 0.0637 0.3405 0.08401
2026 2 10 61081 0.0631 0.3417 0.08423
2026 2 11 61082 0.0625 0.3429 0.08462
2026 2 12 61083 0.0620 0.3441 0.08513
2026 2 13 61084 0.0615 0.3453 0.08570
2026 2 14 61085 0.0610 0.3465 0.08618
2026 2 15 61086 0.0606 0.3478 0.08646
2026 2 16 61087 0.0601 0.3490 0.08651
2026 2 17 61088 0.0597 0.3502 0.08629
2026 2 18 61089 0.0594 0.3515 0.08575
2026 2 19 61090 0.0590 0.3528 0.08502
2026 2 20 61091 0.0587 0.3540 0.08419
2026 2 21 61092 0.0584 0.3553 0.08335
2026 2 22 61093 0.0581 0.3566 0.08261
2026 2 23 61094 0.0578 0.3579 0.08206
2026 2 24 61095 0.0576 0.3592 0.08182
2026 2 25 61096 0.0574 0.3605 0.08174
2026 2 26 61097 0.0572 0.3618 0.08178
2026 2 27 61098 0.0570 0.3631 0.08189
2026 2 28 61099 0.0569 0.3644 0.08189
2026 3 1 61100 0.0568 0.3657 0.08172
2026 3 2 61101 0.0567 0.3670 0.08136
2026 3 3 61102 0.0567 0.3683 0.08079
2026 3 4 61103 0.0566 0.3697 0.08008
2026 3 5 61104 0.0566 0.3710 0.07935
2026 3 6 61105 0.0567 0.3723 0.07875
2026 3 7 61106 0.0567 0.3736 0.07836
2026 3 8 61107 0.0568 0.3749 0.07813
2026 3 9 61108 0.0569 0.3763 0.07808
2026 3 10 61109 0.0570 0.3776 0.07827
2026 3 11 61110 0.0571 0.3789 0.07855
2026 3 12 61111 0.0573 0.3802 0.07886
2026 3 13 61112 0.0575 0.3815 0.07917
2026 3 14 61113 0.0577 0.3828 0.07941
2026 3 15 61114 0.0580 0.3841 0.07945
2026 3 16 61115 0.0583 0.3855 0.07926
2026 3 17 61116 0.0586 0.3868 0.07879
2026 3 18 61117 0.0589 0.3881 0.07805
2026 3 19 61118 0.0592 0.3893 0.07714
2026 3 20 61119 0.0596 0.3906 0.07617
2026 3 21 61120 0.0600 0.3919 0.07528
2026 3 22 61121 0.0604 0.3932 0.07457
2026 3 23 61122 0.0609 0.3945 0.07407
2026 3 24 61123 0.0614 0.3957 0.07389
2026 3 25 61124 0.0619 0.3970 0.07393
2026 3 26 61125 0.0624 0.3982 0.07404
2026 3 27 61126 0.0629 0.3995 0.07410
2026 3 28 61127 0.0635 0.4007 0.07400
2026 3 29 61128 0.0641 0.4020 0.07359
2026 3 30 61129 0.0647 0.4032 0.07292
2026 3 31 61130 0.0653 0.4044 0.07215
2026 4 1 61131 0.0660 0.4056 0.07125
2026 4 2 61132 0.0667 0.4068 0.07037
2026 4 3 61133 0.0674 0.4080 0.06956
2026 4 4 61134 0.0681 0.4091 0.06893
2026 4 5 61135 0.0689 0.4103 0.06842
2026 4 6 61136 0.0697 0.4114 0.06812
2026 4 7 61137 0.0705 0.4126 0.06802
2026 4 8 61138 0.0713 0.4137 0.06814
2026 4 9 61139 0.0721 0.4148 0.06828
2026 4 10 61140 0.0730 0.4159 0.06842
2026 4 11 61141 0.0739 0.4170 0.06844
2026 4 12 61142 0.0748 0.4180 0.06820
2026 4 13 61143 0.0757 0.4191 0.06770
2026 4 14 61144 0.0766 0.4201 0.06699
2026 4 15 61145 0.0776 0.4212 0.06611
2026 4 16 61146 0.0786 0.4222 0.06511
2026 4 17 61147 0.0796 0.4232 0.06423
2026 4 18 61148 0.0806 0.4242 0.06358
2026 4 19 61149 0.0816 0.4251 0.06321
2026 4 20 61150 0.0827 0.4261 0.06322
2026 4 21 61151 0.0837 0.4270 0.06337
2026 4 22 61152 0.0848 0.4279 0.06356
2026 4 23 61153 0.0859 0.4288 0.06364
2026 4 24 61154 0.0871 0.4297 0.06349
2026 4 25 61155 0.0882 0.4306 0.06314
2026 4 26 61156 0.0894 0.4314 0.06257
2026 4 27 61157 0.0905 0.4322 0.06185
2026 4 28 61158 0.0917 0.4331 0.06111
2026 4 29 61159 0.0929 0.4339 0.06040
2026 4 30 61160 0.0941 0.4346 0.05980
2026 5 1 61161 0.0954 0.4354 0.05946
2026 5 2 61162 0.0966 0.4361 0.05933
2026 5 3 61163 0.0979 0.4368 0.05942
2026 5 4 61164 0.0991 0.4375 0.05971
2026 5 5 61165 0.1004 0.4382 0.06017
2026 5 6 61166 0.1017 0.4388 0.06065
2026 5 7 61167 0.1030 0.4395 0.06110
2026 5 8 61168 0.1043 0.4401 0.06146
2026 5 9 61169 0.1057 0.4407 0.06171
2026 5 10 61170 0.1070 0.4413 0.06171
2026 5 11 61171 0.1084 0.4418 0.06155
2026 5 12 61172 0.1097 0.4423 0.06119
2026 5 13 61173 0.1111 0.4428 0.06070
2026 5 14 61174 0.1125 0.4433 0.06014
2026 5 15 61175 0.1139 0.4438 0.05964
2026 5 16 61176 0.1153 0.4442 0.05948
2026 5 17 61177 0.1167 0.4446 0.05963
2026 5 18 61178 0.1181 0.4450 0.06010
2026 5 19 61179 0.1195 0.4454 0.06068
2026 5 20 61180 0.1209 0.4458 0.06123
2026 5 21 61181 0.1224 0.4461 0.06169
2026 5 22 61182 0.1238 0.4464 0.06196
2026 5 23 61183 0.1252 0.4467 0.06208
2026 5 24 61184 0.1267 0.4469 0.06202
2026 5 25 61185 0.1281 0.4472 0.06187
2026 5 26 61186 0.1296 0.4474 0.06184
2026 5 27 61187 0.1311 0.4476 0.06187
2026 5 28 61188 0.1325 0.4477 0.06209
2026 5 29 61189 0.1340 0.4479 0.06251
2026 5 30 61190 0.1355 0.4480 0.06313
2026 5 31 61191 0.1369 0.4481 0.06394
2026 6 1 61192 0.1384 0.4482 0.06487
2026 6 2 61193 0.1399 0.4482 0.06591
2026 6 3 61194 0.1413 0.4482 0.06694
2026 6 4 61195 0.1428 0.4482 0.06790
2026 6 5 61196 0.1443 0.4482 0.06877
2026 6 6 61197 0.1457 0.4482 0.06950
2026 6 7 61198 0.1472 0.4481 0.07002
2026 6 8 61199 0.1487 0.4480 0.07030
2026 6 9 61200 0.1501 0.4479 0.07051
2026 6 10 61201 0.1516 0.4477 0.07062
2026 6 11 61202 0.1530 0.4476 0.07078
2026 6 12 61203 0.1545 0.4474 0.07103
2026 6 13 61204 0.1559 0.4472 0.07158
2026 6 14 61205 0.1574 0.4469 0.07239
2026 6 15 61206 0.1588 0.4467 0.07343
2026 6 16 61207 0.1602 0.4464 0.07452
2026 6 17 61208 0.1616 0.4461 0.07551
2026 6 18 61209 0.1631 0.4458 0.07621
2026 6 19 61210 0.1645 0.4454 0.07668
2026 6 20 61211 0.1659 0.4450 0.07691
2026 6 21 61212 0.1673 0.4446 0.07694
2026 6 22 61213 0.1686 0.4442 0.07699
2026 6 23 61214 0.1700 0.4438 0.07723
2026 6 24 61215 0.1714 0.4433 0.07764
2026 6 25 61216 0.1727 0.4428 0.07823
2026 6 26 61217 0.1741 0.4423 0.07906
2026 6 27 61218 0.1754 0.4418 0.08011
2026 6 28 61219 0.1768 0.4412 0.08129
2026 6 29 61220 0.1781 0.4406 0.08253
2026 6 30 61221 0.1794 0.4400 0.08379
2026 7 1 61222 0.1807 0.4394 0.08503
2026 7 2 61223 0.1819 0.4388 0.08607
2026 7 3 61224 0.1832 0.4381 0.08690
2025 8 1 60888 0.2101 0.4272 0.06205
2025 8 2 60889 0.2119 0.4263 0.06269
2025 8 3 60890 0.2133 0.4254 0.06357
2025 8 4 60891 0.2145 0.4244 0.06468
2025 8 5 60892 0.2156 0.4234 0.06594
2025 8 6 60893 0.2167 0.4224 0.06727
2025 8 7 60894 0.2177 0.4213 0.06856
2025 8 8 60895 0.2187 0.4202 0.06970
2025 8 9 60896 0.2197 0.4190 0.07060
2025 8 10 60897 0.2206 0.4177 0.07120
2025 8 11 60898 0.2215 0.4164 0.07146
2025 8 12 60899 0.2224 0.4152 0.07142
2025 8 13 60900 0.2232 0.4139 0.07120
2025 8 14 60901 0.2240 0.4127 0.07098
2025 8 15 60902 0.2248 0.4114 0.07091
2025 8 16 60903 0.2255 0.4101 0.07106
2025 8 17 60904 0.2262 0.4089 0.07146
2025 8 18 60905 0.2269 0.4076 0.07208
2025 8 19 60906 0.2275 0.4063 0.07281
2025 8 20 60907 0.2281 0.4049 0.07354
2025 8 21 60908 0.2286 0.4036 0.07414
2025 8 22 60909 0.2291 0.4023 0.07454
2025 8 23 60910 0.2296 0.4009 0.07474
2025 8 24 60911 0.2301 0.3996 0.07478
2025 8 25 60912 0.2305 0.3982 0.07473
2025 8 26 60913 0.2309 0.3968 0.07466
2025 8 27 60914 0.2313 0.3954 0.07467
2025 8 28 60915 0.2316 0.3941 0.07483
2025 8 29 60916 0.2320 0.3927 0.07516
2025 8 30 60917 0.2322 0.3913 0.07569
2025 8 31 60918 0.2325 0.3899 0.07639
2025 9 1 60919 0.2327 0.3885 0.07722
2025 9 2 60920 0.2330 0.3871 0.07811
2025 9 3 60921 0.2331 0.3857 0.07897
2025 9 4 60922 0.2333 0.3843 0.07971
2025 9 5 60923 0.2334 0.3828 0.08022
2025 9 6 60924 0.2335 0.3814 0.08044
2025 9 7 60925 0.2336 0.3800 0.08033
2025 9 8 60926 0.2336 0.3786 0.07993
2025 9 9 60927 0.2336 0.3772 0.07935
2025 9 10 60928 0.2336 0.3757 0.07876
2025 9 11 60929 0.2336 0.3743 0.07832
2025 9 12 60930 0.2335 0.3729 0.07814
2025 9 13 60931 0.2334 0.3715 0.07825
2025 9 14 60932 0.2333 0.3701 0.07859
2025 9 15 60933 0.2331 0.3686 0.07906
2025 9 16 60934 0.2329 0.3672 0.07952
2025 9 17 60935 0.2327 0.3658 0.07987
2025 9 18 60936 0.2325 0.3644 0.08003
2025 9 19 60937 0.2322 0.3630 0.07996
2025 9 20 60938 0.2319 0.3616 0.07969
2025 9 21 60939 0.2316 0.3602 0.07928
2025 9 22 60940 0.2313 0.3588 0.07881
2025 9 23 60941 0.2309 0.3574 0.07837
2025 9 24 60942 0.2305 0.3560 0.07804
2025 9 25 60943 0.2301 0.3546 0.07786
2025 9 26 60944 0.2297 0.3532 0.07787
2025 9 27 60945 0.2292 0.3518 0.07805
2025 9 28 60946 0.2287 0.3505 0.07838
2025 9 29 60947 0.2282 0.3491 0.07880
2025 9 30 60948 0.2276 0.3478 0.07924
2025 10 1 60949 0.2270 0.3464 0.07962
2025 10 2 60950 0.2264 0.3451 0.07983
2025 10 3 60951 0.2258 0.3438 0.07978
2025 10 4 60952 0.2252 0.3424 0.07944
2025 10 5 60953 0.2245 0.3411 0.07878
2025 10 6 60954 0.2238 0.3398 0.07790
2025 10 7 60955 0.2231 0.3386 0.07692
2025 10 8 60956 0.2223 0.3373 0.07603
2025 10 9 60957 0.2215 0.3360 0.07538
2025 10 10 60958 0.2207 0.3348 0.07506
2025 10 11 60959 0.2199 0.3335 0.07504
2025 10 12 60960 0.2191 0.3323 0.07523
2025 10 13 60961 0.2182 0.3311 0.07547
2025 10 14 60962 0.2173 0.3299 0.07564
2025 10 15 60963 0.2164 0.3287 0.07565
2025 10 16 60964 0.2155 0.3275 0.07545
2025 10 17 60965 0.2145 0.3263 0.07507
2025 10 18 60966 0.2136 0.3252 0.07454
2025 10 19 60967 0.2126 0.3241 0.07396
2025 10 20 60968 0.2116 0.3229 0.07339
2025 10 21 60969 0.2105 0.3218 0.07290
2025 10 22 60970 0.2095 0.3207 0.07257
2025 10 23 60971 0.2084 0.3197 0.07242
2025 10 24 60972 0.2073 0.3186 0.07246
2025 10 25 60973 0.2062 0.3176 0.07267
2025 10 26 60974 0.2050 0.3166 0.07299
2025 10 27 60975 0.2039 0.3156 0.07336
2025 10 28 60976 0.2027 0.3146 0.07370
2025 10 29 60977 0.2015 0.3136 0.07393
2025 10 30 60978 0.2003 0.3126 0.07395
2025 10 31 60979 0.1991 0.3117 0.07371
2025 11 1 60980 0.1979 0.3108 0.07317
2025 11 2 60981 0.1966 0.3099 0.07238
2025 11 3 60982 0.1953 0.3090 0.07144
2025 11 4 60983 0.1941 0.3082 0.07049
2025 11 5 60984 0.1928 0.3073 0.06970
2025 11 6 60985 0.1914 0.3065 0.06920
2025 11 7 60986 0.1901 0.3057 0.06903
2025 11 8 60987 0.1888 0.3050 0.06912
2025 11 9 60988 0.1874 0.3042 0.06933
2025 11 10 60989 0.1860 0.3035 0.06951
2025 11 11 60990 0.1847 0.3028 0.06956
2025 11 12 60991 0.1833 0.3021 0.06941
2025 11 13 60992 0.1819 0.3014 0.06907
2025 11 14 60993 0.1804 0.3008 0.06861
2025 11 15 60994 0.1790 0.3001 0.06809
2025 11 16 60995 0.1776 0.2995 0.06758
2025 11 17 60996 0.1761 0.2989 0.06707
2025 11 18 60997 0.1747 0.2984 0.06669
2025 11 19 60998 0.1732 0.2979 0.06650
2025 11 20 60999 0.1717 0.2973 0.06650
2025 11 21 61000 0.1702 0.2969 0.06668
2025 11 22 61001 0.1687 0.2964 0.06699
2025 11 23 61002 0.1672 0.2959 0.06738
2025 11 24 61003 0.1657 0.2955 0.06776
2025 11 25 61004 0.1642 0.2951 0.06806
2025 11 26 61005 0.1627 0.2948 0.06820
2025 11 27 61006 0.1612 0.2944 0.06812
2025 11 28 61007 0.1596 0.2941 0.06779
2025 11 29 61008 0.1581 0.2938 0.06722
2025 11 30 61009 0.1566 0.2935 0.06647
2025 12 1 61010 0.1550 0.2933 0.06567
2025 12 2 61011 0.1535 0.2930 0.06495
2025 12 3 61012 0.1519 0.2928 0.06445
2025 12 4 61013 0.1504 0.2926 0.06426
2025 12 5 61014 0.1488 0.2925 0.06435
2025 12 6 61015 0.1473 0.2924 0.06463
2025 12 7 61016 0.1457 0.2923 0.06493
2025 12 8 61017 0.1441 0.2922 0.06513
2025 12 9 61018 0.1426 0.2921 0.06512
2025 12 10 61019 0.1410 0.2921 0.06492
2025 12 11 61020 0.1395 0.2921 0.06456
2025 12 12 61021 0.1379 0.2921 0.06414
2025 12 13 61022 0.1364 0.2921 0.06372
2025 12 14 61023 0.1348 0.2922 0.06339
2025 12 15 61024 0.1333 0.2923 0.06320
2025 12 16 61025 0.1318 0.2924 0.06318
2025 12 17 61026 0.1302 0.2925 0.06335
2025 12 18 61027 0.1287 0.2927 0.06371
2025 12 19 61028 0.1272 0.2929 0.06421
2025 12 20 61029 0.1256 0.2931 0.06480
2025 12 21 61030 0.1241 0.2933 0.06540
2025 12 22 61031 0.1226 0.2936 0.06593
2025 12 23 61032 0.1211 0.2939 0.06631
2025 12 24 61033 0.1196 0.2942 0.06648
2025 12 25 61034 0.1181 0.2945 0.06642
2025 12 26 61035 0.1166 0.2948 0.06614
2025 12 27 61036 0.1152 0.2952 0.06567
2025 12 28 61037 0.1137 0.2956 0.06513
2025 12 29 61038 0.1122 0.2960 0.06463
2025 12 30 61039 0.1108 0.2965 0.06430
2025 12 31 61040 0.1094 0.2970 0.06422
2026 1 1 61041 0.1079 0.2974 0.06441
2026 1 2 61042 0.1065 0.2980 0.06480
2026 1 3 61043 0.1051 0.2985 0.06526
2026 1 4 61044 0.1037 0.2991 0.06565
2026 1 5 61045 0.1024 0.2996 0.06585
2026 1 6 61046 0.1010 0.3002 0.06581
2026 1 7 61047 0.0996 0.3009 0.06558
2026 1 8 61048 0.0983 0.3015 0.06522
2026 1 9 61049 0.0970 0.3022 0.06485
2026 1 10 61050 0.0957 0.3029 0.06455
2026 1 11 61051 0.0944 0.3036 0.06438
2026 1 12 61052 0.0931 0.3043 0.06439
2026 1 13 61053 0.0918 0.3051 0.06459
2026 1 14 61054 0.0906 0.3058 0.06498
2026 1 15 61055 0.0893 0.3066 0.06552
2026 1 16 61056 0.0881 0.3074 0.06616
2026 1 17 61057 0.0869 0.3083 0.06682
2026 1 18 61058 0.0858 0.3091 0.06743
2026 1 19 61059 0.0846 0.3100 0.06790
2026 1 20 61060 0.0834 0.3109 0.06816
2026 1 21 61061 0.0823 0.3118 0.06818
2026 1 22 61062 0.0812 0.3127 0.06797
2026 1 23 61063 0.0801 0.3136 0.06757
2026 1 24 61064 0.0791 0.3146 0.06710
2026 1 25 61065 0.0780 0.3156 0.06666
2026 1 26 61066 0.0770 0.3166 0.06637
2026 1 27 61067 0.0760 0.3176 0.06631
2026 1 28 61068 0.0750 0.3186 0.06653
2026 1 29 61069 0.0740 0.3196 0.06698
2026 1 30 61070 0.0731 0.3207 0.06754
2026 1 31 61071 0.0721 0.3218 0.06810
2026 2 1 61072 0.0712 0.3229 0.06853
2026 2 2 61073 0.0704 0.3240 0.06874
2026 2 3 61074 0.0695 0.3251 0.06875
2026 2 4 61075 0.0687 0.3262 0.06861
2026 2 5 61076 0.0678 0.3273 0.06843
2026 2 6 61077 0.0671 0.3285 0.06830
2026 2 7 61078 0.0663 0.3297 0.06830
2026 2 8 61079 0.0655 0.3309 0.06846
2026 2 9 61080 0.0648 0.3321 0.06880
2026 2 10 61081 0.0641 0.3333 0.06930
2026 2 11 61082 0.0635 0.3345 0.06993
2026 2 12 61083 0.0628 0.3357 0.07063
2026 2 13 61084 0.0622 0.3370 0.07134
2026 2 14 61085 0.0616 0.3382 0.07197
2026 2 15 61086 0.0610 0.3395 0.07244
2026 2 16 61087 0.0605 0.3407 0.07269
2026 2 17 61088 0.0599 0.3420 0.07266
2026 2 18 61089 0.0594 0.3433 0.07235
2026 2 19 61090 0.0590 0.3446 0.07181
2026 2 20 61091 0.0585 0.3459 0.07115
2026 2 21 61092 0.0581 0.3472 0.07049
2026 2 22 61093 0.0577 0.3485 0.06996
2026 2 23 61094 0.0573 0.3499 0.06966
2026 2 24 61095 0.0570 0.3512 0.06961
2026 2 25 61096 0.0567 0.3525 0.06978
2026 2 26 61097 0.0564 0.3539 0.07006
2026 2 27 61098 0.0561 0.3552 0.07033
2026 2 28 61099 0.0559 0.3566 0.07045
2026 3 1 61100 0.0557 0.3579 0.07033
2026 3 2 61101 0.0555 0.3593 0.06993
2026 3 3 61102 0.0553 0.3607 0.06927
2026 3 4 61103 0.0552 0.3620 0.06843
2026 3 5 61104 0.0551 0.3634 0.06752
2026 3 6 61105 0.0550 0.3648 0.06663
2026 3 7 61106 0.0550 0.3662 0.06588
2026 3 8 61107 0.0549 0.3675 0.06529
2026 3 9 61108 0.0549 0.3689 0.06488
2026 3 10 61109 0.0550 0.3703 0.06460
2026 3 11 61110 0.0550 0.3717 0.06447
2026 3 12 61111 0.0551 0.3731 0.06446
2026 3 13 61112 0.0552 0.3744 0.06443
2026 3 14 61113 0.0554 0.3758 0.06436
2026 3 15 61114 0.0555 0.3772 0.06408
2026 3 16 61115 0.0557 0.3786 0.06349
2026 3 17 61116 0.0559 0.3799 0.06259
2026 3 18 61117 0.0562 0.3813 0.06141
2026 3 19 61118 0.0564 0.3827 0.06005
2026 3 20 61119 0.0567 0.3840 0.05860
2026 3 21 61120 0.0570 0.3854 0.05727
2026 3 22 61121 0.0574 0.3867 0.05618
2026 3 23 61122 0.0577 0.3881 0.05536
2026 3 24 61123 0.0581 0.3894 0.05478
2026 3 25 61124 0.0586 0.3907 0.05438
2026 3 26 61125 0.0590 0.3921 0.05402
2026 3 27 61126 0.0595 0.3934 0.05356
2026 3 28 61127 0.0600 0.3947 0.05298
2026 3 29 61128 0.0605 0.3960 0.05224
2026 3 30 61129 0.0610 0.3973 0.05131
2026 3 31 61130 0.0616 0.3986 0.05030
2026 4 1 61131 0.0622 0.3999 0.04920
2026 4 2 61132 0.0628 0.4012 0.04819
2026 4 3 61133 0.0635 0.4024 0.04731
2026 4 4 61134 0.0641 0.4037 0.04672
2026 4 5 61135 0.0648 0.4050 0.04635
2026 4 6 61136 0.0656 0.4062 0.04618
2026 4 7 61137 0.0663 0.4074 0.04628
2026 4 8 61138 0.0671 0.4086 0.04646
2026 4 9 61139 0.0678 0.4098 0.04671
2026 4 10 61140 0.0686 0.4110 0.04691
2026 4 11 61141 0.0695 0.4122 0.04694
2026 4 12 61142 0.0703 0.4134 0.04670
2026 4 13 61143 0.0712 0.4145 0.04619
2026 4 14 61144 0.0721 0.4157 0.04540
2026 4 15 61145 0.0730 0.4168 0.04436
2026 4 16 61146 0.0739 0.4179 0.04323
2026 4 17 61147 0.0749 0.4190 0.04215
2026 4 18 61148 0.0759 0.4201 0.04125
2026 4 19 61149 0.0768 0.4211 0.04060
2026 4 20 61150 0.0779 0.4222 0.04022
2026 4 21 61151 0.0789 0.4232 0.04012
2026 4 22 61152 0.0799 0.4242 0.04007
2026 4 23 61153 0.0810 0.4253 0.03998
2026 4 24 61154 0.0821 0.4262 0.03981
2026 4 25 61155 0.0832 0.4272 0.03945
2026 4 26 61156 0.0843 0.4282 0.03896
2026 4 27 61157 0.0855 0.4291 0.03839
2026 4 28 61158 0.0866 0.4300 0.03777
2026 4 29 61159 0.0878 0.4309 0.03717
2026 4 30 61160 0.0890 0.4318 0.03670
2026 5 1 61161 0.0902 0.4327 0.03647
2026 5 2 61162 0.0914 0.4335 0.03650
2026 5 3 61163 0.0927 0.4343 0.03671
2026 5 4 61164 0.0939 0.4351 0.03710
2026 5 5 61165 0.0952 0.4359 0.03768
2026 5 6 61166 0.0965 0.4367 0.03826
2026 5 7 61167 0.0978 0.4374 0.03880
2026 5 8 61168 0.0991 0.4382 0.03926
2026 5 9 61169 0.1004 0.4389 0.03960
2026 5 10 61170 0.1017 0.4396 0.03969
2026 5 11 61171 0.1030 0.4402 0.03958
2026 5 12 61172 0.1044 0.4409 0.03924
2026 5 13 61173 0.1058 0.4415 0.03874
2026 5 14 61174 0.1071 0.4421 0.03822
2026 5 15 61175 0.1085 0.4427 0.03781
2026 5 16 61176 0.1099 0.4432 0.03762
2026 5 17 61177 0.1113 0.4438 0.03770
2026 5 18 61178 0.1127 0.4443 0.03797
2026 5 19 61179 0.1141 0.4448 0.03848
2026 5 20 61180 0.1156 0.4453 0.03905
2026 5 21 61181 0.1170 0.4457 0.03952
2026 5 22 61182 0.1185 0.4461 0.03983
2026 5 23 61183 0.1199 0.4465 0.03997
2026 5 24 61184 0.1214 0.4469 0.03987
2026 5 25 61185 0.1228 0.4473 0.03969
2026 5 26 61186 0.1243 0.4476 0.03958
2026 5 27 61187 0.1257 0.4479 0.03953
2026 5 28 61188 0.1272 0.4482 0.03962
2026 5 29 61189 0.1287 0.4485 0.03986
2026 5 30 61190 0.1302 0.4487 0.04031
2026 5 31 61191 0.1317 0.4489 0.04088
2026 6 1 61192 0.1331 0.4491 0.04159
2026 6 2 61193 0.1346 0.4493 0.04244
2026 6 3 61194 0.1361 0.4494 0.04341
2026 6 4 61195 0.1376 0.4496 0.04430
2026 6 5 61196 0.1391 0.4497 0.04511
2026 6 6 61197 0.1406 0.4497 0.04574
2026 6 7 61198 0.1421 0.4498 0.04612
2026 6 8 61199 0.1436 0.4498 0.04627
2026 6 9 61200 0.1451 0.4498 0.04633
2026 6 10 61201 0.1465 0.4498 0.04635
2026 6 11 61202 0.1480 0.4498 0.04643
2026 6 12 61203 0.1495 0.4497 0.04676
2026 6 13 61204 0.1510 0.4496 0.04741
2026 6 14 61205 0.1525 0.4495 0.04834
2026 6 15 61206 0.1539 0.4494 0.04956
2026 6 16 61207 0.1554 0.4492 0.05075
2026 6 17 61208 0.1568 0.4490 0.05178
2026 6 18 61209 0.1583 0.4488 0.05255
2026 6 19 61210 0.1597 0.4486 0.05301
2026 6 20 61211 0.1612 0.4483 0.05328
2026 6 21 61212 0.1626 0.4481 0.05345
2026 6 22 61213 0.1640 0.4478 0.05361
2026 6 23 61214 0.1655 0.4474 0.05393
2026 6 24 61215 0.1669 0.4471 0.05442
2026 6 25 61216 0.1683 0.4467 0.05512
2026 6 26 61217 0.1697 0.4463 0.05611
2026 6 27 61218 0.1711 0.4459 0.05729
2026 6 28 61219 0.1724 0.4455 0.05868
2026 6 29 61220 0.1738 0.4450 0.06008
2026 6 30 61221 0.1751 0.4446 0.06159
2026 7 1 61222 0.1765 0.4441 0.06300
2026 7 2 61223 0.1778 0.4435 0.06426
2026 7 3 61224 0.1791 0.4430 0.06534
2026 7 4 61225 0.1804 0.4424 0.06625
2026 7 5 61226 0.1817 0.4418 0.06692
2026 7 6 61227 0.1830 0.4412 0.06750
2026 7 7 61228 0.1843 0.4406 0.06802
2026 7 8 61229 0.1855 0.4400 0.06856
2026 7 9 61230 0.1868 0.4393 0.06919
2026 7 10 61231 0.1880 0.4386 0.06998
2026 7 11 61232 0.1892 0.4379 0.07112
2026 7 12 61233 0.1904 0.4372 0.07248
2026 7 13 61234 0.1916 0.4364 0.07398
2026 7 14 61235 0.1927 0.4357 0.07539
2026 7 15 61236 0.1939 0.4349 0.07656
2026 7 16 61237 0.1950 0.4341 0.07751
2026 7 17 61238 0.1961 0.4333 0.07821
2026 7 18 61239 0.1972 0.4324 0.07881
2026 7 19 61240 0.1983 0.4316 0.07932
2026 7 20 61241 0.1993 0.4307 0.07987
2026 7 21 61242 0.2003 0.4298 0.08067
2026 7 22 61243 0.2014 0.4289 0.08162
2026 7 23 61244 0.2024 0.4280 0.08281
2026 7 24 61245 0.2033 0.4271 0.08417
2026 7 25 61246 0.2043 0.4261 0.08568
2026 7 26 61247 0.2052 0.4251 0.08728
2026 7 27 61248 0.2061 0.4242 0.08887
2026 7 28 61249 0.2070 0.4232 0.09042
2026 7 29 61250 0.2079 0.4221 0.09183
2026 7 30 61251 0.2088 0.4211 0.09304
2026 7 31 61252 0.2096 0.4201 0.09407
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)
60837 -112.47 0.89 -11.70 0.14
60838 -112.54 0.89 -11.60 0.14
60839 -112.51 0.89 -11.35 0.14
60840 -112.45 0.32 -11.16 0.16
60841 -112.45 1.48 -11.11 0.30
60842 -112.49 1.48 -11.13 0.30
60843 -112.49 1.48 -11.15 0.30
60844 -112.49 1.20 -11.12 0.28
60845 -112.62 1.20 -11.03 0.28
60846 -112.97 1.20 -10.87 0.28
IERS Celestial Pole Offset Final Series
MJD dpsi deps
(msec. of arc)
60797 -109.8 -11.9
60798 -109.1 -12.1
60799 -108.8 -12.0
60800 -108.9 -11.6
60801 -109.3 -11.1
60802 -109.7 -10.8
60803 -109.8 -10.7
60804 -109.8 -10.6
60805 -109.7 -10.6
60806 -109.6 -10.8
60807 -109.5 -11.3
60808 -109.5 -11.7
60809 -109.6 -11.9
60810 -109.7 -11.8
60811 -109.7 -11.6
60812 -109.6 -11.6
60813 -109.5 -11.6
60814 -109.3 -11.6
60815 -109.2 -11.6
60816 -109.3 -11.6
60817 -109.4 -11.6
60818 -109.7 -11.4
60819 -110.2 -11.0
60820 -111.0 -10.7
60821 -111.6 -10.8
60822 -111.9 -11.1
60823 -111.8 -11.3
60824 -111.5 -11.6
60825 -110.9 -11.7
60826 -110.5 -11.8
60827 -110.5 -11.7
60865 -116.77 0.98 -11.24 0.21
60866 -116.93 0.98 -11.18 0.21
60867 -116.98 0.98 -10.97 0.21
IAU2000A Celestial Pole Offset Series
MJD dX error dY error
(msec. of arc)
60837 0.432 0.352 -0.216 0.145
60838 0.439 0.352 -0.218 0.145
60839 0.448 0.352 -0.222 0.145
60840 0.457 0.128 -0.227 0.160
60841 0.465 0.588 -0.235 0.303
60842 0.472 0.588 -0.243 0.303
60843 0.476 0.588 -0.251 0.303
60844 0.476 0.476 -0.260 0.282
60845 0.472 0.476 -0.267 0.282
60846 0.467 0.476 -0.275 0.282
IAU2000A Celestial Pole Offset Final Series
MJD dX dY
(msec. of arc)
60797 0.44 -0.19
60798 0.51 -0.19
60799 0.53 -0.19
60800 0.52 -0.18
60801 0.49 -0.17
60802 0.41 -0.16
60803 0.33 -0.14
60804 0.31 -0.16
60805 0.34 -0.21
60806 0.39 -0.26
60807 0.44 -0.30
60808 0.49 -0.33
60809 0.48 -0.26
60810 0.45 -0.17
60811 0.42 -0.09
60812 0.42 -0.07
60813 0.43 -0.10
60814 0.44 -0.14
60815 0.45 -0.18
60816 0.43 -0.21
60817 0.40 -0.22
60818 0.37 -0.22
60819 0.37 -0.21
60820 0.38 -0.19
60821 0.39 -0.16
60822 0.40 -0.14
60823 0.41 -0.12
60824 0.41 -0.11
60825 0.41 -0.11
60826 0.39 -0.14
60827 0.34 -0.18
60865 0.402 0.390 -0.210 0.213
60866 0.393 0.390 -0.229 0.213
60867 0.382 0.390 -0.247 0.213
)--";

View File

@ -27,8 +27,8 @@ template <traits::mcc_mount_controls_c MOUNT_CONTROLS>
class MccMount : public fsm::MccFiniteStateMachine, public utils::MccSpdlogLogger, protected MOUNT_CONTROLS
{
// declare these classes as friends to allow them access protected members 'slewModel' and 'guidingModel'
friend class MccMountStateSlew<MccMount>;
friend class MccMountStateGuiding<MccMount>;
friend class MccMountStateSlew<MccMount<MOUNT_CONTROLS>>;
friend class MccMountStateGuiding<MccMount<MOUNT_CONTROLS>>;
public:
typedef MOUNT_CONTROLS mount_controls_t;

View File

@ -139,21 +139,29 @@ public:
using guiding_point_t = MccSlewAndGuidingPoint;
template <traits::mcc_mount_controls_c MOUNT_CONTROLS_T, typename... LoggerCtorArgTs>
MccSimpleGuidingModel(MOUNT_CONTROLS_T& mount_controls, LoggerCtorArgTs&&... ctor_args)
template <traits::mcc_mount_telemetry_c TELEMETRY_T,
traits::mcc_mount_hardware_c HARDWARE_T,
traits::mcc_tuple_c PZ_T,
typename... LoggerCtorArgTs>
MccSimpleGuidingModel(TELEMETRY_T& telemetry,
HARDWARE_T& hardware,
PZ_T& prohibited_zone,
LoggerCtorArgTs&&... ctor_args)
requires(!std::same_as<LoggerT, MccNullLogger>)
: LoggerT(std::forward<LoggerCtorArgTs>(ctor_args)...)
{
logDebug(std::format("Create 'MccSimpleGuidingModel' class instance ({})", (void*)this));
init(mount_controls);
init(telemetry, hardware, prohibited_zone);
}
template <traits::mcc_mount_controls_c MOUNT_CONTROLS_T>
MccSimpleGuidingModel(MOUNT_CONTROLS_T& mount_controls)
template <traits::mcc_mount_telemetry_c TELEMETRY_T,
traits::mcc_mount_hardware_c HARDWARE_T,
traits::mcc_tuple_c PZ_T>
MccSimpleGuidingModel(TELEMETRY_T& telemetry, HARDWARE_T& hardware, PZ_T& prohibited_zone)
requires(std::same_as<LoggerT, MccNullLogger>)
{
init(mount_controls);
init(telemetry, hardware, prohibited_zone);
}
virtual ~MccSimpleGuidingModel()
@ -177,23 +185,24 @@ protected:
error_t init(auto& mount_controls)
error_t init(auto& telemetry, auto& hardware, auto& prohibited_zones)
{
// deduce controls types
using astrom_engine_t = decltype(mount_controls.astrometryEngine);
using hardware_t = decltype(mount_controls.hardware);
using pec_t = decltype(mount_controls.PEC);
using telemetry_t = decltype(mount_controls.telemetry);
// deduce controls types
using hardware_t = decltype(hardware);
using telemetry_t = decltype(telemetry);
static_assert(traits::mcc_mount_default_telemetry_c<telemetry_t>,
"TELEMETRY CLASS MUST BE A DESCENDANT OF 'MccMountTelemetry'!");
static_assert(std::derived_from<telemetry_t, MccMountTelemetry<astrom_engine_t, pec_t, hardware_t,
typename telemetry_t::mount_telemetry_data_t>>,
"TELEMETRY CLASS MUST BE A DESCENDANT OF 'MccMountTelemetry' ONE!");
using astrom_engine_t = typename telemetry_t::astrom_engine_t;
using tpl_pz_t = decltype(mount_controls.prohibitedZones);
static constexpr size_t Nzones = std::tuple_size_v<decltype(prohibited_zones)>;
const auto p_mount_controls = &mount_controls;
const auto p_telemetry = &telemetry;
const auto p_hardware = &hardware;
const auto p_prohibited_zones = &prohibited_zones;
_guidingFunc = [p_mount_controls, this](guiding_point_t guiding_point) {
_guidingFunc = [p_telemetry, p_hardware, p_prohibited_zones, this](guiding_point_t guiding_point) {
_stopRequested = false;
if (guiding_point.correctionRange[0] >= guiding_point.correctionRange[1]) {
@ -203,19 +212,14 @@ protected:
auto low_corr_limit = guiding_point.correctionRange[0] * guiding_point.correctionRange[0];
auto high_corr_limit = guiding_point.correctionRange[1] * guiding_point.correctionRange[1];
auto& astrom_engine = p_mount_controls->astrometryEngine;
auto& hardware = p_mount_controls->hardware;
auto& pec = p_mount_controls->PEC;
auto& telemetry = p_mount_controls->telemetry;
using coord_t = typename astrom_engine_t::coord_t;
using jd_t = typename astrom_engine_t::juldate_t;
jd_t jd;
// using coord_t = typename astrom_engine_t::coord_t;
// using jd_t = typename astrom_engine_t::juldate_t;
// jd_t jd;
error_t res_err;
typename astrom_engine_t::error_t ast_err;
typename pec_t::error_t pec_err;
// typename pec_t::error_t pec_err;
typename telemetry_t::error_t t_err;
typename telemetry_t::mount_telemetry_data_t t_data;
@ -225,7 +229,7 @@ protected:
ax_pos.moving_type = hardware_t::hw_moving_type_t::HW_MOVE_GUIDING;
t_err = telemetry.setTarget(guiding_point);
t_err = p_telemetry->setTarget(guiding_point);
if (t_err) {
if constexpr (std::same_as<decltype(t_err), error_t>) {
logError(std::format("An telemetry error occured: code = {} ({})", t_err.value(), t_err.message()));
@ -238,7 +242,7 @@ protected:
}
}
std::array<bool, std::tuple_size_v<tpl_pz_t>> in_zone_flag;
std::array<bool, Nzones> in_zone_flag;
while (true) {
if (_stopRequested) {
@ -249,10 +253,13 @@ protected:
// suspend the thread here until telemetry data is updated
t_err = telemetry.waitForUpdatedData(t_data, guiding_point.telemetryUpdateTimeout);
t_err = p_telemetry->waitForUpdatedData(t_data, guiding_point.telemetryUpdateTimeout);
ax_pos.x = t_data.mntPosX;
ax_pos.y = t_data.mntPosY;
// check prohibited zones ...
if (mccCheckInZonePZTuple(t_data, p_mount_controls->prohibitedZones, in_zone_flag)) {
if (mccCheckInZonePZTuple(t_data, *p_prohibited_zones, in_zone_flag)) {
return MccSimpleGuidingModelErrorCode::ERROR_IN_PROHIBITED_ZONE;
};
@ -279,9 +286,13 @@ protected:
// compare t_data with computed coordinates ...
if (_doCorrection) {
auto coord_diff = telemetry.targetToMountDiff();
auto coord_diff = p_telemetry->targetToMountDiff();
if (coord_diff.r2 < low_corr_limit) {
logWarn(
std::format("guiding model: the 'mount-target' square of difference is less than the limit "
"(diff = {}; lim = {}). Do not perfrom the corrections!",
(double)coord_diff.r2, (double)high_corr_limit));
continue;
}
@ -294,22 +305,14 @@ protected:
}
// do correction
// current celestial position of target is already computed for current time point
// so one needs only correct apparent coordinates for PEC corrections
ax_pos.time_point = t_data.time_point;
if constexpr (mccIsEquatorialMount(pec_t::mountType)) {
ax_pos.x = t_data.tagHA - t_data.pecX;
ax_pos.y = t_data.tagDEC - t_data.pecY;
} else if constexpr (mccIsAltAzMount(pec_t::mountType)) {
ax_pos.x = t_data.tagAZ - t_data.pecX;
ax_pos.y = t_data.tagALT - t_data.pecY;
} else {
static_assert(false, "UNSUPPORTED MOUNT TYPE!");
ax_pos.x += coord_diff.xdiff;
if (guiding_point.dualAxisGuiding) {
ax_pos.y += coord_diff.ydiff;
}
// asynchronous operation!
auto err = hardware.setPos(ax_pos);
auto err = p_hardware->setPos(ax_pos);
if (err) {
if constexpr (std::same_as<decltype(err), error_t>) {
logError(

View File

@ -454,25 +454,25 @@ concept mcc_prohibited_zone_c =
// check if given coordinates are into the zone.
// input coordinates interpretation is in according to 'zoneCoordPairKind' static constexpr member
{
t.inZone(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>())
} -> std::convertible_to<bool>;
// {
// t.inZone(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>())
// } -> std::convertible_to<bool>;
// for given coordinates and time the method computes a time to reach the zone.
// implementation of the method must assume that input coordinates are apparent RA and DEC at given time
// point, while the time point is one from which computation should be performed (e.g. current time moment)
{
t.timeTo(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>(),
std::declval<typename T::time_point_t>())
} -> mcc_time_duration_c;
// // for given coordinates and time the method computes a time to reach the zone.
// // implementation of the method must assume that input coordinates are apparent RA and DEC at given time
// // point, while the time point is one from which computation should be performed (e.g. current time moment)
// {
// t.timeTo(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>(),
// std::declval<typename T::time_point_t>())
// } -> mcc_time_duration_c;
// for given coordinates and time the method computes a time to exit from the zone
{
t.timeFrom(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>(),
std::declval<typename T::time_point_t>())
} -> mcc_time_duration_c;
// // for given coordinates and time the method computes a time to exit from the zone
// {
// t.timeFrom(std::declval<typename T::coord_t>(), std::declval<typename T::coord_t>(),
// std::declval<typename T::time_point_t>())
// } -> mcc_time_duration_c;
// requires for the methods above with the first argument of type
// 'const mcc_mount_telemetry_data_c&' (const lvalue reference)
@ -505,13 +505,13 @@ concept mcc_mount_controls_c = requires(T t) {
requires mcc_mount_telemetry_c<decltype(t.telemetry)>;
requires mcc_slew_model_c<decltype(t.slewModel)>;
// requires mcc_slew_model_c<decltype(t.slewModel), decltype(t.telemetry)>;
requires mcc_guiding_model_c<decltype(t.guidingModel)>;
// requires mcc_guiding_model_c<decltype(t.guidingModel), decltype(t.telemetry)>;
// a std::tuple of prohibited zones
[]<mcc_prohibited_zone_c<typename decltype(t.telemetry)::mount_telemetry_data_t>... Ts>(std::tuple<Ts...>) {
}(t.prohibitedZones);
// []<mcc_prohibited_zone_c<typename decltype(t.telemetry)::mount_telemetry_data_t>... Ts>(std::tuple<Ts...>) {
// }(t.prohibitedZones);
requires mcc_tuple_c<decltype(t.prohibitedZones)>;
};

View File

@ -332,4 +332,20 @@ protected:
};
namespace traits
{
template <typename T>
concept mcc_mount_default_telemetry_c = requires {
mcc_astrom_engine_c<typename T::astrom_engine_t>;
mcc_mount_pec_c<typename T::pec_t>;
mcc_mount_hardware_c<typename T::hardware_t>;
mcc_mount_telemetry_data_c<typename T::mount_telemetry_data_t>;
requires std::derived_from<T, mcc::MccMountTelemetry<typename T::astrom_engine_t, typename T::pec_t,
typename T::hardware_t, typename T::mount_telemetry_data_t>>;
};
} // namespace traits
} // namespace mcc

View File

@ -71,6 +71,7 @@ struct MccSlewAndGuidingPoint : MccCelestialPoint {
// ******* guiding-related parameters *******
coord_t correctionRange[2]{(double)MccAngle(0.3_arcsecs), (double)MccAngle(5.0_arcsecs)};
bool dualAxisGuiding{true}; // mount must be of an equatorial type: false means guiding along only HA-axis
};

View File

@ -124,21 +124,30 @@ public:
using slew_point_t = MccSlewAndGuidingPoint;
template <traits::mcc_mount_controls_c MOUNT_CONTROLS_T, typename... LoggerCtorArgTs>
MccSimpleSlewModel(MOUNT_CONTROLS_T& mount_controls, LoggerCtorArgTs&&... ctor_args)
template <traits::mcc_mount_telemetry_c TELEMETRY_T,
traits::mcc_mount_hardware_c HARDWARE_T,
traits::mcc_tuple_c PZ_T, // std::tuple of prohibited zones
typename... LoggerCtorArgTs>
MccSimpleSlewModel(TELEMETRY_T& telemetry,
HARDWARE_T& hardware,
PZ_T& prohibited_zone,
LoggerCtorArgTs&&... ctor_args)
requires(!std::same_as<LoggerT, MccNullLogger>)
: LoggerT(std::forward<LoggerCtorArgTs>(ctor_args)...)
{
logDebug(std::format("Create 'MccSimpleSlewModel' class instance ({})", (void*)this));
init(mount_controls);
init(telemetry, hardware, prohibited_zone);
}
template <traits::mcc_mount_controls_c MOUNT_CONTROLS_T>
MccSimpleSlewModel(MOUNT_CONTROLS_T& mount_controls)
template <traits::mcc_mount_telemetry_c TELEMETRY_T,
traits::mcc_mount_hardware_c HARDWARE_T,
traits::mcc_tuple_c PZ_T // std::tuple of prohibited zones
>
MccSimpleSlewModel(TELEMETRY_T& telemetry, HARDWARE_T& hardware, PZ_T& prohibited_zone)
requires(std::same_as<LoggerT, MccNullLogger>)
{
init(mount_controls);
init(telemetry, hardware, prohibited_zone);
}
MccSimpleSlewModel(MccSimpleSlewModel&&) = default;
@ -169,56 +178,43 @@ protected:
std::atomic_bool _stopRequested{false};
std::function<error_t(const slew_point_t&)> _slewFunc{};
void init(auto& mount_controls)
void init(auto& telemetry, auto& hardware, auto& prohibited_zones)
{
// deduce controls types
using astrom_engine_t = decltype(mount_controls.astrometryEngine);
using hardware_t = decltype(mount_controls.hardware);
using pec_t = decltype(mount_controls.PEC);
using telemetry_t = decltype(mount_controls.telemetry);
static_assert(std::derived_from<telemetry_t, MccMountTelemetry<astrom_engine_t, pec_t, hardware_t,
typename telemetry_t::mount_telemetry_data_t>>,
"TELEMETRY CLASS MUST BE A DESCENDANT OF 'MccMountTelemetry' ONE!");
using hardware_t = decltype(hardware);
using telemetry_t = decltype(telemetry);
static_assert(traits::mcc_mount_default_telemetry_c<telemetry_t>,
"TELEMETRY CLASS MUST BE A DESCENDANT OF 'MccMountTelemetry'!");
using tpl_pz_t = decltype(mount_controls.prohibitedZones);
using astrom_engine_t = typename telemetry_t::astrom_engine_t;
static constexpr size_t Nzones = std::tuple_size_v<tpl_pz_t>;
static constexpr size_t Nzones = std::tuple_size_v<decltype(prohibited_zones)>;
const auto p_mount_controls = &mount_controls;
const auto p_telemetry = &telemetry;
const auto p_hardware = &hardware;
const auto p_prohibited_zones = &prohibited_zones;
_slewFunc = [p_mount_controls, this](slew_point_t slew_point) {
_slewFunc = [p_telemetry, p_hardware, p_prohibited_zones, this](slew_point_t slew_point) {
_stopRequested = false;
auto& astrom_engine = p_mount_controls->astrometryEngine;
auto& hardware = p_mount_controls->hardware;
auto& pec = p_mount_controls->PEC;
auto& telemetry = p_mount_controls->telemetry;
using coord_t = typename astrom_engine_t::coord_t;
using jd_t = typename astrom_engine_t::juldate_t;
typename hardware_t::axes_pos_t ax_pos;
error_t res_err;
typename astrom_engine_t::error_t ast_err;
typename pec_t::error_t pec_err;
// typename astrom_engine_t::error_t ast_err;
typename telemetry_t::error_t t_err;
typename telemetry_t::mount_telemetry_data_t t_data;
coord_t ra_icrs, dec_icrs;
if (slew_point.withinToleranceCycleNumber == 0) {
slew_point.withinToleranceCycleNumber = MccSlewAndGuidingPoint::defaultWithinToleranceCycleNumber;
}
// first, compute encoder coordinates
ax_pos.time_point = astrom_engine_t::timePointNow();
t_err = telemetry.toHardware(slew_point, ax_pos.time_point, ax_pos.x, ax_pos.y);
t_err = p_telemetry->toHardware(slew_point, ax_pos.time_point, ax_pos.x, ax_pos.y);
if (!t_err) {
// SETUP TARGET SKY POINT
t_err = telemetry.setTarget(slew_point);
t_err = p_telemetry->setTarget(slew_point);
}
if (t_err) {
@ -237,7 +233,7 @@ protected:
ax_pos.xrate = slew_point.slewXRate;
ax_pos.yrate = slew_point.slewYRate;
ax_pos.moving_type = hardware_t::hw_moving_type_t::HW_MOVE_SLEWING;
typename hardware_t::error_t hw_err = hardware->setPos(ax_pos);
typename hardware_t::error_t hw_err = p_hardware->setPos(ax_pos);
if (hw_err) {
if constexpr (std::same_as<decltype(hw_err), error_t>) {
@ -260,9 +256,10 @@ protected:
adj_ax_pos.yrate = slew_point.adjustYRate;
adj_ax_pos.moving_type = hardware_t::hw_moving_type_t::HW_MOVE_ADJUSTING;
typename telemetry_t::mount_telemetry_data_t::coord_t xr, yr, coord_diff2,
adj_rad2 = slew_point.adjustCoordDiff * slew_point.adjustCoordDiff,
tol_rad2 = slew_point.slewToleranceRadius * slew_point.slewToleranceRadius;
typename telemetry_t::mount_telemetry_data_t::coord_t adj_rad2 = slew_point.adjustCoordDiff *
slew_point.adjustCoordDiff,
tol_rad2 = slew_point.slewToleranceRadius *
slew_point.slewToleranceRadius;
std::array<bool, Nzones> in_zone_flag;
@ -271,34 +268,34 @@ protected:
bool in_adj_mode = false;
// compute new hardware coordinate of target
auto compute_new_coord = [](auto const& t_data, typename hardware_t::axes_pos_t& hw_pos) {
// current celestial position of target is already computed for given time point
// so one needs only correct apparent coordinates for PEC corrections
hw_pos.time_point = t_data.time_point;
if constexpr (mccIsEquatorialMount(pec_t::mountType)) {
hw_pos.x = t_data.tagHA - t_data.pecX;
hw_pos.y = t_data.tagDEC - t_data.pecY;
} else if constexpr (mccIsAltAzMount(pec_t::mountType)) {
hw_pos.x = t_data.tagAZ - t_data.pecX;
hw_pos.y = t_data.tagALT - t_data.pecY;
} else {
static_assert(false, "UNSUPPORTED MOUNT TYPE!");
}
};
// auto compute_new_coord = [](auto const& t_data, typename hardware_t::axes_pos_t& hw_pos) {
// // current celestial position of target is already computed for given time point
// // so one needs only correct apparent coordinates for PEC corrections
// hw_pos.time_point = t_data.time_point;
// if constexpr (mccIsEquatorialMount(pec_t::mountType)) {
// hw_pos.x = t_data.tagHA - t_data.pecX;
// hw_pos.y = t_data.tagDEC - t_data.pecY;
// } else if constexpr (mccIsAltAzMount(pec_t::mountType)) {
// hw_pos.x = t_data.tagAZ - t_data.pecX;
// hw_pos.y = t_data.tagALT - t_data.pecY;
// } else {
// static_assert(false, "UNSUPPORTED MOUNT TYPE!");
// }
// };
auto cycle_func = [&](auto t_data) mutable {
auto cycle_func = [&](auto& t_data) mutable {
if (_stopRequested) {
res_err = MccSimpleSlewModelErrorCode::ERROR_SLEW_STOPPED;
}
// check for prohibited zones
if (mccCheckInZonePZTuple(t_data, p_mount_controls->prohibitedZones, in_zone_flag)) {
if (mccCheckInZonePZTuple(t_data, *p_prohibited_zones, in_zone_flag)) {
return MccSimpleSlewModelErrorCode::ERROR_IN_PROHIBITED_ZONE;
};
// t_data was updated in caller!!!
auto coord_diff = telemetry.targetToMountDiff();
auto coord_diff = p_telemetry->targetToMountDiff();
if (_stopRequested) {
res_err = MccSimpleSlewModelErrorCode::ERROR_SLEW_STOPPED;
@ -307,9 +304,13 @@ protected:
if (coord_diff.r2 < adj_rad2) { // adjusting mode
in_adj_mode = true;
compute_new_coord(t_data, adj_ax_pos);
// compute_new_coord(t_data, adj_ax_pos);
hw_err = hardware->setPos(adj_ax_pos);
adj_ax_pos.time_point = t_data.time_point;
adj_ax_pos.x += coord_diff.xdiff;
adj_ax_pos.y += coord_diff.ydiff;
hw_err = p_hardware->setPos(adj_ax_pos);
if (!hw_err) {
++i_adj_cycle;
@ -343,12 +344,26 @@ protected:
} else { // continue to slewing
if (in_adj_mode) { // ?!!!!!!!!!!!!! slew again?!!!
logWarn(std::format(
"The slewing is in adjusting mode but computed target-to-mount coordinate difference "
"'{}' is greater than limit '{}' for adjusting mode!",
coord_diff.r2, adj_rad2));
in_adj_mode = false;
i_adj_cycle = 0;
i_in_tol_cycle = 0;
compute_new_coord(t_data, ax_pos);
typename hardware_t::error_t hw_err = hardware->setPos(ax_pos);
// compute_new_coord(t_data, ax_pos);
adj_ax_pos.time_point = t_data.time_point;
adj_ax_pos.x += coord_diff.xdiff;
adj_ax_pos.y += coord_diff.ydiff;
ax_pos.time_point = t_data.time_point;
ax_pos.x = adj_ax_pos.x;
ax_pos.y = adj_ax_pos.y;
// send command for slewing
typename hardware_t::error_t hw_err = p_hardware->setPos(ax_pos);
if (hw_err) {
if constexpr (std::same_as<decltype(hw_err), error_t>) {
@ -372,7 +387,7 @@ protected:
// NOTE: TARGET COORDINATES WILL BE UPDATED FOR CURRENT TIME-POINT IN TELEMETRY-CLASS!!!
while (true) {
t_err = telemetry.waitForUpdatedData(t_data, slew_point.telemetryUpdateTimeout);
t_err = p_telemetry->waitForUpdatedData(t_data, slew_point.telemetryUpdateTimeout);
if (t_err) {
std::string err_str = "An error occured while waiting for updated telemetry";