====================================================================================================================================
LEAD CAPTURE BY RANGE  --  live ModularBot vs real DrussGT
====================================================================================================================================
corpus            : /tmp/tfil_ab2/out
battles (runs)    : 70
per-run owner maps: {('e', 's'): 70}   (expect all ('e','s'))
runs with a broken owner map      : 0
fire events w/ ambiguous position : 12112
death events side-validated       : 496/496
  side s = US (ModularBot)  n= 56242  top powers: [(1.0, 32044), (0.5, 14556), (0.1, 807), (0.51, 225), (0.55, 208), (0.53, 199)]
  side e = DrussGT  n= 67065  top powers: [(0.15, 27209), (0.95, 22789), (0.45, 5274), (0.25, 3071), (0.65, 2862), (0.35, 2340)]

====================================================================================================================================
SAMPLE
====================================================================================================================================
our shots (aligned, with an interception)     : 54926
  server hit / hitwall / hitbullet / other    : 5480 / 47101 / 1203 / 1142
capture excluded (|required| < 2.0 px lateral) : 887

====================================================================================================================================
GEOMETRY VALIDATION  (hits must separate from misses)
====================================================================================================================================
                      n  |leadErr|deg  |leadErr|px  misPx mean  misPx med   <18px
HITS               5480         1.478         11.4        11.6       10.8   80.8%
MISSES            48304        16.724        141.3       134.1      123.7    0.8%

miss separation ratio (misses/hits) = 11.59x  -> OK (bearing recovery validated)
overall measured hit rate = 9.98%

====================================================================================================================================
MAIN TABLE  --  all our shots, by RANGE band
====================================================================================================================================
reqL/appL = mean signed lead vs LOS (deg).  capt = mean ratio, capSlp = robust proportional
capture, capLin = the same slope for a naive linear predictor (control).

by range band
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
0-100                        27     1    81 10.3    1.51   -0.23   0.72   0.401   0.597  16.76 11.13    23.2 13.01 44.00
100-200                     274    14   162 14.7   -0.95    2.23   0.07   0.391   0.600  17.74 13.38    50.1  6.57 25.28
200-300                     990    30   261 17.9   -1.67    0.37   0.04   0.246   0.428  16.65 11.97    75.8  3.99 16.04
300-450                   17178   259   405 24.5   -0.56    0.40   0.01   0.198   0.404  15.98 11.27   112.9  2.56 11.79
450+                      36457   583   535 31.0    0.19   -0.44   0.15   0.135   0.291  14.71 10.36   137.0  1.95  9.14

====================================================================================================================================
POWER WITHIN RANGE BAND  --  this is what separates 'range' from 'power'
====================================================================================================================================

range 0-100
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
0-100 0.50-0.75               6     1    83  6.5   -4.82   -1.09   0.41   0.448   0.669  12.35  3.75    17.7 12.61 66.67
0-100 1.00-1.50               2     0    77  7.5  -28.19   -7.90   0.27   0.292   0.730  20.29 10.29    27.8 13.17 50.00
0-100 >=1.50                 19     0    80 11.8    6.63    0.85   0.84   0.405   0.574  17.78 12.32    24.4 13.12 35.29

range 100-200
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
100-200 <0.50                 5     0   161 10.4    4.77   -1.52  -0.08   0.436   0.495  14.84  8.18    41.5  6.48 20.00
100-200 0.50-0.75            53    12   166 10.8    1.78    5.83   0.04   0.481   0.567  14.31  8.72    41.2  6.38 30.77
100-200 0.75-1.00             5     0   177 11.2    0.60   -4.71  -1.53   0.527   0.394  11.72  7.59    35.6  5.89 40.00
100-200 1.00-1.50            23     0   168 12.5   -0.21    6.11  -0.04   0.442   0.616  14.50 11.98    46.5  6.47 42.86
100-200 >=1.50              188     2   159 16.3   -2.00    1.02   0.13   0.375   0.606  19.34 14.50    53.7  6.65 21.43

