2017-09-22

Stations With Lowest Probability of Busting a Call in Non-Run QSOs: CQ WW 2005 to 2016

Prior posts in this series:
In this post I list the calling stations (i.e., not the running station) with the lowest probabilities of busting a call in CQ WW from 2005 to 2016, using the procedure developed in the second post above.

2005 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 N5AU 0.0012 783 0
2 KF2O 0.0020 482 0
3 EA4KR 0.0020 476 0
4 W3YY 0.0022 436 0
5 G5W 0.0023 423 0
6 K5ZD 0.0023 419 0
7 HA5X 0.0027368 0
8 TM2Y 0.0027 357 0
9 DF6QV 0.0028 719 1
10 W1CU 0.0028 703 1

2005 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 K3PH 0.0012 771 0
2 K5ZD 0.0015 664 0
3 DJ2YA 0.0015 631 0
4 N2IC 0.0017 586 0
5 K1ZZ 0.0017 582 0
6 DL6KVA 0.0017 580 0
7 K3CR 0.0017576 0
8 KQ3F 0.0017 557 0
9 DF1DX 0.0018 533 0
10 S56A 0.0019 516 0


2006 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 W1CU 0.0009 1022 0
2 PA0JNH 0.0012 786 0
3 K5ZD 0.0013 735 0
4 N2IC 0.0013 718 0
5 PC4M 0.0015 645 0
6 K1GU 0.0016 616 0
7 AA8LL 0.0017585 0
8 LY3CY 0.0017 585 0
9 OH8X 0.0017 578 0
10 AC0W 0.0017 569 0

2006 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 9A3GI 0.0011 860 0
2 PA0JNH 0.0014 712 0
3 I2WIJ 0.0014 708 0
4 DL5KUT 0.0014 706 0
5 K3ND 0.0014 680 0
6 AA4FU 0.0017 559 0
7 JA7YAA 0.0017558 0
8 WE9V 0.0017 557 0
9 W2JU 0.0018 542 0
10 OH8X 0.0020 478 0


2007 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 NN3W 0.0012 782 0
2 N1IW 0.0012 768 0
3 N8RA 0.0016 609 0
4 LY3CY 0.0019 514 0
5 IZ3KKE 0.0020 493 0
6 DH0GHU 0.0021 971 1
7 TM2Y 0.0021460 0
8 K3TEJ 0.0021 458 0
9 EA4KR 0.0021 453 0
10 LY6A 0.0022 443 0

2007 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 G4IIY 0.0011 843 0
2 W2LE 0.0014 712 0
3 SM6CNN 0.0014 709 0
4 DL8DYL 0.0014 691 0
5 K8CC 0.0014 682 0
6 DP4T 0.0016 618 0
7 K1ZZ 0.0016617 0
8 KU1CW 0.0016 617 0
9 SP2LNW 0.0016 611 0
10 K2DM 0.0016 591 0


2008 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 DL9DRA 0.0012 788 0
2 NK7U 0.0012 786 0
3 W2IRT 0.0013 760 0
4 K3OO 0.0014 692 0
5 S53MM 0.0014 683 0
6 N8BJQ 0.0016 629 0
7 K3WI 0.0016590 0
8 WD5K 0.0018 547 0
9 VE2XAA 0.0018 544 0
10 DF2RG 0.0018 534 0

2008 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 S56A 0.0011 854 0
2 WE9V 0.0013 739 0
3 W1GD 0.0014 712 0
4 K5ZD 0.0014 681 0
5 G4IIY 0.0015 634 0
6 N2GC 0.0016 614 0
7 ER0FEO 0.0016587 0
8 DL6KVA 0.0018 543 0
9 PA0JNH 0.0019 516 0
10 LN8W 0.0020 497 0


2009 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 W1GD 0.0009 1087 0
2 K4AB 0.0010 959 0
3 K1BX 0.0012 830 0
4 OM7M 0.0013 762 0
5 AA8LL 0.0014 669 0
6 K3WI 0.0015 643 0
7 DK5DQ 0.0016597 0
8 LY9A 0.0017 1202 1
9 KG4W 0.0017 562 0
10 G3VPW 0.0017 554 0

2009 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 RU1A 0.0008 1134 0
2 W3OA 0.0012 776 0
3 AB3CX 0.0012 774 0
4 IR4X 0.0014 706 0
5 N2NL 0.0014 668 0
6 N2IC 0.0015 657 0
7 N5IN 0.0015630 0
8 9A4WY 0.0016 605 0
9 K2TE 0.0017 565 0
10 UW1WU 0.0017 557 0


2010 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 S56A 0.0009 1097 0
2 RW1CW 0.0010 921 0
3 DJ5MW 0.0010 910 0
4 N0HR 0.0011 845 0
5 OE4A 0.0012 804 0
6 N4PQX 0.0013 758 0
7 DK5DQ 0.0013723 0
8 KF6A 0.0013 721 0
9 DF2RG 0.0014 665 0
10 KR2Q 0.0016 620 0

2010 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 RU1A 0.0005 1896 0
2 YT2AAA 0.0008 1157 0
3 W3BGN 0.0009 1019 0
4 DL1QQ 0.0010 971 0
5 K3LR 0.0010 1957 1
6 W1CU 0.0010 913 0
7 N1EU 0.0011875 0
8 RF9C 0.0012 831 0
9 SP9NSV 0.0012 774 0
10 R9DA 0.0013 767 0


2011 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 W6YI 0.0007 1398 0
2 N4TZ 0.0008 1169 0
3 N3ZA 0.0010 988 0
4 NW2K 0.0011 896 0
5 LY3CY 0.0012 822 0
6 RA0FU 0.0013 725 0
7 DF0HQ 0.0013723 0
8 S56A 0.0013 720 0
9 NB3C 0.0014 669 0
10 W1ZT 0.0014 669 0

2011 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 RU1A 0.0008 2508 0
2 DR1A 0.0008 2385 0
3 LZ2SX 0.0009 1055 0
4 K6LL 0.0009 1006 0
5 W3OA 0.0011 903 0
6 SP2LNW 0.0011 881 0
7 DL1NEO 0.0011860 0
8 W6YI 0.0011 841 0
9 AA4FU 0.0011 839 0
10 US2IZ 0.0012 817 0


2012 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 N1IBM 0.0011 890 0
2 K3TEJ 0.0011 869 0
3 RW4W 0.0013 767 0
4 DF2RG 0.0013 745 0
5 AA4R 0.0013 723 0
6 K2RD 0.0014 708 0
7 K1ZZ 0.0014706 0
8 K0AP 0.0014 701 0
9 DL5XAT 0.0014 687 0
10 GM2V 0.0014 674 0

2012 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 UA1QM 0.0008 1170 0
2 RG9A 0.0009 1043 0
3 NW2K 0.0010 992 0
4 SK2T 0.0010 908 0
5 RT9S 0.0011 884 0
6 P33W 0.0011 2775 2
7 AD1C 0.0011850 0
8 YT7AW 0.0012 829 0
9 DL4FN 0.0012 824 0
10 JI1RXQ 0.0012 820 0


