Index: doc/theses/mike_brooks_MMath/list.tex
===================================================================
--- doc/theses/mike_brooks_MMath/list.tex	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ doc/theses/mike_brooks_MMath/list.tex	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -955,5 +955,5 @@
 
 The preceding result shows that all the intrusive implementations examined have noteworthy performance compared to wrapped lists.
-This analysis picks the list region 10-150 and zooms-in to differentiate among the different intrusive implementations.
+This analysis picks the sizes below 150 and zooms in to differentiate among the different intrusive implementations.
 The data is selected from the start of \VRef[Figure]{f:Linear}, but the start of \VRef[Figure]{f:Shuffled} would be largely the same.
 
@@ -963,32 +963,73 @@
   \begin{tabular}{p{0.75in}p{2.75in}p{3in}}
   &
-  \subfloat[Absolute Time, AMD]{\label{f:AbsoluteTime-swift}
+  \subfloat[Operation I, AMD]{\label{f:AbsoluteTime-i-swift}
 	\hspace*{-0.75in}
-	\includegraphics{plot-list-zoomin-abs-swift.pdf}
+	\includegraphics{plot-list-zoomin-abs-i-swift.pdf}
   } % subfigure
   &
-  \subfloat[Absolute Time, Intel]{\label{f:AbsoluteTime-java}
-	\includegraphics{plot-list-zoomin-abs-java.pdf}
+  \subfloat[Operation I, Intel]{\label{f:AbsoluteTime-i-java}
+	\includegraphics{plot-list-zoomin-abs-i-java.pdf}
   } % subfigure
   \\
   &
-  \subfloat[Relative Time, AMD]{\label{f:RelativeTime-swift}
+  \subfloat[Operation VIII, AMD]{\label{f:AbsoluteTime-viii-swift}
 	\hspace*{-0.75in}
-	\includegraphics{plot-list-zoomin-rel-swift.pdf}
+	\includegraphics{plot-list-zoomin-abs-viii-swift.pdf}
   } % subfigure
   &
-  \subfloat[Relative Time, Intel]{\label{f:RelativeTime-java}
-	\includegraphics{plot-list-zoomin-rel-java.pdf}
+  \subfloat[Operation VIII, Intel]{\label{f:AbsoluteTime-viii-java}
+	\includegraphics{plot-list-zoomin-abs-viii-java.pdf}
   } % subfigure
   \end{tabular}
-  \caption{Operation duration \vs list length at small-medium lengths.  One example operation is shown: stack movement, insert-first polarity and head-mediated access.  (a) has absolute times.  (b) has times relative to those of LQ-\lstinline{tailq}.}
+  \caption{Operation duration \vs list length at small-medium lengths.  Two example operations are shown: [I] stack movement with head-only access (plots a and b); [VIII] queue movement with element-oriented removal access (plots c and d); both operations use insert-first polarity.}
   \label{fig:plot-list-zoomin}
 \end{figure}
 
-\VRef[Figure]{fig:plot-list-zoomin} shows the zone from 10--150 blown up, both in absolute and relative time.
+\VRef[Figure]{fig:plot-list-zoomin} shows the sizes below 150 blown up.
 % The same scenario as the coarse comparison is used: a stack, with insertions and removals happening at the end called ``first,'' ``head'' or ``front,'' and all changes occurring through a head-provided insert/remove operation.
 The error bars show fastest and slowest time seen on five trials, and the central point is the mean of the remaining three trials.
 For readability, the points are slightly staggered at a given horizontal value, where the points might otherwise appear on top of each other.
 
+\VRef[Figure]{fig:plot-list-zoomin} has the pair machines, each in a column.
+It also has a pair of operating scenarios, each in a row.
+The experiment runs twelve operating scenarios; the ones chosen for their variety happen to be items I and VIII from the listing of \MLB{TODO: cross reference}.
+Note that LQ-list does not support queue operations, so this framework is absent from Operation VIII.
+
+At lengths 1 and 2, winner patterns seen at larger sizes generally do not apply.
+Indeed, an issue with \CFA giving terribel on queues at length 1 is evident in \VRef[Figure]{f:AbsoluteTime-viii-swift}.
+This phenomenon is elaborated in \MLB{TODO: xref}.
+For the remainder of this section, these sizes are disregarded.
+
+Even after the very-small anomalies, the selections of operation and machine significantly affect how speed responds to size.
+For example, Operation I on the AMD (\VRef[Figure]{f:AbsoluteTime-i-swift}) has \CFA generally winning over LQ, while the opposite is seen by switching either to Operation VIII (\VRef[Figure]{f:AbsoluteTime-viii-swift}) or to the Intel (\VRef[Figure]{f:AbsoluteTime-i-java}).
+For another, Operation I has sore spots at lengths in the middle for \uCpp on AMD and LQ-list on Intel, which resolve at larger lengths; yet no such pattern presents with Operation VIII.
+
+In spite of these complex interactions, a couple spots of stability can be analyzed.
+In these examples, the size zones 4--16, ``small,'' and above 48, ``medium,'' covering four specific sizes apiece, each tends to show a simple winner/loser story.
+Manual inspection of other such plots (not detailed) showed that this quality is generally upheld.
+So these zones are used for basing comparison.
+
+\begin{figure}
+  \centering
+  \includegraphics{plot-list-mchn-szz.pdf}
+  \caption{Histogram of operation durations, decomposed by physical factos.
+  Measurements are included from only the sizes in the ``small'' and ``medium'' stable zones.}
+  \label{fig:plot-list-mchn-szz}
+\end{figure}
+
+\VRef[Figure]{fig:plot-list-mchn-szz} shows the effects of the physical factors of size zone and machine.
+Each of these four histograms shows variation in duration coming from the four specific sizes in a size zone, from combining results of all twelve operations and all four frameworks.
+Among the means of the four histograms, there is a standard deviation of 0.9 ns, which is 20\% of the global mean.
+This variability is due solely to physial factors.
+
+From the perspective of assessing winning/losing frameworks, these physical effects are noise.
+So, subsequent analysis conditions on the phisical effects.
+That is, it presents results relative to the mean of the physical quadrant (\VRef[fig]{fig:plot-list-mchn-szz} histogram) to which it belogs.
+With this adjustment, absolute duration values (in nonsecods) are lost.
+In return, the physical quadrants are re-combined, enabling assessment of the non-physical factors.
+
+\MLB{Peter, stop here.  Graph and discussion of these non-physical factos is coming.}
+
+\begin{comment}
 While preparing experiment results, I first tested on my old office PC, AMD FX-8370E Eight-Core, before switching to the large new server for final testing.
 For this experiment, the results flipped in my favour when running on the server.
@@ -1003,4 +1044,5 @@
 @tailq@'s mean is always zero by definition, but its error bars, representing a single scenario's re-run stability, are still meaningful.
 With this bend straightened out, aggregating across lengths is feasible.
+\end{comment}
 
 \begin{figure}
Index: doc/theses/mike_brooks_MMath/plots/list-mchn-szz.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-mchn-szz.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-mchn-szz.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,2 @@
+plots/list-mchn-szz.gp.INPUTS: build/plot-list-mchn-szz.dat | build
+plots/list-mchn-szz.py.INPUTS: benchmarks/list/results-swift-general.csv
Index: doc/theses/mike_brooks_MMath/plots/list-mchn-szz.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-mchn-szz.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-mchn-szz.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,70 @@
+set terminal pdfcairo color enhanced size 6.5in,2.5in 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-mchn-szz.pdf"
+
+set lmargin 10
+set bmargin 4
+
+set grid
+unset key
+
+relDurBot = 0.3
+relDurTop = 3.0
+meanDurAbs = 4.18468330
+
+
+set ylabel "Duration (relative)" offset -1.0,0
+set logscale y 2
+set yrange [relDurBot:relDurTop];
+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 \
+) nomirror
+set y2label "Duration (ns)" offset 0,0
+set logscale y2 2
+set y2range [ relDurBot*meanDurAbs : relDurTop * meanDurAbs ];
+set y2tics (1,2,3,4,5,6,7,8,10,12,14)
+
+
+set xrange [-0.25:4.25];
+set xlabel "Machine, Size Zone; Prevalence" offset 2,-1
+set xtics (\
+    "AMD\nsmall" 0, \
+    "AMD\nmed." 1, \
+    "Intel\nsmall" 2, \
+    "Intel\nmed." 3 \
+)
+
+set errorbars 2.0
+set pointintervalbox 0
+
+barHtScale = 0.04
+
+
+plot INDIR."/plot-list-mchn-szz.dat" \
+       i 3 using (0):(0):(0):(0 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "black"  fs transparent solid 0.15 noborder, \
+    '' i 2 using (0):(0):(1):(1 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "black"  fs transparent solid 0.15 noborder, \
+    '' i 1 using (0):(0):(2):(2 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "black"  fs transparent solid 0.15 noborder, \
+    '' i 0 using (0):(0):(3):(3 + barHtScale * $3):1:2 title columnheader(1) with boxxyerror fc rgb "black"  fs transparent solid 0.15 noborder, \
+    '' i 3 using (0 + barHtScale * $3):2 notitle with steps lc rgb "black"  lw 0.3, \
+    '' i 2 using (1 + barHtScale * $3):2 notitle with steps lc rgb "black"  lw 0.3, \
+    '' i 1 using (2 + barHtScale * $3):2 notitle with steps lc rgb "black"  lw 0.3, \
+    '' i 0 using (3 + barHtScale * $3):2 notitle with steps lc rgb "black"  lw 0.3
Index: doc/theses/mike_brooks_MMath/plots/list-mchn-szz.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-mchn-szz.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-mchn-szz.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,145 @@
+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 printHistos(*,
+    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)
+    
+
+printHistos(
+    tgtMovement = 'all',
+    tgtPolarity = 'all',
+    tgtAccessor = 'all',
+    marginalizeOn=['machine', 'SizeZone'] )
+
Index: doc/theses/mike_brooks_MMath/plots/list-wip.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-wip.d	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ 	(revision )
@@ -1,2 +1,0 @@
-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)
+++ 	(revision )
@@ -1,105 +1,0 @@
-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)
+++ 	(revision )
@@ -1,168 +1,0 @@
-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-i-java.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-java.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-java.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,2 @@
+plots/list-zoomin-abs-i-java.gp.INPUTS: build/plot-list-zoomin-abs-i-java.dat | build
+plots/list-zoomin-abs-i-java.py.INPUTS: benchmarks/list/results-java-general.csv
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-java.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-java.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-java.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,34 @@
+set terminal pdfcairo color enhanced size 3.0in,2.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
+
+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-zoomin-abs-i-java.pdf"
+
+set grid
+unset key
+set logscale x 2
+set logscale y
+set yrange [1:15];
+set ytics (1,2,3,4,5,6,7,8,10,12,14)
+set format y ""
+set xrange [0.75:180];
+# set xlabel "List length (item count)" offset 2,0
+set format x ""
+# set ylabel "Duration (ns)" offset -1.0,0
+set format y ""
+set errorbars 2.0
+set pointintervalbox 0
+
+plot INDIR."/plot-list-zoomin-abs-i-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 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-i-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-java.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-java.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,20 @@
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from ListCommon import *
+
+printSingleDetail(
+    machines=['java'],
+    tgtMovement = 'stack',
+    tgtPolarity = 'insfirst',
+    tgtAccessor = 'allhead'
+
+
+    # tgtMovement = 'all',
+    # tgtPolarity = 'all',
+    # tgtAccessor = 'remelem',
+    # tgtInterleave = 0.5
+    )
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-swift.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-swift.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-swift.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,2 @@
+plots/list-zoomin-abs-i-swift.gp.INPUTS: build/plot-list-zoomin-abs-i-swift.dat | build
+plots/list-zoomin-abs-i-swift.py.INPUTS: benchmarks/list/results-swift-general.csv
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-swift.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-swift.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-swift.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,31 @@
+set terminal pdfcairo color enhanced size 3.625in,2.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-zoomin-abs-i-swift.pdf"
+
+set lmargin 10
+
+set grid
+unset key
+set logscale x 2
+set logscale y
+set yrange [1:15];
+set ytics (1,2,3,4,5,6,7,8,10,12,14)
+set xrange [0.75:180];
+# set xlabel "List length (item count)" offset 2,0
+set format x ""
+set ylabel "Duration (ns)" offset -3.0,0
+set errorbars 2.0
+set pointintervalbox 0
+
+plot INDIR."/plot-list-zoomin-abs-i-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 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-i-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-swift.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-i-swift.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,20 @@
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from ListCommon import *
+
+printSingleDetail(
+    machines=['swift'],
+    tgtMovement = 'stack',
+    tgtPolarity = 'insfirst',
+    tgtAccessor = 'allhead'
+
+
+    # tgtMovement = 'all',
+    # tgtPolarity = 'all',
+    # tgtAccessor = 'remelem',
+    # tgtInterleave = 0.5
+    )
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.d	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ 	(revision )
@@ -1,2 +1,0 @@
-plots/list-zoomin-abs-java.gp.INPUTS: build/plot-list-zoomin-abs-java.dat | build
-plots/list-zoomin-abs-java.py.INPUTS: benchmarks/list/results-java-general.csv
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-java.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ 	(revision )
@@ -1,34 +1,0 @@
-set terminal pdfcairo color enhanced size 3.0in,2.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
-
-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-zoomin-abs-java.pdf"
-
-set grid
-unset key
-set logscale x 2
-set logscale y
-set yrange [1:15];
-# set ytics (1,2,3,4,5,6,7,8,10,12,14)
-set format y ""
-set xrange [0.75:180];
-# set xlabel "List length (item count)" offset 2,0
-set format x ""
-# set ylabel "Duration (ns)" offset -1.0,0
-set format y ""
-set errorbars 2.0
-set pointintervalbox 0
-
-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 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 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ 	(revision )
@@ -1,20 +1,0 @@
-import pandas as pd
-import numpy as np
-import os
-import sys
-
-sys.path.insert(0, os.path.dirname(__file__))
-from ListCommon import *
-
-printSingleDetail(
-    machines=['java'],
-    tgtMovement = 'stack',
-    tgtPolarity = 'insfirst',
-    tgtAccessor = 'allhead'
-
-
-    # tgtMovement = 'all',
-    # tgtPolarity = 'all',
-    # tgtAccessor = 'remelem',
-    # tgtInterleave = 0.5
-    )
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.d	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ 	(revision )
@@ -1,2 +1,0 @@
-plots/list-zoomin-abs-swift.gp.INPUTS: build/plot-list-zoomin-abs-swift.dat | build
-plots/list-zoomin-abs-swift.py.INPUTS: benchmarks/list/results-swift-general.csv
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-swift.gp	(revision 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ 	(revision )
@@ -1,31 +1,0 @@
-set terminal pdfcairo color enhanced size 3.625in,2.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-zoomin-abs-swift.pdf"
-
-set lmargin 10
-
-set grid
-unset key
-set logscale x 2
-set logscale y
-set yrange [1:15];
-set ytics (1,2,3,4,5,6,7,8,10,12,14)
-set xrange [0.75:180];
-# set xlabel "List length (item count)" offset 2,0
-set format x ""
-set ylabel "Duration (ns)" offset -3.0,0
-set errorbars 2.0
-set pointintervalbox 0
-
-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 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 6767f277c9a03b970620f9b6c29e0c534fd77f76)
+++ 	(revision )
@@ -1,20 +1,0 @@
-import pandas as pd
-import numpy as np
-import os
-import sys
-
-sys.path.insert(0, os.path.dirname(__file__))
-from ListCommon import *
-
-printSingleDetail(
-    machines=['swift'],
-    tgtMovement = 'stack',
-    tgtPolarity = 'insfirst',
-    tgtAccessor = 'allhead'
-
-
-    # tgtMovement = 'all',
-    # tgtPolarity = 'all',
-    # tgtAccessor = 'remelem',
-    # tgtInterleave = 0.5
-    )
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-java.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-java.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-java.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,2 @@
+plots/list-zoomin-abs-viii-java.gp.INPUTS: build/plot-list-zoomin-abs-viii-java.dat | build
+plots/list-zoomin-abs-viii-java.py.INPUTS: benchmarks/list/results-java-general.csv
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-java.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-java.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-java.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,29 @@
+set terminal pdfcairo color enhanced size 3.0in,2.5in 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-zoomin-abs-viii-java.pdf"
+
+set grid
+unset key
+set logscale x 2
+set logscale y
+set yrange [1:15];
+set ytics (1,2,3,4,5,6,7,8,10,12,14)
+set format y ""
+set xrange [0.75:180];
+set xlabel "List length (item count)" offset 2,0
+# set ylabel "Duration (ns)" offset -1.0,0
+set format y ""
+set errorbars 2.0
+set pointintervalbox 0
+
+plot INDIR."/plot-list-zoomin-abs-viii-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 3 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
+    '' i 2 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-java.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-java.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-java.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,20 @@
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from ListCommon import *
+
+printSingleDetail(
+    machines=['java'],
+    tgtMovement = 'queue',
+    tgtPolarity = 'insfirst',
+    tgtAccessor = 'remelem'
+
+
+    # tgtMovement = 'all',
+    # tgtPolarity = 'all',
+    # tgtAccessor = 'remelem',
+    # tgtInterleave = 0.5
+    )
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-swift.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-swift.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-swift.d	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,2 @@
+plots/list-zoomin-abs-viii-swift.gp.INPUTS: build/plot-list-zoomin-abs-viii-swift.dat | build
+plots/list-zoomin-abs-viii-swift.py.INPUTS: benchmarks/list/results-swift-general.csv
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-swift.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-swift.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-swift.gp	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,29 @@
+set terminal pdfcairo color enhanced size 3.625in,2.5in 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-zoomin-abs-viii-swift.pdf"
+
+set lmargin 10
+
+set grid
+unset key
+set logscale x 2
+set logscale y
+set yrange [1:15];
+set ytics (1,2,3,4,5,6,7,8,10,12,14)
+set xrange [0.75:180];
+set xlabel "List length (item count)" offset 2,0
+set ylabel "Duration (ns)" offset -3.0,0
+set errorbars 2.0
+set pointintervalbox 0
+
+plot INDIR."/plot-list-zoomin-abs-viii-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 3 using ($1 * 0.94):8:4:5 title columnheader(1) with yerrorbars lt rgb "dark-orange"	pt  8  ps 0.75 lw 1, \
+    '' i 2 using ($1 * 1.02):8:4:5 title columnheader(1) with yerrorbars lt rgb "magenta"	      pt  10 ps 0.85 lw 1
Index: doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-swift.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-swift.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
+++ doc/theses/mike_brooks_MMath/plots/list-zoomin-abs-viii-swift.py	(revision 17f2a7f44bc6da5404130331948cffe2d1432e43)
@@ -0,0 +1,20 @@
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from ListCommon import *
+
+printSingleDetail(
+    machines=['swift'],
+    tgtMovement = 'queue',
+    tgtPolarity = 'insfirst',
+    tgtAccessor = 'remelem'
+
+
+    # tgtMovement = 'all',
+    # tgtPolarity = 'all',
+    # tgtAccessor = 'remelem',
+    # tgtInterleave = 0.5
+    )