range 200-300
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
200-300 <0.50                 6     0   257 15.7   -0.40   -3.70   0.06   0.512   0.839  10.39  8.54    50.9  4.07 50.00
200-300 0.50-0.75           130    12   267 16.1   -1.54    1.25  -0.40   0.202   0.415  15.92 10.93    74.3  3.90 18.55
200-300 0.75-1.00            21     4   263 17.1   -3.60    3.14   0.34   0.135  -0.015  17.32 10.06    79.1  3.96 11.11
200-300 1.00-1.50           780    13   261 17.8   -1.29    0.29   0.08   0.287   0.462  16.04 11.33    73.0  3.99 15.92
200-300 >=1.50               53     1   248 25.3   -6.97   -1.28   0.29   0.063   0.291  27.83 17.66   122.1  4.20  8.70

range 300-450
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
300-450 <0.50               333    63   409 22.0   -0.93    0.92  -0.67   0.094   0.493  16.30  9.09   116.4  2.54  3.07
300-450 0.50-0.75          5268    82   411 23.4    0.12    0.75   0.25   0.216   0.431  15.16 10.68   108.9  2.52 11.65
300-450 0.75-1.00           880    12   408 24.7   -0.72   -0.36  -0.19   0.203   0.458  16.00 11.28   113.6  2.55 13.14
300-450 1.00-1.50         10696   102   402 25.0   -0.86    0.27  -0.07   0.191   0.386  16.38 11.59   114.8  2.59 12.02
300-450 >=1.50                1     0   312 22.0   -7.39   22.61  -3.06  -3.062  -3.217  30.00   nan   163.1  3.31  0.00

range 450+
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
450+ <0.50                  950   120   537 28.2    0.80    0.67   0.02   0.106   0.302  14.61  8.72   136.8  1.94  1.18
450+ 0.50-0.75            12957   205   536 29.6    0.32   -0.12   0.13   0.151   0.314  14.04  9.96   131.1  1.94 10.20
450+ 0.75-1.00             2424    28   540 31.6    0.52   -0.41   0.01   0.132   0.284  14.92 10.42   140.6  1.93  9.50
450+ 1.00-1.50            20126   230   534 32.0    0.05   -0.71   0.18   0.126   0.279  15.11 10.66   140.4  1.95  8.80

====================================================================================================================================
CONFOUND CHECK  --  the sub-0.5-power shots at long range are the ENDGAME finish
====================================================================================================================================
hit% of our 450+ shots, by the ENEMY's remaining energy at the fire tick:
  enemy energy [  0,  2)  n=  1017  meanP= 0.22 capSlp= 0.111  hit%= 1.10
  enemy energy [  2,  5)  n=  1076  meanP= 0.54 capSlp= 0.128  hit%= 8.55
  enemy energy [  5, 10)  n=  2614  meanP= 0.59 capSlp= 0.135  hit%= 9.69
  enemy energy [ 10, 20)  n=  6758  meanP= 0.63 capSlp= 0.146  hit%= 9.85
  enemy energy [ 20, 40)  n= 10733  meanP= 0.83 capSlp= 0.147  hit%= 9.43
  enemy energy [ 40,150)  n= 14259  meanP= 0.97 capSlp= 0.122  hit%= 9.12

same table, EXCLUDING shots fired while the enemy still has >= 5 energy
(this removes the near-dead-target endgame and leaves the clean power comparison):

range 0-100  (enemy energy >= 5)
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
0-100 0.50-0.75               5     0    80  6.6   -5.78   -4.34   0.41   0.448   0.669  11.80  3.88    16.2 13.00 80.00
0-100 1.00-1.50               2     0    77  7.5  -28.19   -7.90   0.27   0.292   0.730  20.29 10.29    27.8 13.17 50.00
0-100 >=1.50                 16     0    81 11.3    5.37    0.41   0.98   0.503   0.605  14.99 11.43    20.8 13.05 40.00

range 100-200  (enemy energy >= 5)
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
100-200 0.50-0.75            42     2   168 11.2    2.51    2.50   0.03   0.481   0.573  12.93  8.67    37.8  6.33 35.71
100-200 0.75-1.00             5     0   177 11.2    0.60   -4.71  -1.53   0.527   0.394  11.72  7.59    35.6  5.89 40.00
100-200 1.00-1.50            23     0   168 12.5   -0.21    6.11  -0.04   0.442   0.616  14.50 11.98    46.5  6.47 42.86
100-200 >=1.50              175     2   161 16.3   -2.60    1.10   0.05   0.384   0.590  19.19 14.48    54.1  6.57 22.35