2013 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 9A2EU 0.0007 1276 0
2 N8BJQ 0.0007 1272 0
3 W3GQ 0.0008 1185 0
4 ND8L 0.0009 1046 0
5 N1EU 0.0009 1043 0
6 NW0M 0.0009 1015 0
7 LY3CY 0.0010952 0
8 DJ8OG 0.0011 893 0
9 DK2CX 0.0013 1540 1
10 RC6U 0.0014 695 0

2013 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 K3PH 0.0006 1532 0
2 LY2W 0.0006 1486 0
3 K6LL 0.0007 1379 0
4 W2LE 0.0007 1263 0
5 LY2NY 0.0008 1156 0
6 K1TO 0.0009 1102 0
7 DJ5MW 0.0010966 0
8 7K4QOK 0.0011 900 0
9 YO4RDW 0.0011 894 0
10 N0BK 0.0021 869 0


2014 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 W3GQ 0.0006 1462 0
2 K1IR 0.0007 1331 0
3 K3PP 0.0007 1273 0
4 K5ZD 0.0008 1205 0
5 N5JR 0.0009 1048 0
6 N9ZM 0.0010 969 0
7 NM1C 0.0010938 0
8 N4PQX 0.0011 896 0
9 K7UA 0.0011 848 0
10 DL1NEO 0.0011 842 0

2014 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 K0KX 0.0005 860 0
2 M6W 0.0005 712 0
3 S54X 0.0006 708 0
4 YT0A 0.0007 706 0
5 RG5A 0.0008 680 0
6 K3PH 0.0008 559 0
7 S56A 0.0008558 0
8 AD1C 0.0009 557 0
9 DJ2MX 0.0009 542 0
10 RD9CX 0.0009 478 0


2015 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 K5LLA 0.0007 1273 0
2 AA1ON 0.0008 1223 0
3 N2SQW 0.0008 1124 0
4 N4KG 0.0011 899 0
5 S56A 0.0011 866 0
6 VE3CV 0.0012 829 0
7 ES2MC 0.0012817 0
8 K0KX 0.0012 1707 1
9 OH6GDX 0.0012 793 0
10 W3MF 0.0012 1626 1

2015 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 LZ9R 0.0005 1777 0
2 KE3X 0.0006 1486 0
3 K6LL 0.0008 1225 0
4 SP2LNW 0.0008 1146 0
5 WE9V 0.0009 1057 0
6 K6ND 0.0009 1014 0
7 W1GD 0.0010986 0
8 OG6N 0.0010 964 0
9 DH0GHU 0.0011 900 0
10 W2LE 0.0011 900 0


2016 CQ WW SSB -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 DL7URH 0.0009 1071 0
2 TM7X 0.0009 1042 0
3 W1GD 0.0009 1008 0
4 DK2LO 0.0011 863 0
5 IR4M 0.0012 829 0
6 N4KG 0.0012 797 0
7 DL9DRA 0.0013746 0
8 N4PQX 0.0013 746 0
9 DR1A 0.0013 733 0
10 TM6M 0.0013 713 0

2016 CQ WW CW -- weighted mean values of $p_{bust}$ (non-run)
Position Call weighted mean $Q_v$ $B$
1 DL0XM 0.0005 1718 0
2 KE3X 0.0007 1326 0
3 K0KX 0.0008 1185 0
4 UX7IW 0.0008 1144 0
5 DM2M 0.0008 1142 0
6 YT2AAA 0.0009 1061 0
7 LA4C 0.0010979 0
8 DM5EE 0.0010 961 0
9 RL4A 0.0010 935 0
10 W3GQ 0.0010 933 0



We can easily compare the annual weighted mean values of $p_{bust}$ for SSB and CW:


I note that the Reverse Beacon Network (RBN) came online in 2009, and although its G(15, 100) scatter metric shows little change between November, 2009 and November, 2010, it seems likely that far fewer operators were aware of its existence and utility in 2009 than in 2010. It is reasonable to suppose (although I have made no attempt to test the hypothesis) that the existence of the RBN is at least partly responsible for the consistent improvement in accuracy on CW that started in 2010.

If you wish to perform your own analyses, a file of the weighted means of the $p_{bust}$ probability function for each individual station (not just the top-ten stations listed above) is available for the period 2005 to 2016. (You can, of course, create your own dataset(s) from the full augmented data files.)


2017-09-18

Stations With Lowest Probability of Busting a Call: CQ WW CW 2005 to 2016

Prior posts in this series:
In this post I list the stations with the lowest probabilities of busting a call in CQ WW CW from 2005 to 2016, using the procedure developed in the second post above. This is the same methodology as was used in the third post.

2005 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 LZ9R 0.0008 1210 0
2 HI3/SP9XCN 0.0008 2403 1
3 K1TO 0.0010 992 0
4 OK1FDR 0.0011 888 0
5 W5MX 0.0012 826 0
6 DK1MAX 0.0013 717 0
7 OK1JOC 0.0014701 1
8 DL6KVA 0.0014 698 0
9 OM8ON 0.0014 693 0
10 DF1DX 0.0015 656 0

As with SSB, we plot the aggregated probability function for $p_{bust}$, weighted by the number of verified QSOs, $Q_v$, for all stations:


As before, the location of the vertical line represents the weighted mean of the probability curve.

2006 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 DL5KUT 0.0007 1288 0
2 LY2MM 0.0008 1223 0
3 I2WIJ 0.0009 1091 0
4 OH8X 0.0009 2235 1
5 DL8DYL 0.0010 982 0
6 9A3GI 0.0010 953 0
7 HB9ARF 0.0012802 0
8 WE9V 0.0013 747 0
9 K1HT 0.0014 710 0
10 KR2Q 0.0014 693 0


2007 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 SM6CNN 0.0007 1267 0
2 DL8DYL 0.0008 1151 0
3 SP2LNW 0.0010 967 0
4 KQ3F 0.0012 828 0
5 W2LE 0.0012 784 0
6 TM6A 0.0012 1614 1
7 N9CK 0.0013765 0
8 K8CC 0.0013 763 0
9 UA1CUR 0.0013 760 0
10 W1MU 0.0013 744 0


2008 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 S56A 0.0007 1368 0
2 K6NA 0.0010 997 0
3 HA8FW 0.0011 900 0
4 DL1RG 0.0012 785 0
5 N9CK 0.0012 772 0
6 LY3BG 0.0014 684 0
7 K5ZD 0.00142827 3
8 PA0JNH 0.0015 640 0
9 JS3CTQ 0.0015 631 0
10 OK1JOC 0.0016 1287 1


2009 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 N4BP 0.0008 1229 0
2 LZ2SX 0.0008 1135 0
3 K1ZZ 0.0009 1009 0
4 W3OA 0.0010 988 0
5 OM0WR 0.0010 923 0
6 OK2BUT 0.0012 791 0
7 EY8MM 0.0013735 0
8 JP1QDH 0.0013 729 0
9 SM0Q 0.0014 709 0
10 KR2Q 0.0014 702 0


2010 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 YT2AAA 0.0007 1418 0
2 N2GC 0.0008 1200 0
3 SP9NSV 0.0008 1188 0
4 OK7T 0.0010 969 0
5 RZ3VO 0.0011 892 0
6 W6OAT 0.0012 806 0
7 VA7RN 0.0012771 0
8 OH8FKU 0.0013 741 0
9 OH6MW 0.0013 2267 2
10 G4HZV 0.0014 683 0


