Index: doc/theses/mike_brooks_MMath/plots/ListCommon.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/ListCommon.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/ListCommon.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -1,6 +1,2 @@
-# Based on crunch1
-# updates for run-scenario columns not seen back then 
-# result eyeballs okay
-
 import pandas as pd
 import numpy as np
@@ -8,4 +4,5 @@
 import os
 from subprocess import Popen, PIPE
+from scipy.stats import gmean
 
 def getDataset( infile ):
@@ -32,10 +29,12 @@
     timings[['ExperimentDurSec',
         'CheckDonePeriod',
-        'NumNodes',
+        'Length',
         'ExperimentDurOpCount',
         'Seed',
         'InterleaveFrac']] = timings['Args'].str.strip().str.split(expand=True)
-    timings["NumNodes"] = pd.to_numeric(timings["NumNodes"])
+    timings["Length"] = pd.to_numeric(timings["Length"])
     timings["InterleaveFrac"] = pd.to_numeric(timings["InterleaveFrac"]).round(3)
+
+    timings["NumNodes"] = timings["Length"] * timings["Width"]
 
     timings[['__ProgramPrefix',
@@ -46,40 +45,152 @@
         'polarity',
         'accessor']] = timings['op'].str.split('-', expand=True)
-
-    ## calculate relative to baselines
-    baseline_fx = 'lq-tailq'
-    baseline_intrl = 0.0
-
-    # chose calc "FineCrossRun" from labpc:crunch3
-    byPeer = timings.groupby(['NumNodes', 'op', 'InterleaveFrac'])
-    for [NumNodes, op, intrlFrac], peerGroup in byPeer:
-        grpfx = peerGroup.groupby(['fx'])
-        if baseline_fx in grpfx.groups:
-            baselineRows = grpfx.get_group(baseline_fx)
-            baselineDur = meanNoOutlr( baselineRows['mean_op_dur_ns'] )
-        else:
-            baselineDur = 1.0
-        timings.loc[peerGroup.index, 'BaselineFxOpDurNs'] = baselineDur
-    timings['OpDurRelFx'] = timings['mean_op_dur_ns'] / timings['BaselineFxOpDurNs']
-
-    # relative to same fx, no interleave
-    byPeer = timings.groupby(['NumNodes', 'op', 'fx'])
-    for [NumNodes, op, fx], peerGroup in byPeer:
-        baselineRows = peerGroup.groupby(['InterleaveFrac']).get_group(baseline_intrl)
-        baselineDur = meanNoOutlr( baselineRows['mean_op_dur_ns'] )
-        timings.loc[peerGroup.index, 'BaselineIntrlOpDurNs'] = baselineDur
-    timings['OpDurRelIntrl'] = timings['mean_op_dur_ns'] / timings['BaselineIntrlOpDurNs']
+    
+    ## SizeZone as NumNodes t-shirt size
+    timings['SizeZone'] = np.select(
+        condlist = [
+            (4 <= timings['NumNodes']) & (timings['NumNodes'] <= 16),
+            (48 <= timings['NumNodes']) & (timings['NumNodes'] <= 256)
+        ],
+        choicelist = [
+            'SM',
+            'ML'
+        ],
+        default = 'none'
+    )
 
     return timings
 