range 200-300  (enemy energy >= 5)
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
200-300 <0.50                 6     0   257 15.7   -0.40   -3.70   0.06   0.512   0.839  10.39  8.54    50.9  4.07 50.00
200-300 0.50-0.75           119     2   267 16.2   -1.88   -0.63  -0.41   0.192   0.412  15.49 11.23    72.5  3.89 20.35
200-300 0.75-1.00            17     0   265 17.5   -4.44   -0.78   0.34   0.135  -0.015  16.75 10.98    77.4  3.93 14.29
200-300 1.00-1.50           776     9   261 17.8   -1.30    0.17   0.08   0.287   0.462  16.00 11.34    72.8  3.98 16.01
200-300 >=1.50               40     0   249 25.5   -3.41   -0.27   0.03   0.061   0.290  26.76 18.77   118.8  4.19 11.11

range 300-450  (enemy energy >= 5)
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
300-450 <0.50                 4     0   381 21.5    2.94   -0.28  -1.41   1.202   1.280  17.26 10.28   109.0  2.76 25.00
300-450 0.50-0.75          4825    54   412 23.5    0.14    0.58   0.24   0.220   0.430  15.08 10.64   108.4  2.52 11.82
300-450 0.75-1.00           860     9   408 24.8   -0.72   -0.53  -0.19   0.205   0.453  15.94 11.27   113.3  2.54 13.32
300-450 1.00-1.50         10681    99   402 25.0   -0.87    0.26  -0.07   0.191   0.385  16.38 11.60   114.8  2.59 12.03
300-450 >=1.50                1     0   312 22.0   -7.39   22.61  -3.06  -3.062  -3.217  30.00   nan   163.1  3.31  0.00

range 450+  (enemy energy >= 5)
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
450+ <0.50                    4     0   519 26.8   -1.51  -11.72  -5.43  -3.021  -1.809  26.98  6.38   247.2  2.00  0.00
450+ 0.50-0.75            11882   137   535 29.5    0.31   -0.21   0.16   0.154   0.312  13.97  9.96   130.3  1.95 10.39
450+ 0.75-1.00             2377    28   540 31.6    0.47   -0.45   0.01   0.127   0.275  14.94 10.41   140.7  1.93  9.60
450+ 1.00-1.50            20101   230   534 32.0    0.04   -0.71   0.18   0.127   0.279  15.11 10.66   140.4  1.95  8.80

====================================================================================================================================
RESPONSE CURVE  --  do we move the aim in proportion to the required lead?
====================================================================================================================================

range 200-300  (deciles of required lead -> mean applied lead):
  required [ -46.11, -23.72]  meanReq= -27.79  meanApp=  -9.18  hit%=19.67  n=  123
  required [ -23.71, -16.96]  meanReq= -19.97  meanApp=  -1.30  hit%=14.53  n=  124
  required [ -16.83, -11.27]  meanReq= -13.99  meanApp=  -0.85  hit%=14.29  n=  124
  required [ -11.23,  -2.84]  meanReq=  -7.43  meanApp=   0.34  hit%=14.41  n=  124
  required [  -2.76,   5.10]  meanReq=   1.01  meanApp=   1.67  hit%= 9.24  n=  123
  required [   5.11,  13.22]  meanReq=   9.12  meanApp=  -3.36  hit%=14.88  n=  124
  required [  13.23,  23.92]  meanReq=  18.32  meanApp=   3.04  hit%=11.76  n=  124
  required [  23.94,  45.18]  meanReq=  27.20  meanApp=  12.55  hit%=29.41  n=  124

range 300-450  (deciles of required lead -> mean applied lead):
  required [ -28.84, -19.87]  meanReq= -24.21  meanApp=  -6.04  hit%=13.39  n= 2147
  required [ -19.87, -13.44]  meanReq= -16.43  meanApp=  -0.20  hit%= 9.09  n= 2147
  required [ -13.44,  -7.81]  meanReq= -10.63  meanApp=  -0.19  hit%=10.22  n= 2147
  required [  -7.80,  -1.44]  meanReq=  -4.66  meanApp=  -0.12  hit%=11.82  n= 2148
  required [  -1.44,   5.26]  meanReq=   1.83  meanApp=   0.34  hit%= 9.96  n= 2147
  required [   5.26,  12.33]  meanReq=   8.84  meanApp=   0.39  hit%= 9.00  n= 2147
  required [  12.33,  20.39]  meanReq=  16.05  meanApp=   0.44  hit%= 9.60  n= 2147
  required [  20.39,  28.98]  meanReq=  24.76  meanApp=   8.54  hit%=21.20  n= 2148