2011 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 LZ2SX 0.0007 1296 0
2 OR2F 0.0007 1293 0
3 W1ZT 0.0007 1266 0
4 W3OA 0.0008 1212 0
5 RN1ON 0.0008 1134 0
6 LZ9R 0.0008 2407 1
7 RG5A 0.00091080 0
8 UN9GD 0.0009 1079 0
9 US2IZ 0.0009 1050 0
10 DL1DVE 0.0010 951 0


2012 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 HB9ARF 0.0006 1601 0
2 JI1RXQ 0.0006 1514 0
3 DJ1YFK 0.0007 1266 0
4 DL4FN 0.0008 1166 0
5 SM6FKF 0.0009 1069 0
6 ES1WST 0.0009 1040 0
7 AD1C 0.0010984 0
8 SM6CNN 0.0010 976 0
9 LY3CY 0.0011 895 0
10 SM5CIL 0.0011 887 0


2013 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 K1TO 0.0006 1569 0
2 VX7SZ 0.0006 1491 0
3 LY2NY 0.0006 1439 0
4 W2LE 0.0007 1369 0
5 IK8UND 0.0007 1297 0
6 UA3MIF 0.0009 1037 0
7 LY3CY 0.0010985 0
8 N0BK 0.0010 955 0
9 OM0WR 0.0010 949 0
10 AA7V 0.0011 900 0


2014 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 S54X 0.0005 2005 0
2 KM3T 0.0005 1829 0
3 5H3EE 0.0006 1637 0
4 S56A 0.0006 1622 0
5 OH6MW 0.0007 3024 1
6 YT2AAA 0.0007 1376 0
7 AD1C 0.00071337 0
8 UW1WU 0.0007 1317 0
9 K2MK 0.0007 1302 0
10 M6W 0.0009 2267 1


2015 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 K6LL 0.0005 1922 0
2 LZ9R 0.0007 2833 1
3 K7UA 0.0007 1254 0
4 JI1RXQ 0.0008 1219 0
5 DH0GHU 0.0008 1216 0
6 RG5A 0.0008 1127 0
7 OM0WR 0.00081119 0
8 RX1A 0.0009 1099 0
9 RD9CX 0.0009 1093 0
10 RW5CW 0.0009 1071 0


2016 CQ WW CW -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 LY5W 0.0005 1850 0
2 KE3X 0.0006 1633 0
3 DM2M 0.0006 1563 0
4 K0KX 0.0007 1389 0
5 K1ZZ 0.0008 2555 1
6 RX7K 0.0009 1031 0
7 EW8W 0.00091017 0
8 K2PO 0.0010 977 0
9 OL4W 0.0010 975 0
10 LY3CY 0.0010 955 0


NB: As mentioned in the SSB analysis, it is, of course, much easier to copy a callsign correctly if one calls stations rather than running them. Indeed, a reasonably careful station that restricts itself to calling others should never make a mistake in copying a callsign. In the above analysis, there is no attempt to distinguish which station is calling which. Therefore we will refine this analysis in a later post, restricting it to running stations.

As with SSB, one thing stands out from the above plots: the distribution function for $p_{bust}$ across all entrants is remarkably robust. Here is a plot of the weighted mean of $p_{bust}$ as a function of time (the CW data are red; the SSB data are superimposed in black):

Just as for SSB, the long-term trend is for an improvement in accuracy, but the last few years seem to have stabilised around a mean weighted probability of a bust of about 1.6%. It is clear that the bust rate for CW is persistently better by a small amount than the rate for SSB (which is perhaps a surprising result).

If you wish to perform your own analyses, a file of the CW weighted means of the $p_{bust}$ probability function for each individual station (not just the top-ten stations listed above) is available for the period 2005 to 2016. (You can, of course, create your own dataset(s) from the full augmented data files.)

2017-09-12

Stations With Lowest Probability of Busting a Call: CQ WW SSB 2005 to 2016

Prior posts in this series:
In this post I list the stations with the lowest probabilities of busting a call in CQ WW SSB from 2005 to 2016, using the procedure developed in the second post above.

2005 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 OH5BM 0.0005 1904 0
2 9A2EU 0.0008 1175 0
3 N5AU 0.0012 802 0
4 UA1OMX 0.0015 649 0
5 V31MQ 0.0017 563 0
6 UR6IJ 0.0018 533 0
7 ES5RY 0.00191068 1
8 KF2O 0.0020 488 0
9 DL3BRA 0.0021 470 0
10 EA1JO 0.0022 457 0

It is also interesting to plot the aggregated probability function for $p_{bust}$, weighted by the number of verified QSOs, $Q_v$, for all stations:


The location of the vertical line represents the weighted mean of the probability curve.

2006 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 VA7RR 0.0008 1192 0
2 W1CU 0.0009 1052 0
3 PA0JNH 0.0012 795 0
4 EI4DW 0.0014 700 0
5 9A2EU 0.0015 1346 1
6 YM2W 0.0015 649 0
7 PC4M 0.0015647 0
8 K1GU 0.0015 630 0
9 AA8LL 0.0016 592 0
10 LY3CY 0.0017 588 0


2007 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 IZ3KKE 0.0014 668 0
2 VR10XLN 0.0015 629 0
3 N2LBR 0.0016 590 0
4 RV6LFE 0.0017 1203 1
5 DL4LBK 0.0019 519 0
6 LY3CY 0.0019 516 0
7 DH0GHU 0.00201017 1
8 LY4DX 0.0020 489 0
9 9M6XRO 0.0020 485 0
10 K0GEO 0.0021 471 0


2008 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 DL9DRA 0.0011 821 0
2 AL9A 0.0012 813 0
3 K3OO 0.0012 804 0
4 W2IRT 0.0012 779 0
5 IU9A 0.0013 762 0
6 N8BJQ 0.0015 652 0
7 VE4EAR 0.0016608 0
8 K3WI 0.0016 597 0
9 DF2RG 0.0017 564 0
10 MU0GSY 0.0017 559 0


2009 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 PY2EX 0.0009 1065 0
2 JS3CTQ 0.0011 858 0
3 UN2E 0.0013 718 0
4 UA3LHL 0.0014 711 0
5 VE2IM 0.0014 2804 3
6 AA8LL 0.0014 676 0
7 K3WI 0.0015656 0
8 KG4W 0.0016 604 0
9 N2ZX 0.0016 595 0
10 OQ5M 0.0016 592 0


2010 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 RW1CW 0.0007 1266 0
2 S56A 0.0009 1108 0
3 N0HR 0.0011 860 0
4 TM4W 0.0012 821 0
5 N4PQX 0.0012 770 0
6 DF2RG 0.0014 669 0
7 DK5DQ 0.00141384 1
8 W6YA 0.0015 647 0
9 DJ5MW 0.0015 1970 2
10 KR2Q 0.0015 631 0


2011 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 W4ZV 0.0006 1464 0
2 N4TZ 0.0007 1374 0
3 NW2K 0.0010 896 0
4 LY3CY 0.0012 826 0
5 K7EDX 0.0012 815 0
6 SP9XCN 0.0012 3256 3
7 DL3LAB 0.0013763 0
8 S56A 0.0013 741 0
9 LY5E 0.0014 712 0
10 W4EF 0.0014 684 0