-def getSingleResults(infileLocal, *,
-    tgtMovement = 'all',
-    tgtPolarity = 'all',
-    tgtAccessor = 'all',
-    tgtInterleave = 0.0 ):
-
+# `c` = column name
+def c( baseName, marginalizeOn ):
+    margSlug = str.join( "_", marginalizeOn )
+    return baseName + "_" + margSlug
+
+explanations = ['movement', 'polarity', 'accessor',
+                'NumNodes',
+                'SizeZone', # note fd: NumNodes -> SizeZone
+                'fx',
+                'machine',
+                'InterleaveFrac', # unused and always zero
+                ]
+
+# helper for avoiding pollution from e.g. alternate cfa list versions
+# when a preference-limiting factor is marginalized, make bl value from preferred subset
+# but still stamp result everywhere; e.g. even cfa-strip has canon-bl-relative perf
+# when conditioning on such factor, peer groups are already small enough to stop such pollution
+# use nontrivial marginalizeOn when calculating baseline values, to achieve the above outside-canonical behaviour non-degenerately
+# use default full marginalizeOn when removing points from a graph, which leaves only canonical points
+def getJustCanon( timings,
+                  marginalizeOn = explanations, *,
+                    # no c++: bl is for comparing intrusives
+                    # no lq-list: sparse
+                    # no cfa-fredDisbled: bl is for comparing prod-readies
+                  fxInc = ['cfa-cfa', 'lq-tailq', 'upp-upp'],
+                  szInc = ['SM', 'ML'],
+                  sExcl = [1]
+                  ): # all explanations marginalized => maximally aggressive filter
+    if 'fx' in marginalizeOn:
+        fxIsCanon = timings.fx.isin(fxInc)
+        timings = timings[ fxIsCanon ]
+    if 'SizeZone' in marginalizeOn:
+        szIsCanon = timings.SizeZone.isin(szInc)
+        timings = timings[ szIsCanon ]
+    if 'NumNodes' in marginalizeOn:
+        sIsCanon = ~ timings.NumNodes.isin(sExcl)
+        timings = timings[ sIsCanon ]
+    return timings
+
+
+def annotateBaseline( timings, marginalizeOn ):
+    c_tgtPeers = c( 'Peers', marginalizeOn )
+    c_tgtBl = c("Baseline", marginalizeOn)
+    c_tgtRel = c("OpDurRel", marginalizeOn)
+    if c_tgtBl in timings.columns or c_tgtRel in timings.columns:
+        assert( c_tgtBl in timings.columns and c_tgtRel in timings.columns )
+        return
+    # size handling:
+    # two ordinary baselines (sz-nn, nn) and one synthetic baseline (sz)
+    # the SizeZone-only baseline has no interpretation wrt a real peer group
+    # it isolates the effect of belonging to one SZ or the other
+    # while conditioning away the specific-size effects within the SZ
+    # notably in zone SM, opDur-v-size usually pitches upward
+    # comparing to sz-only baseline gets rid of "they all pitch up," while keeping "SM is faster then ML"
+    if 'SizeZone' in marginalizeOn and 'NumNodes' not in marginalizeOn:
+        # special case: sz-only synthetic benchmark
+        margNeither = list( set(marginalizeOn) - {'SizeZone'} )
+        margBoth = list( set(marginalizeOn) | {'NumNodes'} )
+        margJustNn = list( set(margNeither) | {'NumNodes'} )
+        annotateBaseline( timings, margNeither )
+        annotateBaseline( timings, margBoth )
+        annotateBaseline( timings, margJustNn )
+        c_neitherRel = c("OpDurRel", margNeither)
+        c_bothBl = c("Baseline", margBoth)
+        c_justNnBl = c("Baseline", margJustNn)
+        timings[ c_tgtBl ] = np.nan
+        timings[ c_tgtRel ] = timings[ c_justNnBl ] / timings[ c_bothBl ] * timings[ c_neitherRel ]
+    else: # general case
+        # prevent non-canonical samples from polluting baseline values
+        # note, depending on the presentation, the polluting points may already be removed from timings entirely
+        canonSrc = getJustCanon(timings, marginalizeOn)
+    #   print(f"for marg on {marginalizeOn}, |canonSrc| = {len(canonSrc)}, |timings| = {len(timings)}", file=sys.stderr)
+        conditionOn = list( set(explanations) - set(marginalizeOn) )
+    #   print( "marginalizing on", marginalizeOn, "conditioning on", conditionOn, file=sys.stderr )
+
+        stats = canonSrc.groupby(conditionOn)['mean_op_dur_ns'].agg(**{
+            c_tgtPeers: 'count',
+            c_tgtBl: gmean
+        })
+        group_lookup = timings.set_index(conditionOn).index
+        timings[c_tgtPeers] = stats[c_tgtPeers].reindex(group_lookup).values
+        timings[c_tgtBl] = stats[c_tgtBl].reindex(group_lookup).values
+
+        # everywhere := itself / [preferred-subset derived]
+        timings[c_tgtRel] = timings['mean_op_dur_ns'] / timings[c_tgtBl]
+
+
+# longer column name (Peers_%, Baseline_%, OpDurRel_%) gives larger peer group and more (total) variation
+def annotateCommonBaselines( timings ):
+    def applyGeneralExplanations( bgMarginalizeOn ):
+        def fg( marginalizeOn ):
+            return bgMarginalizeOn + marginalizeOn
+        annotateBaseline( timings, fg( [] ) ) # all-in baseline (all factors conditioned): only inter-run differences
+        annotateBaseline( timings, fg( ['movement', 'polarity'] ) )
+        annotateBaseline( timings, fg( ['accessor'] ) )
+        annotateBaseline( timings, fg( ['machine'] ) )
+
+        annotateBaseline( timings, fg( ['SizeZone', 'NumNodes'] ) )  # SizeZone is NOT redundant; conditioned on neither
+        annotateBaseline( timings, fg( ['NumNodes'] ) )  # still conditioned on SizeZone
+        annotateBaseline( timings, fg( ['SizeZone'] ) )  # synthetic: conditioned on NumNodes but not SizeZone
+    applyGeneralExplanations( [] )
+    applyGeneralExplanations( ['fx'] )
+
+def getMachineDataset( dsname, machine ):
+    infileLocal = f"results-{machine}-{dsname}.csv"
     infile = os.path.dirname(os.path.abspath(__file__)) + '/../benchmarks/list/' + infileLocal
-
     timings = getDataset( infile )
+    timings['machine'] = machine
+    return timings
+
+allMachines = ['swift', 'java']
+
+
+# general, as in exclude the stripped-down experimental CFAs
+general_fxs_full = ['cfa-cfa', 'cpp-stlref', 'upp-upp', 'lq-tailq', 'lq-list']
+general_fxs_intrusive = ['cfa-cfa', 'upp-upp', 'lq-tailq', 'lq-list']
+
+def getSingleResults(
+        dsname = 'general',
+        machines = allMachines,
+        *,
+        fxs = general_fxs_full,
+        tgtMovement = 'all',
+        tgtPolarity = 'all',
+        tgtAccessor = 'all',
+        tgtInterleave = 0.0 ):
+
+    timings = pd.concat([
+        getMachineDataset( dsname, m )
+        for m in machines ])
+    
+#    print(timings, file=sys.stderr)
 
     movements = timings['movement'].unique()
@@ -94,4 +205,11 @@
     if accessors.size > 1:
         accessors = np.append(accessors, 'all')
