== rim retention (rim kept / expected), median, by class and terrain ==
                 median  count
status  cls                   
opening melted     0.61    195
        sharp      2.51    206
        smeared    1.46    131
plain   melted     0.47    460
        sharp      2.45    315
        smeared    1.47    189
status   cls    
opening  melted     -10.0
         sharp     -671.0
         smeared    -19.0
plain    melted     -12.0
         sharp     -689.0
         smeared    -27.0
Name: floor_minus_outer_m, dtype: float64
status   cls    
opening  melted     60.0
         sharp      10.0
         smeared    55.0
plain    melted     70.0
         sharp      10.0
         smeared    60.0
Name: largest_gap_deg, dtype: float64

== state by size, openings vs plains (%) ==
opening
cls        melted  sharp  smeared    n
sz                                    
[3, 5)       19.0   69.0     12.0  775
[5, 10)      30.0   50.0     20.0  305
[10, 20)     47.0   27.0     26.0  117
[20, 40)     52.0   15.0     32.0   65
[40, 80)     24.0   33.0     43.0   42
[80, 400)    62.0    8.0     31.0   13
plain
cls        melted  sharp  smeared     n
sz                                     
[3, 5)       21.0   67.0     12.0  1187
[5, 10)      42.0   42.0     16.0   556
[10, 20)     52.0   27.0     21.0   208
[20, 40)     57.0   14.0     29.0   128
[40, 80)     54.0   16.0     30.0    61
[80, 400)    62.0   14.0     24.0    21

>=40 km by terrain and zone:
cls              melted  sharp  smeared  All
status  zone                                
opening beyond       15     15       20   50
        contact       3      0        2    5
plain   beyond       16     13       17   46
        contact      30      0        6   36
All                  64     28       45  137
melted share >=40: opening 18/55, plain 46/82, Fisher p=0.00888
opening trend chi2 p=1.7e-31
plain trend chi2 p=5.7e-60