2012 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 N1IBM 0.0010 914 0
2 K3TEJ 0.0011 878 0
3 LZ1DM 0.0012 815 0
4 HB9ARF 0.0012 799 0
5 ND0C 0.0013 764 0
6 K0AP 0.0013 763 0
7 JM1NKT 0.0013750 0
8 DF2RG 0.0013 747 0
9 AA4R 0.0013 734 0
10 K2RD 0.0014 708 0


2013 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 N1EU 0.0006 1603 0
2 9A2EU 0.0007 1399 0
3 W3GQ 0.0007 1280 0
4 NW0M 0.0009 1025 0
5 LY3CY 0.0010 956 0
6 DM5EE 0.0011 854 0
7 RU3SD 0.0011849 0
8 DK2CX 0.0013 1563 1
9 G4IIY 0.0013 747 0
10 OR2A 0.0014 747 0


2014 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 DL1NKS 0.0005 1751 0
2 W3GQ 0.0006 1471 0
3 RU6K 0.0007 1284 0
4 DL1NEO 0.0008 1145 0
5 N9ZM 0.0010 971 0
6 N4PQX 0.0010 967 0
7 LI5LJA 0.0010958 0
8 NM1C 0.0010 953 0
9 K5ZD 0.0011 2713 2
10 RA4DR 0.0011 857 0


2015 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 ES2MC 0.0007 1371 0
2 K5LLA 0.0007 1346 0
3 N2SQW 0.0008 1137 0
4 N4KG 0.0010 911 0
5 PZ5RA 0.0011 1892 1
6 S56A 0.0011 894 0
7 VA7RR 0.00111789 1
8 VE3CV 0.0011 850 0
9 OH6GDX 0.0012 818 0
10 N5ZC 0.0012 774 0


2016 CQ WW SSB -- weighted mean values of $p_{bust}$
Position Call weighted mean $Q_v$ $B$
1 DL7URH 0.0008 1209 0
2 W1GD 0.0009 1065 0
3 DK2LO 0.0011 869 0
4 N4KG 0.0012 809 0
5 OE1HHB 0.0012 807 0
6 N4PQX 0.0013 759 0
7 DL9DRA 0.0013754 0
8 I4XNN 0.0013 743 0
9 R7MM 0.0013 717 0
10 DJ6OZ 0.0014 697 0


NB: it is, of course, much easier to copy a callsign correctly if one calls stations rather than running them. Indeed, a reasonably careful station that restricts itself to calling others should never make a mistake in copying a callsign. In the above analysis, there is no attempt to distinguish which station is calling which. Therefore we will refine this analysis in a later post, restricting it to running stations.

One thing stands out from the above plots: the distribution function for $p_{bust}$ across all entrants is remarkably robust. Here is a plot of the weighted mean of $p_{bust}$ as a function of time:

The long-term trend is for an improvement in accuracy (obviously a good thing), but the last few years seem to have stabilised around a mean weighted probability of a bust of about 1.7%.

If you wish to perform your own analyses, a file of the SSB weighted means of the $p_{bust}$ probability function for each individual station (not just the top-ten stations listed above) is available for the period 2005 to 2016. (You can, of course, create your own dataset(s) from the full augmented data files.)


2017-09-07

More Sanity Checking of the LANL GPS Charged-Particle Dataset

Prior posts in this series may be found at:
In this post I continue looking at the values of fields for the CXD experiment carried on ns53 through ns73.

Sanity check for L_shell


The values for L_shell include some NA values (created during earlier processing), representing locations for which the L-shell calculation is not meaningful. It is fairly debatable whether these should be removed, so as to ensure that the user cannot make the mistake of failing to check for NA values. On balance, though, it seems better to leave these values in the dataset, since the actual data from the satellite are not tainted.

Ignoring the NA values, the values of L_shell lie in the following ranges:

L_shell
Satellite Minimum Maximum
53 4.079050e+00 6.885292e+01
54 4.073716e+00 7.250067e+01
55 4.067056e+00 7.125280e+01
56 4.081161e+00 7.127625e+01
57 4.113699e+00 7.339611e+01
58 4.088591e+00 7.147417e+01
59 4.058853e+00 7.154358e+01
60 4.083813e+00 7.114283e+01
61 4.061549e+00 7.002652e+01
62 4.082852e+00 6.885380e+01
63 4.076490e+00 7.115145e+01
64 4.105269e+00 7.008071e+01
65 4.068625e+00 6.727069e+01
66 4.084220e+00 6.957386e+01
67 4.108083e+00 7.065966e+01
68 4.108754e+00 7.211983e+01
69 4.106989e+00 6.798032e+01
70 4.100414e+00 6.645398e+01
71 4.103767e+00 7.137340e+01
72 4.103526e+00 7.117196e+01
73 4.096220e+00 6.786675e+01

These look reasonable.

Sanity check for L_LGM_TS04IGRF


The values for L_LGM_TS04IGRF include some NA values (created during earlier processing), representing locations for which the L-shell calculation is not meaningful. It is fairly debatable whether these should be removed, so as to ensure that the user cannot make the mistake of failing to check for NA values. On balance, though, it seems better to leave these values in the dataset, since the actual data from the satellite are not tainted.

Ignoring the NA values, the values of L_LGM_TS04IGRF lie in the following ranges:

L_LGM_TS04IGRF
Satellite Minimum Maximum
53 3.947573e+00 6.927239e+01
54 3.901199e+00 6.919588e+01
55 3.936277e+00 6.879617e+01
56 3.792127e+00 7.015551e+01
57 4.008310e+00 7.110403e+01
58 3.900022e+00 7.005057e+01
59 4.007891e+00 6.847356e+01
60 4.003237e+00 7.221038e+01
61 3.902738e+00 6.978320e+01
62 3.912530e+00 7.011196e+01
63 3.971503e+00 6.971264e+01
64 4.024707e+00 6.769095e+01
65 4.015073e+00 7.188151e+01
66 4.007551e+00 6.856100e+01
67 4.050529e+00 6.987180e+01
68 3.995247e+00 6.942418e+01
69 4.048874e+00 6.902460e+01
70 4.046164e+00 6.815424e+01
71 4.071240e+00 6.757528e+01
72 3.999839e+00 6.450151e+01
73 4.044781e+00 6.871470e+01

These look reasonable.

Sanity check for L_LGM_OP77IGRF


The values for L_LGM_OP77IGRF include some NA values (created during earlier processing), representing locations for which the L-shell calculation is not meaningful. It is fairly debatable whether these should be removed, so as to ensure that the user cannot make the mistake of failing to check for NA values. On balance, though, it seems better to leave these values in the dataset, since the actual data from the satellite are not tainted. I note that the description of this field claims that it is "not currently filled". This is obviously not true.

Ignoring the NA values, the values of L_LGM_OP77IGRF lie in the following ranges:

L_LGM_OP77IGRF
Satellite Minimum Maximum
53 4.113965e+00 3.660894e+01
54 4.106457e+00 3.617539e+01
55 4.100884e+00 3.591780e+01
56 4.113720e+00 3.660868e+01
57 4.146636e+00 3.850798e+01
58 4.120502e+00 3.787992e+01
59 4.091215e+00 3.613692e+01
60 4.117398e+00 3.684020e+01
61 4.094553e+00 3.684505e+01
62 4.114965e+00 3.617936e+01
63 4.108885e+00 3.639508e+01
64 4.138934e+00 3.603204e+01
65 4.103389e+00 3.535154e+01
66 4.116871e+00 3.776598e+01
67 4.144117e+00 3.279393e+01
68 4.145199e+00 2.837767e+01
69 4.138738e+00 3.545018e+01
70 4.132139e+00 3.260918e+01
71 4.136635e+00 3.643418e+01
72 4.137440e+00 3.532261e+01
73 4.127833e+00 3.632726e+01

These look (mostly) reasonable; but note that the maximum valid values are considerably less than for the other magnetic field models, and also the low maximum for ns68, which may indicate an issue worthy of more investigation with the data for that satellite.

Sanity check for L_LGM_T89CDIP


The values for L_LGM_T89CDIP include some NA values (created during earlier processing), representing locations for which the L-shell calculation is not meaningful. It is fairly debatable whether these should be removed, so as to ensure that the user cannot make the mistake of failing to check for NA values. On balance, though, it seems better to leave these values in the dataset, since the actual data from the satellite are not tainted.

Ignoring the NA values, the values of L_LGM_T89CDIP lie in the following ranges:

L_LGM_T89CDIP
Satellite Minimum Maximum
53 4.156665e+00 7.046841e+01
54 4.134309e+00 7.297807e+01
55 4.141375e+00 7.265581e+01
56 4.147715e+00 7.362871e+01
57 4.171050e+00 7.021322e+01
58 4.160699e+00 6.858366e+01
59 4.138150e+00 7.196883e+01
60 4.132394e+00 7.063522e+01
61 4.135012e+00 7.077780e+01
62 4.164926e+00 6.988359e+01
63 4.155301e+00 7.192335e+01
64 4.165912e+00 6.925883e+01
65 4.153215e+00 6.977235e+01
66 4.163230e+00 6.761487e+01
67 4.174354e+00 6.961524e+01
68 4.172899e+00 6.893099e+01
69 4.178059e+00 7.078880e+01
70 4.174908e+00 7.211150e+01
71 4.179994e+00 7.007543e+01
72 4.171566e+00 7.102184e+01
73 4.177882e+00 6.814721e+01

These look reasonable.

Sanity check for bfield_ratio


The definition of bfield_ratio is:

Column Variable name type Dim. description
33 bfield_ratio double 1 Bsatellite/Bequator

 This appears to mean:

Column Variable name type Dim. description
33 bfield_ratio double 1 Ratio of magnetic field at the satellite to the magnetic field along the field line to the equator.

The recorded value of this field is not obvious (especially since it is naturally highly dependent on the field model one uses).

Looking at the values of the bfield_ratio, one quickly sees many NA values and, worse, values of the form -n.nnnnnne+99 that make no sense at all. It is therefore not obvious that this field was ever subject to any kind of quality control.

In private communication with the LANL team, I discovered that:
  1. There is no in situ satellite instrument for measuring magnetic fields;
  2. All fields related to magnetic measurement are calculated, not measured.
  3. The primary reference for the calculation is: https://github.com/drsteve/LANLGeoMag.