+
+#    print(f"trying to filter {dsname} {machines} {len(timings)}", file=sys.stderr)
+    grp = timings.groupby('fx')
+#    print(f"with fxs {grp.groups.keys()}", file=sys.stderr)
+    timings = pd.concat([
+        grp.get_group(fx)
+        for fx in fxs ])
 
     if (tgtMovement != 'all'):
@@ -106,4 +224,5 @@
     if (tgtInterleave != 'all'):
         timings = timings[ timings['InterleaveFrac'] == float(tgtInterleave) ]
+
 
     return timings
@@ -139,21 +258,26 @@
 
 def printManySummary(*,
-        infileLocal,
+        dsname = 'general',
+        machines = allMachines,
         metafileCore,
         fxs,
         sizeQual,
         tgtInterleave = 0.0,
-        measure = 'OpDurRelFx') :
+        marginalizeOn = ['fx'] ) :
     
     metadata = getSummaryMeta(metafileCore)
 
+    measure = c( 'OpDurRel', marginalizeOn ) 
+
     print("# op_num\tfx_num\tfx\tmean\tstdev\tmin\tmax\tcount\tpl95\tpl68\tp50\tph68\tph95")
 
     for op in metadata.itertuples():
-        timings = getSingleResults(infileLocal,
+        timings = getSingleResults(dsname, machines,
+            fxs=fxs,
             tgtMovement = op.movement,
             tgtPolarity = op.polarity,
             tgtAccessor = op.accessor,
             tgtInterleave = tgtInterleave )
+        annotateBaseline(timings, marginalizeOn)
 
         timings = timings[ timings['fx'].isin(fxs) ]
@@ -180,18 +304,33 @@
         print(text, end='')
 
-def printSingleDetail(infileLocal, *,
-    tgtMovement = 'all',
-    tgtPolarity = 'all',
-    tgtAccessor = 'all',
-    tgtInterleave = 0.0,
-    measure = 'mean_op_dur_ns' ):
-
-    timings = getSingleResults(infileLocal,
+def printSingleDetail(
+        dsname = 'general',
+        machines = allMachines,
+        *,
+        fxs = general_fxs_full,
+        tgtMovement = 'all',
+        tgtPolarity = 'all',
+        tgtAccessor = 'all',
+        tgtInterleave = 0.0,
+        measureBase = 'mean_op_dur_ns',
+        marginalizeOn = explanations ):
+
+
+    timings = getSingleResults(dsname, machines,
+        fxs = fxs,
         tgtMovement = tgtMovement,
         tgtPolarity = tgtPolarity,
         tgtAccessor = tgtAccessor,
         tgtInterleave = tgtInterleave)
+
+    if measureBase == 'OpDurRel':
+        annotateBaseline(timings, marginalizeOn)
+        measure = c( measureBase, marginalizeOn )
+    elif measureBase == 'mean_op_dur_ns':
+        measure = measureBase
+    else:
+        raise RuntimeError(f"measureBase '{measureBase}' not handled")
+    
     groupedFx = timings.groupby('fx')
-
     for fx, fgroup in groupedFx:
         # print(fgroup.head())
@@ -214,4 +353,7 @@
         print()
 
-def meanNoOutlr(range):
+def aMeanNoOutlr(range):
     return ( range.sum() - range.min() - range.max() ) / ( range.count() - 2 )
+
+def gMeanNoOutlr(range):
+    return ( range.prod() / range.min() / range.max() ) ** ( 1 / ( range.count() - 2 ) )
Index: doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-java.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-java.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -10,5 +10,5 @@
 
 printManySummary(
-    infileLocal = 'results-java-general.csv',
+    machines=['java'],
     metafileCore = stripMachine(thisPy),
     fxs=['cfa-cfa', 'cfa-likeLq', 'cfa-noIter', 'cfa-strip'],
Index: doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-remelem-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-remelem-java.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-remelem-java.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -10,5 +10,5 @@
 
 printManySummary(
-    infileLocal = 'results-java-general.csv',
+    machines=['java'],
     metafileCore = stripMachine(thisPy),
     fxs=['cfa-cfa', 'cfa-mandHead', 'cfa-noListed', 'cfa-likeLq', 'cfa-noIter', 'cfa-strip'],
Index: doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-remelem-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-remelem-swift.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-remelem-swift.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -10,5 +10,5 @@
 
 printManySummary(
-    infileLocal = 'results-swift-general.csv',
+    machines=['swift'],
     metafileCore = stripMachine(thisPy),
     fxs=['cfa-cfa', 'cfa-mandHead', 'cfa-noListed', 'cfa-likeLq', 'cfa-noIter', 'cfa-strip'],
Index: doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-swift.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cfa-attrib-swift.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -10,5 +10,5 @@
 
 printManySummary(
-    infileLocal = 'results-swift-general.csv',
+    machines=['swift'],
     metafileCore = stripMachine(thisPy),
     fxs=['cfa-cfa', 'cfa-likeLq', 'cfa-noIter', 'cfa-strip'],
Index: doc/theses/mike_brooks_MMath/plots/list-cmp-exout-java.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cmp-exout-java.gp	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cmp-exout-java.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -31,11 +31,11 @@
 
 set grid
-set key top center horizontal
+set key bottom center horizontal
 
-BOXSPACING=0.25
+BOXSPACING=0.20
 BOXWIDTH=BOXSPACING * .88
 set boxwidth BOXWIDTH absolute
 
-NUM_FXS=3
+NUM_FXS=4
 
 offset(opNum, fxNum) = opNum + fxNum * BOXSPACING - (NUM_FXS+1) * BOXSPACING / 2 + 0.5
@@ -53,11 +53,10 @@
         using ($2 == 1 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'cfa-cfa' with candlesticks lt rgb "blue"	   , \
      '' using ($2 == 2 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'upp-upp' with candlesticks lt rgb "dark-orange", \
-     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-list' with candlesticks lt rgb "purple"	, \
+     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-tailq' with candlesticks lt rgb "magenta"	, \
+     '' using ($2 == 4 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-list' with candlesticks lt rgb "purple"	, \
      '' using ($2 == 1 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 7  lt rgb "blue"	   , \
      '' using ($2 == 2 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 9  lt rgb "dark-orange", \
-     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 13 lt rgb "purple"	, \
+     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 11 lt rgb "magenta"	, \
+     '' using ($2 == 4 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 13 lt rgb "purple"	, \
      SRCDIR.'/list-cmp-exout-meta.dat' \
-        using 1:(-999):xtic(2) notitle with points, \
-     $Singleton using (3.73):(7.50)                         notitle         with points pt 7  lt rgb "blue"	   , \
-     $Singleton using (5.44):(7.50)                         notitle         with points pt 9  lt rgb "dark-orange", \
-     $Singleton using (7.14):(7.50)                         notitle         with points pt 13 lt rgb "purple"
+        using 1:(-999):xtic(2) notitle with points \
Index: doc/theses/mike_brooks_MMath/plots/list-cmp-exout-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cmp-exout-java.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cmp-exout-java.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -10,7 +10,7 @@
 
 printManySummary(
-    infileLocal = 'results-java-general.csv',
+    machines=['java'],
     metafileCore = stripMachine(thisPy),
-    fxs=['cfa-cfa', 'upp-upp', 'lq-list'],
+    fxs=['cfa-cfa', 'upp-upp', 'lq-tailq', 'lq-list'],
     sizeQual = javaSweetspot
 )
Index: doc/theses/mike_brooks_MMath/plots/list-cmp-exout-swift.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cmp-exout-swift.gp	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cmp-exout-swift.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -31,11 +31,11 @@
 
 set grid
-set key top center horizontal
+set key bottom center horizontal
 
-BOXSPACING=0.25
+BOXSPACING=0.20
 BOXWIDTH=BOXSPACING * .88
 set boxwidth BOXWIDTH absolute
 
-NUM_FXS=3
+NUM_FXS=4
 
 offset(opNum, fxNum) = opNum + fxNum * BOXSPACING - (NUM_FXS+1) * BOXSPACING / 2 + 0.5
@@ -53,11 +53,10 @@
         using ($2 == 1 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'cfa-cfa' with candlesticks lt rgb "blue"	   , \
      '' using ($2 == 2 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'upp-upp' with candlesticks lt rgb "dark-orange", \
-     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-list' with candlesticks lt rgb "purple"	, \
+     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-tailq' with candlesticks lt rgb "magenta"	, \
+     '' using ($2 == 4 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-list' with candlesticks lt rgb "purple"	, \
      '' using ($2 == 1 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 7  lt rgb "blue"	   , \
      '' using ($2 == 2 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 9  lt rgb "dark-orange", \
-     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 13 lt rgb "purple"	, \
+     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 11 lt rgb "magenta"	, \
+     '' using ($2 == 4 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 13 lt rgb "purple"	, \
      SRCDIR.'/list-cmp-exout-meta.dat' \
-        using 1:(-999):xtic(2) notitle with points, \
-     $Singleton using (3.73):(7.50)                         notitle         with points pt 7  lt rgb "blue"	   , \
-     $Singleton using (5.44):(7.50)                         notitle         with points pt 9  lt rgb "dark-orange", \
-     $Singleton using (7.14):(7.50)                         notitle         with points pt 13 lt rgb "purple"
+        using 1:(-999):xtic(2) notitle with points \
Index: doc/theses/mike_brooks_MMath/plots/list-cmp-exout-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cmp-exout-swift.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cmp-exout-swift.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -10,7 +10,7 @@
 
 printManySummary(
-    infileLocal = 'results-swift-general.csv',
+    machines=['swift'],
     metafileCore = stripMachine(thisPy),
-    fxs=['cfa-cfa', 'upp-upp', 'lq-list'],
+    fxs=['cfa-cfa', 'upp-upp', 'lq-tailq', 'lq-list'],
     sizeQual = swiftSweetspot
 )
Index: doc/theses/mike_brooks_MMath/plots/list-cmp-survey-java.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cmp-survey-java.gp	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cmp-survey-java.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -33,11 +33,11 @@
 
 set grid
-set key top center horizontal
+set key bottom center horizontal
 
-BOXSPACING=0.25
+BOXSPACING=0.20
 BOXWIDTH=BOXSPACING * .88
 set boxwidth BOXWIDTH absolute
 
-NUM_FXS=3
+NUM_FXS=4
 
 offset(opNum, fxNum) = opNum + fxNum * BOXSPACING - (NUM_FXS+1) * BOXSPACING / 2 + 0.5
@@ -55,8 +55,10 @@
         using ($2 == 1 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'cfa-cfa' with candlesticks lt rgb "blue"	   , \
      '' using ($2 == 2 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'upp-upp' with candlesticks lt rgb "dark-orange", \
-     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-list' with candlesticks lt rgb "purple"	, \
+     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-tailq' with candlesticks lt rgb "magenta"	, \
+     '' using ($2 == 4 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-list' with candlesticks lt rgb "purple"	, \
      '' using ($2 == 1 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 7  lt rgb "blue"	   , \
      '' using ($2 == 2 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 9  lt rgb "dark-orange", \
-     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 13 lt rgb "purple"	, \
+     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 11 lt rgb "magenta"	, \
+     '' using ($2 == 4 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 13 lt rgb "purple"	, \
      SRCDIR.'/list-cmp-survey-meta.dat' \
         using 1:(-999):xtic(2) notitle with points, \
Index: doc/theses/mike_brooks_MMath/plots/list-cmp-survey-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cmp-survey-java.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cmp-survey-java.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -10,7 +10,7 @@
 
 printManySummary(
-    infileLocal = 'results-java-general.csv',
+    machines=['java'],
     metafileCore = stripMachine(thisPy),
-    fxs=['cfa-cfa', 'upp-upp', 'lq-list'],
+    fxs=['cfa-cfa', 'upp-upp', 'lq-tailq', 'lq-list'],
     sizeQual = javaSweetspot
 )
Index: doc/theses/mike_brooks_MMath/plots/list-cmp-survey-swift.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cmp-survey-swift.gp	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cmp-survey-swift.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -33,11 +33,11 @@
 
 set grid
-set key top center horizontal
+set key bottom center horizontal
 
-BOXSPACING=0.25
+BOXSPACING=0.20
 BOXWIDTH=BOXSPACING * .88
 set boxwidth BOXWIDTH absolute
 
-NUM_FXS=3
+NUM_FXS=4
 
 offset(opNum, fxNum) = opNum + fxNum * BOXSPACING - (NUM_FXS+1) * BOXSPACING / 2 + 0.5
@@ -55,8 +55,10 @@
         using ($2 == 1 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'cfa-cfa' with candlesticks lt rgb "blue"	   , \
      '' using ($2 == 2 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'upp-upp' with candlesticks lt rgb "dark-orange", \
-     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-list' with candlesticks lt rgb "purple"	, \
+     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-tailq' with candlesticks lt rgb "magenta"	, \
+     '' using ($2 == 4 ? (offset($1, $2)) : 1/0):10:9:13:12 title 'lq-list' with candlesticks lt rgb "purple"	, \
      '' using ($2 == 1 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 7  lt rgb "blue"	   , \
      '' using ($2 == 2 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 9  lt rgb "dark-orange", \
-     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 13 lt rgb "purple"	, \
+     '' using ($2 == 3 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 11 lt rgb "magenta"	, \
+     '' using ($2 == 4 ? (offset($1, $2)) : 1/0):4          notitle         with points pt 13 lt rgb "purple"	, \
      SRCDIR.'/list-cmp-survey-meta.dat' \
         using 1:(-999):xtic(2) notitle with points, \
Index: doc/theses/mike_brooks_MMath/plots/list-cmp-survey-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-cmp-survey-swift.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-cmp-survey-swift.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -10,7 +10,7 @@
 
 printManySummary(
-    infileLocal = 'results-swift-general.csv',
+    machines=['swift'],
     metafileCore = stripMachine(thisPy),
-    fxs=['cfa-cfa', 'upp-upp', 'lq-list'],
+    fxs=['cfa-cfa', 'upp-upp', 'lq-tailq', 'lq-list'],
     sizeQual = swiftSweetspot
 )
Index: doc/theses/mike_brooks_MMath/plots/list-wip.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-wip.d	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ doc/theses/mike_brooks_MMath/plots/list-wip.d	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -0,0 +1,2 @@
+plots/list-wip.gp.INPUTS: build/plot-list-wip.dat | build
+plots/list-wip.py.INPUTS: benchmarks/list/results-swift-general.csv
Index: doc/theses/mike_brooks_MMath/plots/list-wip.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-wip.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ doc/theses/mike_brooks_MMath/plots/list-wip.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -0,0 +1,105 @@
+set terminal pdfcairo color enhanced size 6.5in,4.0in font "Times,17"
+
+set size 1.0, 1.0    # scale of plot area inside terminal
+set origin 0.0, 0.0  # bottom-left corner
+
+INDIR="build"
+OUTDIR="build"
+
+set macros
+set output OUTDIR."/plot-list-wip.pdf"
+
+set lmargin 10
+
+set grid
+set key below
+set logscale y 2
+set yrange [0.4:2.5];
+set ytics ( \
+   "+40%%" 1.666666667, \
+   "+30%%" 1.428571429, \
+   "+20%%" 1.25, \
+   "+10%%" 1.111111111, \
+   "0" 1, \
+   "-20%%" 0.833333333, \
+   "-40%%" 0.714285714, \
+   "-60%%" 0.625, \
+   "-80%%" 0.555555556, \
+   "-100%%" 0.5, \
+   "-130%%" 0.434782609, \
+   "-160%%" 0.384615385, \
+   "-200%%" 0.333333333 \
+)
+set xrange [-0.5:10];
+# set xlabel "List length (item count)" offset 2,0
+set format x ""
+set ylabel "Duration (relative)" offset -1.0,0
+set errorbars 2.0
+set pointintervalbox 0
+
+barHtScale = 0.015
+
+
+plot INDIR."/plot-list-wip.dat" \
+       i 0 using (0):(0):(0.0):(0.0 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "blue"        fs transparent solid 0.15 noborder, \
+    '' i 3 using (0):(0):(0.5):(0.5 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "dark-orange" fs transparent solid 0.15 noborder, \
+    '' i 1 using (0):(0):(1.0):(1.0 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "magenta"     fs transparent solid 0.15 noborder, \
+    '' i 2 using (0):(0):(1.5):(1.5 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "purple"      fs transparent solid 0.35 noborder, \
+    '' i 0 using (0.0 + barHtScale * $3):2 notitle with steps lc rgb "blue"         lw 0.3, \
+    '' i 3 using (0.5 + barHtScale * $3):2 notitle with steps lc rgb "dark-orange"  lw 0.3, \
+    '' i 1 using (1.0 + barHtScale * $3):2 notitle with steps lc rgb "magenta"      lw 0.3, \
+    '' i 2 using (1.5 + barHtScale * $3):2 notitle with steps lc rgb "purple"       lw 0.3, \
+\
+    '' i 4 using (0):(0):(2.5):(2.5 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "blue"        fs transparent solid 0.15 noborder, \
+    '' i 5 using (0):(0):(3.0):(3.0 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "dark-orange" fs transparent solid 0.15 noborder, \
+    '' i 6 using (0):(0):(3.5):(3.5 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "magenta"     fs transparent solid 0.15 noborder, \
+    '' i 7 using (0):(0):(4.0):(4.0 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "purple"      fs transparent solid 0.35 noborder, \
+    '' i 4 using (2.5 + barHtScale * $3):2 notitle with steps lc rgb "blue"         lw 0.3, \
+    '' i 5 using (3.0 + barHtScale * $3):2 notitle with steps lc rgb "dark-orange"  lw 0.3, \
+    '' i 6 using (3.5 + barHtScale * $3):2 notitle with steps lc rgb "magenta"      lw 0.3, \
+    '' i 7 using (4.0 + barHtScale * $3):2 notitle with steps lc rgb "purple"       lw 0.3, \
+\
+    '' i  8 using (0):(0):(5.0):(5.0 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "blue"        fs transparent solid 0.15 noborder, \
+    '' i  9 using (0):(0):(5.5):(5.5 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "dark-orange" fs transparent solid 0.15 noborder, \
+    '' i 10 using (0):(0):(6.0):(6.0 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "magenta"     fs transparent solid 0.15 noborder, \
+    '' i  8 using (5.0 + barHtScale * $3):2 notitle with steps lc rgb "blue"         lw 0.3, \
+    '' i  9 using (5.5 + barHtScale * $3):2 notitle with steps lc rgb "dark-orange"  lw 0.3, \
+    '' i 10 using (6.0 + barHtScale * $3):2 notitle with steps lc rgb "magenta"      lw 0.3, \
+\
+    '' i 11 using (0):(0):(7.0):(7.0 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "blue"        fs transparent solid 0.15 noborder, \
+    '' i 12 using (0):(0):(7.5):(7.5 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "dark-orange" fs transparent solid 0.15 noborder, \
+    '' i 11 using (7.0 + barHtScale * $3):2 notitle with steps lc rgb "blue"         lw 0.3, \
+    '' i 12 using (7.5 + barHtScale * $3):2 notitle with steps lc rgb "dark-orange"  lw 0.3, \
+\
+    '' i 13 using (0):(0):(8.5):(8.5 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "blue"        fs transparent solid 0.15 noborder, \
+    '' i 14 using (0):(0):(9.0):(9.0 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "dark-orange" fs transparent solid 0.15 noborder, \
+    '' i 13 using (8.5 + barHtScale * $3):2 notitle with steps lc rgb "blue"         lw 0.3, \
+    '' i 14 using (9.0 + barHtScale * $3):2 notitle with steps lc rgb "dark-orange"  lw 0.3, \
+
+
+# fx:
+#    i 0  cfa-cfa
+# '' i 3  upp-upp
+# '' i 1  lq-list
+# '' i 2  lq-tailq
+
+# movement, polarity:
+#    i 0
+# '' i 1
+# '' i 2
+# '' i 3
+
+# accessor:
+#    i 0
+# '' i 1
+# '' i 2
+
+# size zone
+#    i 0
+# '' i 1
+# '' i 2
+# (lately, just the first two)
+
+# machine
+#    i 0
+# '' i 1
Index: doc/theses/mike_brooks_MMath/plots/list-wip.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-wip.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ doc/theses/mike_brooks_MMath/plots/list-wip.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -0,0 +1,168 @@
+import pandas as pd
+import numpy as np
+import os
+import sys
+import math
+
+sys.path.insert(0, os.path.dirname(__file__))
+from ListCommon import *
+
+# The range from 0.9759 to 1.0247 (which is 1.05 x wide) has 1.0 in its centre.
+# This is the bucket with key 0.
+# Logs of values in this bucket go from -0.5 to +0.5.
+# Rounding a log value to the nearest integer gives the key.
+# Exponentiating a key directly gives the centre of its bucket.
+# Exponentiating a key less 0.5 gives the bottom of its bucket.
+# Gnuplot expects the latter.
+
+bucketMin = 0.25
+bucketMax = 4.0
+bucketGrain = 1.05
+bktKeyLo = math.floor( math.log(bucketMin, bucketGrain) )
+bktKeyHi = math.ceil( math.log(bucketMax, bucketGrain) )
+
+def bktKeyOfVal( relDur ):
+    distance = math.log(relDur, bucketGrain)
+    key = round( distance )
+    return key
+
+def bktIxOfVal( relDur ):
+    return bktKeyToIx( bktKeyOfVal( relDur ) )
+
+def botValOfBucketK( key ):
+    return bucketGrain ** ( key - 0.5 )
+
+def topValOfBucketBotVal( botVal ):
+    return bucketGrain * botVal
+
+def bktKeyToIx( key ):
+    return key - bktKeyLo
+
+def bktIxToKey( ix ):
+    return ix + bktKeyLo
+
+def botOfBucketOfVal( relDur ):
+    return botValOfBucketK( bktKeyOfVal( relDur ) )
+
+buckets = [ botValOfBucketK(key) for key in range(bktKeyLo, bktKeyHi) ]
+
+# printSingleDetail
+def printWip(*,
+    tgtMovement = 'all',
+    tgtPolarity = 'all',
+    tgtAccessor = 'all',
+    tgtInterleave = 0.0,
+    marginalizeOn=['fx'] ):
+
+    # watch out for filtering too early here; need everything sticking around until baselines are applies
+    # ie, maybe I should get rid of all the tgt parms at the pre-benchmark layers
+    timings = getSingleResults(
+        tgtMovement = tgtMovement,
+        tgtPolarity = tgtPolarity,
+        tgtAccessor = tgtAccessor,
+        tgtInterleave = tgtInterleave)
+    timings = getJustCanon( timings,
+                  fxInc = ['cfa-cfa', 'lq-tailq', 'upp-upp', 'lq-list'],
+                  szInc = ['SM', 'ML'],
+                  sExcl = [1] )
+
+
+#    annotateBaselines(timings)
+
+
+    options = timings.groupby(explanations)
+
+    aggregated = options.agg(
+        mean_op_dur_ns = ('mean_op_dur_ns', gMeanNoOutlr)
+    ).reset_index()
+
+
+    annotateBaseline(aggregated, marginalizeOn)
+#    annotateCommonBaselines(aggregated)
+
+
+    # if examining "why CFA slow" need both
+    # - getVariousCfa inplace of getJust Canon
+    # - do annotate-then-filter because baseline needs to stay cfa-tailq-upp
+    # (filter-then-annotate is fine for general cases (where all three canons are included) and good for build time)
+
+
+    c_measure = c('OpDurRel', marginalizeOn)
+    # options = timings.groupby(explanations)
+
+    # aggregated = options.agg(
+    #     **{measure:(measure,gMeanNoOutlr)}
+    # ).reset_index()
+
+    c_measureBkt = 'BUCKET_' + c_measure
+    aggregated[ c_measureBkt ] = aggregated[c_measure].apply( botOfBucketOfVal )
+
+    marggrp = aggregated.groupby(marginalizeOn)
+
+
+    # print(f'measure is {measure}')
+    # print()
+    # print()
+
+    for mkey, mgroup in marggrp:
+#       print(mgroup, file=sys.stderr)
+
+        histo_raw = mgroup[ c_measureBkt ].value_counts()
+        for b in buckets:
+            if b not in histo_raw.keys():
+#                print( f"{b} := 0", file=sys.stderr )
+                histo_raw[b] = 0
+        histo_raw = histo_raw.sort_index()
+
+        histo = histo_raw.rename("count").reset_index()
+        histo = histo.rename(columns={c_measureBkt: "y_lo"})
+        y_lo_col_loc = histo.columns.get_loc("y_lo")
+        histo.insert(y_lo_col_loc + 1, "y_hi", histo["y_lo"].apply(topValOfBucketBotVal))
+
+        header = str.join(', ', mkey)
+        print(f'"{header}"')
+        text = histo.to_csv(header=False, index=False, sep='\t')
+        print(text)
+        print()
+        print()
+
+        # print(f'"{header}" FULL')
+        # text = group.to_csv(header=False, index=True, sep='\t')
+        # print(text)
+        # print()
+        # print()
+
+    # print(f'"RAW"')
+    # text = timings.to_csv(header=False, index=True, sep='\t')
+    # print(text)
+    
+
+printWip(
+    tgtMovement = 'all',
+    tgtPolarity = 'all',
+    tgtAccessor = 'all',
+    marginalizeOn=['fx'] )
+
+printWip(
+    tgtMovement = 'all',
+    tgtPolarity = 'all',
+    tgtAccessor = 'all',
+    marginalizeOn=['movement', 'polarity'] )
+
+printWip(
+    tgtMovement = 'all',
+    tgtPolarity = 'all',
+    tgtAccessor = 'all',
+    marginalizeOn=['accessor'] )
+
+printWip(
+    tgtMovement = 'all',
+    tgtPolarity = 'all',
+    tgtAccessor = 'all',
+    marginalizeOn=['SizeZone'] )
+
+printWip(
+    tgtMovement = 'all',
+    tgtPolarity = 'all',
+    tgtAccessor = 'all',
+    marginalizeOn=['machine'] )
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.gp	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -30,5 +30,5 @@
 plot INDIR."/plot-list-zoomin-abs-java.dat" \
        i 0 using ($1 * 0.98):8:4:5 title columnheader(1) with yerrorbars lt rgb "blue" 	      pt  6  ps 0.85 lw 1, \
-    '' i 9 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
-    '' i 8 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1, \
-    '' i 7 using ($1 * 1.06):8:4:5 title columnheader(1) with yerrorbars lt rgb "purple"	      pt  12 ps 1.0  lw 1
+    '' i 4 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
+    '' i 3 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1, \
+    '' i 2 using ($1 * 1.06):8:4:5 title columnheader(1) with yerrorbars lt rgb "purple"	      pt  12 ps 1.0  lw 1
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -8,5 +8,5 @@
 
 printSingleDetail(
-    infileLocal='results-java-general.csv',
+    machines=['java'],
     tgtMovement = 'stack',
     tgtPolarity = 'insfirst',
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.gp	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -27,5 +27,5 @@
 plot INDIR."/plot-list-zoomin-abs-swift.dat" \
        i 0 using ($1 * 0.98):8:4:5 title columnheader(1) with yerrorbars lt rgb "blue" 	      pt  6  ps 0.85 lw 1, \
-    '' i 9 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
-    '' i 8 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1, \
-    '' i 7 using ($1 * 1.06):8:4:5 title columnheader(1) with yerrorbars lt rgb "purple"	      pt  12 ps 1.0  lw 1
+    '' i 4 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
+    '' i 3 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1, \
+    '' i 2 using ($1 * 1.06):8:4:5 title columnheader(1) with yerrorbars lt rgb "purple"	      pt  12 ps 1.0  lw 1
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -8,5 +8,5 @@
 
 printSingleDetail(
-    infileLocal='results-swift-general.csv',
+    machines=['swift'],
     tgtMovement = 'stack',
     tgtPolarity = 'insfirst',
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-java.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-java.gp	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-java.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -41,5 +41,5 @@
 plot INDIR."/plot-list-zoomin-rel-java.dat" \
        i 0 using ($1 * 0.98):8:4:5 title columnheader(1) with yerrorbars lt rgb "blue" 	      pt  6  ps 0.85 lw 1, \
-    '' i 9 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
-    '' i 8 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1, \
-    '' i 7 using ($1 * 1.06):8:4:5 title columnheader(1) with yerrorbars lt rgb "purple"	      pt  12 ps 1.0  lw 1
+    '' i 4 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
+    '' i 3 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1, \
+    '' i 2 using ($1 * 1.06):8:4:5 title columnheader(1) with yerrorbars lt rgb "purple"	      pt  12 ps 1.0  lw 1
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-java.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-java.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -8,5 +8,5 @@
 
 printSingleDetail(
-    infileLocal='results-java-general.csv',
+    machines=['java'],
     tgtMovement = 'stack',
     tgtPolarity = 'insfirst',
@@ -20,4 +20,5 @@
 
 
-    measure='OpDurRelFx'
+    measureBase='OpDurRel',
+    marginalizeOn=['fx']
 )
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-swift.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-swift.gp	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-swift.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -43,5 +43,5 @@
 plot INDIR."/plot-list-zoomin-rel-swift.dat" \
        i 0 using ($1 * 0.98):8:4:5 title columnheader(1) with yerrorbars lt rgb "blue" 	      pt  6  ps 0.85 lw 1, \
-    '' i 9 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
-    '' i 8 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1, \
-    '' i 7 using ($1 * 1.06):8:4:5 title columnheader(1) with yerrorbars lt rgb "purple"	      pt  12 ps 1.0  lw 1
+    '' i 4 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
+    '' i 3 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1, \
+    '' i 2 using ($1 * 1.06):8:4:5 title columnheader(1) with yerrorbars lt rgb "purple"	      pt  12 ps 1.0  lw 1
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-swift.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-rel-swift.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -8,5 +8,5 @@
 
 printSingleDetail(
-    infileLocal='results-swift-general.csv',
+    machines=['swift'],
     tgtMovement = 'stack',
     tgtPolarity = 'insfirst',
@@ -20,4 +20,5 @@
 
 
-    measure='OpDurRelFx'
+    measureBase='OpDurRel',
+    marginalizeOn=['fx']
 )
Index: doc/theses/mike_brooks_MMath/plots/list-zoomout-noshuf-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomout-noshuf-java.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomout-noshuf-java.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -8,5 +8,6 @@
 
 printSingleDetail(
-    infileLocal='results-java-zoomout-noshuf.csv',
+    dsname='zoomout-noshuf',
+    machines=['java'],
     tgtMovement = 'stack',
     tgtPolarity = 'insfirst',
Index: doc/theses/mike_brooks_MMath/plots/list-zoomout-noshuf-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomout-noshuf-swift.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomout-noshuf-swift.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -8,5 +8,6 @@
 
 printSingleDetail(
-    infileLocal='results-swift-zoomout-noshuf.csv',
+    dsname='zoomout-noshuf',
+    machines=['swift'],
     tgtMovement = 'stack',
     tgtPolarity = 'insfirst',
Index: doc/theses/mike_brooks_MMath/plots/list-zoomout-shuf-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomout-shuf-java.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomout-shuf-java.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -8,5 +8,6 @@
 
 printSingleDetail(
-    infileLocal='results-java-zoomout-shuf.csv',
+    dsname='zoomout-shuf',
+    machines=['java'],
     tgtMovement = 'stack',
     tgtPolarity = 'insfirst',
Index: doc/theses/mike_brooks_MMath/plots/list-zoomout-shuf-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomout-shuf-swift.py	(revision d6ce3103fc8ee22168576c5429be0b9b1338a09d)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomout-shuf-swift.py	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
@@ -8,5 +8,6 @@
 
 printSingleDetail(
-    infileLocal='results-swift-zoomout-shuf.csv',
+    dsname='zoomout-shuf',
+    machines=['swift'],
     tgtMovement = 'stack',
     tgtPolarity = 'insfirst',