range 450+  (deciles of required lead -> mean applied lead):
  required [ -28.60, -17.03]  meanReq= -21.60  meanApp=  -4.09  hit%= 9.27  n= 4557
  required [ -17.03, -10.56]  meanReq= -13.70  meanApp=  -1.51  hit%= 7.92  n= 4557
  required [ -10.56,  -5.13]  meanReq=  -7.79  meanApp=  -1.00  hit%=10.29  n= 4557
  required [  -5.13,   0.00]  meanReq=  -2.51  meanApp=  -0.55  hit%=10.08  n= 4557
  required [   0.00,   5.27]  meanReq=   2.50  meanApp=   0.36  hit%= 9.95  n= 4557
  required [   5.27,  11.06]  meanReq=   8.12  meanApp=  -0.16  hit%= 8.75  n= 4557
  required [  11.06,  17.66]  meanReq=  14.26  meanApp=   0.14  hit%= 7.22  n= 4557
  required [  17.66,  28.54]  meanReq=  22.26  meanApp=   3.26  hit%= 9.69  n= 4558

====================================================================================================================================
DIRECT ANSWER  --  does capture degrade with range / power?
====================================================================================================================================
range band        n  capSlp  capLin  us/lin  medcap  |req|  |app|  |err|px   tol |err|/tol   hit%
0-100            27   0.401   0.597    0.67   0.450  24.77  13.38     23.2 13.01      1.27 44.00
100-200         274   0.391   0.600    0.65   0.442  20.21  16.95     50.1  6.57      2.70 25.28
200-300         990   0.246   0.428    0.58   0.238  15.71  13.84     75.8  3.99      4.17 16.04
300-450       17178   0.198   0.404    0.49   0.174  13.46  13.09    112.9  2.56      6.23 11.79
450+          36457   0.135   0.291    0.46   0.120  11.59  11.43    137.0  1.95      7.54  9.14

(capSlp = our proportional lead capture; capLin = naive linear predictor control;
 us/lin = our capture / the trivial-predictor ceiling; |req|/|app| = mean ABSOLUTE
 lead magnitude in deg; |err|/tol = mean lead error px / 18px)

POWER WITHIN 450+ BAND, enemy energy >= 5 (removes the endgame confound):
  power <0.50       n=     4 meanP= 0.10 meanRange= 519 capSlp=-3.021 capLin=-1.809 |err|px= 247.2 hit%= 0.00
  power 0.50-0.75   n= 11882 meanP= 0.53 meanRange= 535 capSlp= 0.154 capLin= 0.312 |err|px= 130.3 hit%=10.39
  power 0.75-1.00   n=  2377 meanP= 0.87 meanRange= 540 capSlp= 0.127 capLin= 0.275 |err|px= 140.7 hit%= 9.60
  power 1.00-1.50   n= 20101 meanP= 1.00 meanRange= 534 capSlp= 0.127 capLin= 0.279 |err|px= 140.4 hit%= 8.80

====================================================================================================================================
ROBUSTNESS CROSS-CHECK  --  powtest corpus (35 runs, 24277 shots, DIFFERENT binary)
====================================================================================================================================

by range band (powtest)
cell                          n  excl range  flt    reqL    appL   capt  capSlp  capLin  |err|   +/- |err|px   tol   hit%
-------------------------------------------------------------------------------------------------------------------------
0-100                         6     0    91 11.2   -6.18   -0.00   0.60   0.529   0.496  14.10 10.10    20.8 11.38 60.00
100-200                      83     0   170 15.8   -3.28   -2.27   0.89   0.354   0.470  19.49 14.92    58.1  6.16 23.46
200-300                     442     3   260 17.6   -2.70    0.80  -0.02   0.283   0.380  16.47 11.92    74.2  4.01 16.55
300-450                    9843   102   405 24.9   -1.13    0.09   0.05   0.219   0.417  16.12 11.52   114.1  2.56 11.90
450+                      13903   143   525 30.9    0.12   -0.88   0.18   0.136   0.301  15.14 10.80   138.6  1.98  9.24

[json] wrote common_libs/tests/fixtures/lead_capture_by_range_results.json