It does not, therefore, seem sensible to retain these fields from the records (i.e., in particular, bfield_ratio, b_sattelite [which I remove with some relief, for obvious reasons] and b_equator [removed with relief for reasons that are almost as obvious if one looks at the official documentation for the field]. If a user wishes to calculate the values of equivalent fields for himself, he may do so, using the then-current versions of the routines cited above or similar routines. (Although it is obviously troubling that apparently it was possible to obtain nonsense results from the published routines, at least as of the date when the original 1.3 dataset was released. So, if a user calculates magnetic values for himself, he is urged to check their sanity before relying on them.)

Stage 31: Remove bfield_ratio


for file in ns[567]*
  do 
    awk '{$33=""; print $0}' $file | tr -s " " | sed 's/ $//' > ../gps-stage-31/$file
  done

The records for ns53 to ns73 now look like this:


Column Variable name type Dim. description
1 decimal_day double 1 GPS time: a decimal number in the range [1, 367) in leap years or [1, 366) otherwise, representing the day of the year (1-Jan 00:00 to 31-Dec 24:00).
2 Geographic_Latitude double 1 Latitude of satellite (°, N +ve)
3 Geographic_Longitude double 1 Longitude of satellite (°, E +ve, measured from Greenwich meridian)
4 Rad_Re double 1 Distance from centre of Earth, in units of Earth radii.
5-15 rate_electron_measured double 11 Measured rate (Hz) in each of the 11 CXD electron channels
16-20 rate_proton_measured double 5 Measured rate (Hz) in each of the 5 CXD proton channels (P1-P5)
21 LEP_thresh double 1 LEP threshold in E1 channels, in keV
22 collection_interval int 1 dosimeter collection period (seconds)
23 year int 1 year (e.g. 2015)
24 decimal_year double 1 decimal year = year + (decimal_day-1.0) / (days in year)
25 SVN int 1 Satellite Vehicle Number
26 b_coord_radius double 1 Distance from dipole axis, in units of Earth radii.
27 b_coord_height double 1 Distance from dipole equatorial plane, in units of Earth radii (N +ve).
28 magnetic_longitude double 1 Magnetic longitude (degrees)
29 L_shell double 1 L shell: McIlwain calculation according to model with T89 External Field, IGRF Internal Field.
30 L_LGM_TS04IGRF double 1 LanlGeoMag L-shell McIlwain calculation, TS04 External Field, IGRF Internal Field.
31 L_LGM_OP77IGRF double 1 LanlGeoMag L-shell McIlwain calculation, OP77 External Field, IGRF Internal Field (not currently filled)
32 L_LGM_T89CDIP double 1 LanlGeoMag L-shell McIlwain calculation, T89 External Field, Centered Dipole Internal Field
33 local_time double 1 magnetic local time (0-24 hours)
34 utc_lgm double 1 UTC (0-24 hours)
35 b_sattelite double 1 B field at satellite (gauss)
36 b_equator double 1 B field at equator (on this field line I think) (gauss)
37-47 electron_background double 11 estimated background in electron channels E1-E11 (Hz)
48-52 proton_background double 5 estimated background in proton channels P1-P5 (Hz)
53 proton_activity int 1 =1 if there is significant proton activity
54 proton_temperature_fit double 1 characteristic momentum -- R0 in the expression given above (MeV/c)
55 proton_density_fit double 1 N0 parameter in fit to proton flux ((protons/(cm2 sec sr MeV))
56 electron_temperature_fit double 1 electron temperature from a one Maxwellian fit (MeV)
57 electron_density_fit double 1 electron number density from a one Maxwellian fit (cm-3)
58-62 model_counts_proton_fit_pf double 5 P1-P5 rate from proton fit (using proton_temperature_fit, proton_density_fit)
63-73 model_counts_electron_fit double 11 E1-E11 rates from the 9-parameter electron flux model
74-79 proton_integrated_flux_fit double 6 integral of proton flux (based on fit) above 10, 15.85, 25.11, 30, 40, 79.43 MeV (proton kinetic energy)
80-109 integral_flux_instrument double 30 (based on 9 parameter fit) integral of electron flux above integral_flux_energy[i] particles/(cm2 sec)
110-139 integral_flux_energy double 30 energies for the integral of integral_flux_instrument (MeV)
140-154 electron_diff_flux_energy double 15 energies for the fluxes in electron_diff_flux_energy (MeV)
155-169 electron_diff_flux double 15 (based on 9 parameter fit) electron flux at energies electron_diff_flux[i] (particle/(cm2 sr MeV sec))
170-178 Efitpars double 9 fit parameters for 9 parameter electron fit

Stage 32: Remove b_sattelite


  for file in ns[567]*
  do 
    awk '{$35=""; print $0}' $file | tr -s " " | sed 's/ $//' > ../gps-stage-32/$file
  done

The records for ns53 to ns73 now look like this:


Column Variable name type Dim. description
1 decimal_day double 1 GPS time: a decimal number in the range [1, 367) in leap years or [1, 366) otherwise, representing the day of the year (1-Jan 00:00 to 31-Dec 24:00).
2 Geographic_Latitude double 1 Latitude of satellite (°, N +ve)
3 Geographic_Longitude double 1 Longitude of satellite (°, E +ve, measured from Greenwich meridian)
4 Rad_Re double 1 Distance from centre of Earth, in units of Earth radii.
5-15 rate_electron_measured double 11 Measured rate (Hz) in each of the 11 CXD electron channels
16-20 rate_proton_measured double 5 Measured rate (Hz) in each of the 5 CXD proton channels (P1-P5)
21 LEP_thresh double 1 LEP threshold in E1 channels, in keV
22 collection_interval int 1 dosimeter collection period (seconds)
23 year int 1 year (e.g. 2015)
24 decimal_year double 1 decimal year = year + (decimal_day-1.0) / (days in year)
25 SVN int 1 Satellite Vehicle Number
26 b_coord_radius double 1 Distance from dipole axis, in units of Earth radii.
27 b_coord_height double 1 Distance from dipole equatorial plane, in units of Earth radii (N +ve).
28 magnetic_longitude double 1 Magnetic longitude (degrees)
29 L_shell double 1 L shell: McIlwain calculation according to model with T89 External Field, IGRF Internal Field.
30 L_LGM_TS04IGRF double 1 LanlGeoMag L-shell McIlwain calculation, TS04 External Field, IGRF Internal Field.
31 L_LGM_OP77IGRF double 1 LanlGeoMag L-shell McIlwain calculation, OP77 External Field, IGRF Internal Field (not currently filled)
32 L_LGM_T89CDIP double 1 LanlGeoMag L-shell McIlwain calculation, T89 External Field, Centered Dipole Internal Field
33 local_time double 1 magnetic local time (0-24 hours)
34 utc_lgm double 1 UTC (0-24 hours)
35 b_equator double 1 B field at equator (on this field line I think) (gauss)
36-46 electron_background double 11 estimated background in electron channels E1-E11 (Hz)
47-51 proton_background double 5 estimated background in proton channels P1-P5 (Hz)
52 proton_activity int 1 =1 if there is significant proton activity
53 proton_temperature_fit double 1 characteristic momentum -- R0 in the expression given above (MeV/c)
54 proton_density_fit double 1 N0 parameter in fit to proton flux ((protons/(cm2 sec sr MeV))
55 electron_temperature_fit double 1 electron temperature from a one Maxwellian fit (MeV)
56 electron_density_fit double 1 electron number density from a one Maxwellian fit (cm-3)
57-61 model_counts_proton_fit_pf double 5 P1-P5 rate from proton fit (using proton_temperature_fit, proton_density_fit)
62-72 model_counts_electron_fit double 11 E1-E11 rates from the 9-parameter electron flux model
73-78 proton_integrated_flux_fit double 6 integral of proton flux (based on fit) above 10, 15.85, 25.11, 30, 40, 79.43 MeV (proton kinetic energy)
79-108 integral_flux_instrument double 30 (based on 9 parameter fit) integral of electron flux above integral_flux_energy[i] particles/(cm2 sec)
109-138 integral_flux_energy double 30 energies for the integral of integral_flux_instrument (MeV)
139-153 electron_diff_flux_energy double 15 energies for the fluxes in electron_diff_flux_energy (MeV)
154-168 electron_diff_flux double 15 (based on 9 parameter fit) electron flux at energies electron_diff_flux[i] (particle/(cm2 sr MeV sec))
169-177 Efitpars double 9 fit parameters for 9 parameter electron fit

Stage 33: Remove b_equator


  for file in ns[567]*
  do 
    awk '{$35=""; print $0}' $file | tr -s " " | sed 's/ $//' > ../gps-stage-32/$file
  done

The records for ns53 to ns73 now look like this:


Column Variable name type Dim. description
1 decimal_day double 1 GPS time: a decimal number in the range [1, 367) in leap years or [1, 366) otherwise, representing the day of the year (1-Jan 00:00 to 31-Dec 24:00).
2 Geographic_Latitude double 1 Latitude of satellite (°, N +ve)
3 Geographic_Longitude double 1 Longitude of satellite (°, E +ve, measured from Greenwich meridian)
4 Rad_Re double 1 Distance from centre of Earth, in units of Earth radii.
5-15 rate_electron_measured double 11 Measured rate (Hz) in each of the 11 CXD electron channels
16-20 rate_proton_measured double 5 Measured rate (Hz) in each of the 5 CXD proton channels (P1-P5)
21 LEP_thresh double 1 LEP threshold in E1 channels, in keV
22 collection_interval int 1 dosimeter collection period (seconds)
23 year int 1 year (e.g. 2015)
24 decimal_year double 1 decimal year = year + (decimal_day-1.0) / (days in year)
25 SVN int 1 Satellite Vehicle Number
26 b_coord_radius double 1 Distance from dipole axis, in units of Earth radii.
27 b_coord_height double 1 Distance from dipole equatorial plane, in units of Earth radii (N +ve).
28 magnetic_longitude double 1 Magnetic longitude (degrees)
29 L_shell double 1 L shell: McIlwain calculation according to model with T89 External Field, IGRF Internal Field.
30 L_LGM_TS04IGRF double 1 LanlGeoMag L-shell McIlwain calculation, TS04 External Field, IGRF Internal Field.
31 L_LGM_OP77IGRF double 1 LanlGeoMag L-shell McIlwain calculation, OP77 External Field, IGRF Internal Field (not currently filled)
32 L_LGM_T89CDIP double 1 LanlGeoMag L-shell McIlwain calculation, T89 External Field, Centered Dipole Internal Field
33 local_time double 1 magnetic local time (0-24 hours)
34 utc_lgm double 1 UTC (0-24 hours)
35-45 electron_background double 11 estimated background in electron channels E1-E11 (Hz)
46-50 proton_background double 5 estimated background in proton channels P1-P5 (Hz)
51 proton_activity int 1 =1 if there is significant proton activity
52 proton_temperature_fit double 1 characteristic momentum -- R0 in the expression given above (MeV/c)
53 proton_density_fit double 1 N0 parameter in fit to proton flux ((protons/(cm2 sec sr MeV))
54 electron_temperature_fit double 1 electron temperature from a one Maxwellian fit (MeV)
55 electron_density_fit double 1 electron number density from a one Maxwellian fit (cm-3)
56-60 model_counts_proton_fit_pf double 5 P1-P5 rate from proton fit (using proton_temperature_fit, proton_density_fit)
61-71 model_counts_electron_fit double 11 E1-E11 rates from the 9-parameter electron flux model
72-77 proton_integrated_flux_fit double 6 integral of proton flux (based on fit) above 10, 15.85, 25.11, 30, 40, 79.43 MeV (proton kinetic energy)
78-107 integral_flux_instrument double 30 (based on 9 parameter fit) integral of electron flux above integral_flux_energy[i] particles/(cm2 sec)
108-137 integral_flux_energy double 30 energies for the integral of integral_flux_instrument (MeV)
138-152 electron_diff_flux_energy double 15 energies for the fluxes in electron_diff_flux_energy (MeV)
153-167 electron_diff_flux double 15 (based on 9 parameter fit) electron flux at energies electron_diff_flux[i] (particle/(cm2 sr MeV sec))
168-176 Efitpars double 9 fit parameters for 9 parameter electron fit

Sanity check for local_time


The definition of local_time is:

Column Variable name type Dim. description
33 local_time double 1 magnetic local time (0-24 hours)

 There are a couple of problems with this definition:
  1. The field name gives no indication that refers to a magnetic value, so should be renamed magnetic_local_time;
  2. It provides no indication of exactly how magnetic local time is defined (and several mutually exclusive definitions are extant).
However, providing that one does not ascribe great accuracy to this value, it might conceivably be useful, so it is not unreasonable to retain it, with some emendations.

Firstly, we redefine it slightly (although unfortunately being forced to retain the ambiguity as to its precise meaning):

Column Variable name type Dim. description
33 magnetic_local_time double 1 magnetic local time [0-24) hours

The actual values of this field lie in the following ranges:

magnetic_local_time
Satellite Minimum Maximum
53 7.845492e-06 2.399998e+01
54 7.956284e-06 2.400000e+01
55 3.351804e-05 2.399994e+01
56 1.586655e-05 2.399998e+01
57 4.068317e-05 2.399998e+01
58 2.519977e-05 2.399999e+01
59 4.977282e-06 2.400000e+01
60 7.915747e-06 2.399999e+01
61 2.649532e-06 2.400000e+01
62 1.991213e-05 2.400000e+01
63 3.556485e-06 2.400000e+01
64 1.172278e-05 2.399996e+01
65 1.809704e-05 2.399994e+01
66 4.205324e-05 2.399998e+01
67 4.227346e-05 2.399994e+01
68 2.200456e-05 2.399982e+01
69 3.367094e-05 2.399992e+01
70 1.883996e-05 2.399991e+01
71 1.952489e-04 2.399984e+01
72 1.620355e-04 2.399977e+01
73 6.868977e-05 2.399989e+01

There are obvious issues with these values:
  1. They are not normalised to [0-24)
  2. The numbers are reported to different precision, depending on their magnitude (and, for small numbers, they are reported to an unjustifiable precision).
These matters are easily fixed by the following script, do-stage-34.py:

#!/usr/bin/env python
# -*- coding: utf8 -*-

import re
import sys

filename = sys.argv[1]

field_nr = 32    # magnetic_local_time (wrt 0)

with open(filename) as records:
  for line in records:
    fields = line.split()
    value_str = fields[field_nr]
    value = float(value_str)
  
    if (value >= 24):
      value = value - 24
    
    output_format = '{:8.5f}'
    
    new_value_str = output_format.format(value)
  
    fields[field_nr] = new_value_str
    newline = " ".join(fields)
 
    print newline


Stage 34: Reformat values of magnetic_local_time


Execute do-stage-34.py on all the relevant satellites:

for file in ns[567]*
do  
  ./do-stage-34.py $file > ../gps-stage-34/$file
done

The maxima and minima now have these (reasonable) values:

magnetic_local_time
Satellite Minimum Maximum
53 0.00001 23.99998
54 0.00000 23.99998
55 0.00003 23.99994
56 0.00002 23.99998
57 0.00004 23.99998
58 0.00003 23.99999
59 0.00000 23.99999
60 0.00001 23.99999
61 0.00000 23.99999
62 0.00000 23.99996
63 0.00000 23.99999
64 0.00001 23.99996
65 0.00002 23.99994
66 0.00004 23.99998
67 0.00004 23.99994
68 0.00002 23.99982
69 0.00003 23.99992
70 0.00002 23.99991
71 0.00020 23.99984
72 0.00016 23.99977
73 0.00007 23.99989

Sanity check for utc_lgm


The definition of utc_lgm [it is unclear why the field is not called simply utc] is:

Column Variable name type Dim. description
34 utc_lgm double 1 UTC (0-24 hours)

 We offer a small correction:

Column Variable name type Dim. description
34 utc_lgm double 1 UTC [0-24) hours

The actual values of this field lie in the following ranges:

utc_lgm
Satellite Minimum Maximum
53 5.567111e-03 2.396917e+01
54 5.567111e-03 2.398610e+01
55 1.916133e-02 2.399556e+01
56 6.108889e-03 2.397277e+01
57 1.248933e-02 2.399583e+01
58 2.527778e-02 2.398555e+01
59 5.563556e-03 2.399222e+01
60 1.949778e-03 2.395944e+01
61 9.177333e-03 2.398278e+01
62 9.993333e-03 2.398639e+01
63 7.219556e-03 2.399306e+01
64 1.554756e-02 2.399083e+01
65 2.001156e-02 2.399666e+01
66 3.249156e-02 2.399500e+01
67 1.055556e-02 2.398972e+01
68 1.111778e-02 2.395138e+01
69 1.638756e-02 2.399332e+01
70 4.445378e-02 2.399693e+01
71 1.221156e-02 2.399445e+01
72 2.527778e-02 2.396389e+01
73 4.111778e-02 2.397445e+01

The numbers are obviously reported to a precision that is a function of their magnitude. This is easily fixed by the following script, do-stage-35.py:

#!/usr/bin/env python
# -*- coding: utf8 -*-

import re
import sys

filename = sys.argv[1]

field_nr = 33    # utc_lgm (wrt 0)

with open(filename) as records:
  for line in records:
    fields = line.split()
    value_str = fields[field_nr]
    value = float(value_str)
    
    output_format = '{:8.5f}'
    
    new_value_str = output_format.format(value)
  
    fields[field_nr] = new_value_str
    newline = " ".join(fields)
 
    print newline


Note, however, that the minima are orders of magnitude greater than the originally reported values for the field magnetic_local_time. There is  a slight inconsistency in the mechanisms for reporting these two types of time. It is hard to see how this will make any difference when actually using the dataset, but I note it in passing.

Stage 35: Reformat values of utc_lgm


Execute do-stage-34.py on all the relevant satellites:

for file in ns[567]*
do  
  ./do-stage-35.py $file > ../gps-stage-35/$file
done

The maxima and minima now have these values:

utc_lgm
Satellite Minimum Maximum
53 0.00557 23.96917
54 0.00557 23.98610
55 0.01916 23.99556
56 0.00611 23.97277
57 0.01249 23.99583
58 0.02528 23.98555
59 0.00556 23.99222
60 0.00195 23.95944
61 0.00918 23.98278
62 0.00999 23.98639
63 0.00722 23.99306
64 0.01555 23.99083
65 0.02001 23.99666
66 0.03249 23.99500
67 0.01056 23.98972
68 0.01112 23.95138
69 0.01639 23.99332
70 0.04445 23.99693
71 0.01221 23.99445
72 0.02528 23.96389
73 0.04112 23.97445

A checkpoint copy of the stage 35 files is available here, with MD5 checksum b85d41e615126e3912bd50aa55a4af54.

The data table for ns41 and ns48 still looks like this:


Column Variable name type Dim. Description
1 decimal_day double 1 GPS time -- a number from 1 (1-Jan 00:00) to 366 (31-Dec 24:00) or 367 in leap years
2 Geographic_Latitude double 1 Latitude of satellite (deg)
3 Geographic_Longitude double 1 Longitude of satellite (deg)
4 Rad_Re double 1 (radius of satellite)/Rearth
5-12 rate_electron_measured double 8 Measured rate (Hz) in each of the 8 BDD electron channels (E1-E8)
13-20 rate_proton_measured double 8 Measured rate (Hz) in each of the 8 BDD proton channels (P1-P8)
21 collection_interval int 1 dosimeter collection period (seconds)
22 year int 1 year (e.g. 2015)
23 decimal_year double 1 decimal year = year + (decimal_day-1.0)/(days in year)
24 svn_number int 1 SVN number of satellite
25 b_coord_radius double 1 radius from earth's dipole axis (earth radii)
26 b_coord_height double 1 height above the earth's dipole equatorial plane (earth radii)
27 magnetic_longitude double 1 Magnetic longitude (degrees)
28 L_shell double 1 L_shell (earth radii) -- I do not clearly understand the origin of the calculation, but it seems to be a dipole field/T-89
29 bfield_ratio double 1 Bsatellite/Bequator
30 local_time double 1 magnetic local time (0-24 hours)
31 b_sattelite double 1 B field at satellite (gauss)
32 b_equator double 1 B field at equator (on this field line I think) (gauss)
33-40 electron_background double 8 estimated background in electron channels E1-E8 (Hz)
41-48 proton_background double 8 estimated background in proton channels P1-P8 (Hz)
49 proton_activity int 1 =1 if there is significant proton activity
50 electron_temperature double 1 electron temperature from a one Maxwellian fit (MeV)
51 electron_density_fit double 1 electron number density from a one Maxwellian fit (cm-3)
52-59 model_counts_electron_fit double 8 E1-E8 rates from the 2-parameter Maxwellian fit to the electron data
60-67 dtc_counts_electron double 8 Dead time corrected electron rates (from data, not fit)
68-97 integral_flux_instrument double 30 (based on 2 parameter Maxwellian fit) integral of electron flux above integral_flux_energy[i] particles/(cm2sec)
98-127 integral_flux_energy double 30 energies for the integral of integral_flux_instrument (MeV)
128-142 electron_diff_flux_energy double 15 energies for the fluxes in electron_diff_flux_energy (MeV)
143-157 electron_diff_flux double 15 (based on 2 parameter Maxwellian fit) electron flux at energies electron_diff_flux[i] (particle/(cm2 sr MeV sec))

And for the remaining satellites we now have (I have slightly edited the description of the magnetic_longitude and L_LGM_OP77IGRF fields):


Column Variable name type Dim. description
1 decimal_day double 1 GPS time: a decimal number in the range [1, 367) in leap years or [1, 366) otherwise, representing the day of the year (1-Jan 00:00 to 31-Dec 24:00).
2 Geographic_Latitude double 1 Latitude of satellite (°, N +ve)
3 Geographic_Longitude double 1 Longitude of satellite (°, E +ve, measured from Greenwich meridian)
4 Rad_Re double 1 Distance from centre of Earth, in units of Earth radii.
5-15 rate_electron_measured double 11 Measured rate (Hz) in each of the 11 CXD electron channels
16-20 rate_proton_measured double 5 Measured rate (Hz) in each of the 5 CXD proton channels (P1-P5)
21 LEP_thresh double 1 LEP threshold in E1 channels, in keV
22 collection_interval int 1 dosimeter collection period (seconds)
23 year int 1 year (e.g. 2015)
24 decimal_year double 1 decimal year = year + (decimal_day-1.0) / (days in year)
25 SVN int 1 Satellite Vehicle Number
26 b_coord_radius double 1 Distance from dipole axis, in units of Earth radii.
27 b_coord_height double 1 Distance from dipole equatorial plane, in units of Earth radii (N +ve).
28 magnetic_longitude double 1 Magnetic longitude (°)
29 L_shell double 1 L shell: McIlwain calculation according to model with T89 External Field, IGRF Internal Field.
30 L_LGM_TS04IGRF double 1 LanlGeoMag L-shell McIlwain calculation, TS04 External Field, IGRF Internal Field.
31 L_LGM_OP77IGRF double 1 LanlGeoMag L-shell McIlwain calculation, OP77 External Field, IGRF Internal Field
32 L_LGM_T89CDIP double 1 LanlGeoMag L-shell McIlwain calculation, T89 External Field, Centered Dipole Internal Field
33 magnetic_local_time double 1 magnetic local time [0-24) hours
34 utc_lgm double 1 UTC [0-24) hours
35-45 electron_background double 11 estimated background in electron channels E1-E11 (Hz)
46-50 proton_background double 5 estimated background in proton channels P1-P5 (Hz)
51 proton_activity int 1 =1 if there is significant proton activity
52 proton_temperature_fit double 1 characteristic momentum -- R0 in the expression given above (MeV/c)
53 proton_density_fit double 1 N0 parameter in fit to proton flux ((protons/(cm2 sec sr MeV))
54 electron_temperature_fit double 1 electron temperature from a one Maxwellian fit (MeV)
55 electron_density_fit double 1 electron number density from a one Maxwellian fit (cm-3)
56-60 model_counts_proton_fit_pf double 5 P1-P5 rate from proton fit (using proton_temperature_fit, proton_density_fit)
61-71 model_counts_electron_fit double 11 E1-E11 rates from the 9-parameter electron flux model
72-77 proton_integrated_flux_fit double 6 integral of proton flux (based on fit) above 10, 15.85, 25.11, 30, 40, 79.43 MeV (proton kinetic energy)
78-107 integral_flux_instrument double 30 (based on 9 parameter fit) integral of electron flux above integral_flux_energy[i] particles/(cm2 sec)
108-137 integral_flux_energy double 30 energies for the integral of integral_flux_instrument (MeV)
138-152 electron_diff_flux_energy double 15 energies for the fluxes in electron_diff_flux_energy (MeV)
153-167 electron_diff_flux double 15 (based on 9 parameter fit) electron flux at energies electron_diff_flux[i] (particle/(cm2 sr MeV sec))
168-176 Efitpars double 9 fit parameters for 9 parameter electron fit