Merge asterix-experiments to master
Change-Id: I79b91e045bd056e62adb6e48795a6625baee0062
Reviewed-on: https://asterix-gerrit.ics.uci.edu/642
Reviewed-by: Ian Maxon <imaxon@apache.org>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
diff --git a/asterix-experiments/src/main/resources/gantt/foo.eps b/asterix-experiments/src/main/resources/gantt/foo.eps
new file mode 100644
index 0000000..0f13788
--- /dev/null
+++ b/asterix-experiments/src/main/resources/gantt/foo.eps
@@ -0,0 +1,928 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: foo.eps
+%%Creator: gnuplot 4.6 patchlevel 5
+%%CreationDate: Sat Jul 11 23:19:23 2015
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%EndComments
+%%BeginProlog
+/gnudict 256 dict def
+gnudict begin
+%
+% The following true/false flags may be edited by hand if desired.
+% The unit line width and grayscale image gamma correction may also be changed.
+%
+/Color true def
+/Blacktext false def
+/Solid true def
+/Dashlength 1 def
+/Landscape false def
+/Level1 false def
+/Rounded false def
+/ClipToBoundingBox false def
+/SuppressPDFMark false def
+/TransparentPatterns false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/Gamma 1.0 def
+/BackgroundColor {-1.000 -1.000 -1.000} def
+%
+/vshift -46 def
+/dl1 {
+ 10.0 Dashlength mul mul
+ Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
+} def
+/dl2 {
+ 10.0 Dashlength mul mul
+ Rounded { currentlinewidth 0.75 mul add } if
+} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/doclip {
+ ClipToBoundingBox {
+ newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath
+ clip
+ } if
+} def
+%
+% Gnuplot Prolog Version 4.6 (September 2012)
+%
+%/SuppressPDFMark true def
+%
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/Z {closepath} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/g {setgray} bind def
+/Gshow {show} def % May be redefined later in the file to support UTF-8
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow {currentpoint stroke M 0 vshift R
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R
+ Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
+/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
+/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
+/BL {stroke userlinewidth 2 mul setlinewidth
+ Rounded {1 setlinejoin 1 setlinecap} if} def
+/AL {stroke userlinewidth 2 div setlinewidth
+ Rounded {1 setlinejoin 1 setlinecap} if} def
+/UL {dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def} def
+/PL {stroke userlinewidth setlinewidth
+ Rounded {1 setlinejoin 1 setlinecap} if} def
+3.8 setmiterlimit
+% Default Line colors
+/LCw {1 1 1} def
+/LCb {0 0 0} def
+/LCa {0 0 0} def
+/LC0 {1 0 0} def
+/LC1 {0 1 0} def
+/LC2 {0 0 1} def
+/LC3 {1 0 1} def
+/LC4 {0 1 1} def
+/LC5 {1 1 0} def
+/LC6 {0 0 0} def
+/LC7 {1 0.3 0} def
+/LC8 {0.5 0.5 0.5} def
+% Default Line Types
+/LTw {PL [] 1 setgray} def
+/LTb {BL [] LCb DL} def
+/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
+/LT0 {PL [] LC0 DL} def
+/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
+/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
+/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
+/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
+/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
+/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
+/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
+/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
+/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
+/Dia {stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt} def
+/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt} def
+/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke} def
+/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt} def
+/Star {2 copy Pls Crs} def
+/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill} def
+/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill} def
+/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt} def
+/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF {stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill} def
+/Pent {stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt} def
+/PentF {stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore} def
+/Circle {stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt} def
+/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
+/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
+/C1 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C2 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C3 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C4 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C5 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc} bind def
+/C6 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C7 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C8 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C9 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C11 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C12 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C13 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/C14 {BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc} bind def
+/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath} bind def
+/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath} bind def
+/Square {dup Rec} bind def
+/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
+/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
+/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
+/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
+/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
+/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill Bsquare} bind def
+/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
+/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
+/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare} bind def
+/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare} bind def
+/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
+/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare} bind def
+/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
+/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
+/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
+/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
+/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
+/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
+/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
+/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
+/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
+/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
+/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
+/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
+/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
+/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
+/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
+/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
+/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
+/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
+/DiaE {stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke} def
+/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke} def
+/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke} def
+/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke} def
+/PentE {stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore} def
+/CircE {stroke [] 0 setdash
+ hpt 0 360 arc stroke} def
+/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
+/DiaW {stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke} def
+/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke} def
+/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke} def
+/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke} def
+/PentW {stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore} def
+/CircW {stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke} def
+/BoxFill {gsave Rec 1 setgray fill grestore} def
+/Density {
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor} def
+/BoxColFill {gsave Rec PolyFill} def
+/PolyFill {gsave Density fill grestore grestore} def
+/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
+%
+% PostScript Level 1 Pattern Fill routine for rectangles
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill {gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+ clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ {PFa 4 get mul 0 M 0 PFs V} for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ {PFa 4 get mul 0 2 1 roll M PFs 0 V} for
+ } if
+ stroke grestore} def
+%
+/languagelevel where
+ {pop languagelevel} {1} ifelse
+ 2 lt
+ {/InterpretLevel1 true def}
+ {/InterpretLevel1 Level1 def}
+ ifelse
+%
+% PostScript level 2 pattern fill definitions
+%
+/Level2PatternFill {
+/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
+ bind def
+/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke}
+>> matrix makepattern
+/Pat1 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
+ 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
+>> matrix makepattern
+/Pat2 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
+ 8 8 L 8 0 L 0 0 L fill}
+>> matrix makepattern
+/Pat3 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
+ 0 12 M 12 0 L stroke}
+>> matrix makepattern
+/Pat4 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
+ 0 -4 M 12 8 L stroke}
+>> matrix makepattern
+/Pat5 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
+ 0 12 M 8 -4 L 4 12 M 10 0 L stroke}
+>> matrix makepattern
+/Pat6 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
+ 0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
+>> matrix makepattern
+/Pat7 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
+ 12 0 M -4 8 L 12 4 M 0 10 L stroke}
+>> matrix makepattern
+/Pat8 exch def
+<< Tile8x8
+ /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
+ -4 0 M 12 8 L -4 4 M 8 10 L stroke}
+>> matrix makepattern
+/Pat9 exch def
+/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
+/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
+/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
+/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
+/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
+/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
+/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
+} def
+%
+%
+%End of PostScript Level 2 code
+%
+/PatternBgnd {
+ TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
+} def
+%
+% Substitute for Level 2 pattern fill codes with
+% grayscale if Level 2 support is not selected.
+%
+/Level1PatternFill {
+/Pattern1 {0.250 Density} bind def
+/Pattern2 {0.500 Density} bind def
+/Pattern3 {0.750 Density} bind def
+/Pattern4 {0.125 Density} bind def
+/Pattern5 {0.375 Density} bind def
+/Pattern6 {0.625 Density} bind def
+/Pattern7 {0.875 Density} bind def
+} def
+%
+% Now test for support of Level 2 code
+%
+Level1 {Level1PatternFill} {Level2PatternFill} ifelse
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+Level1 SuppressPDFMark or
+{} {
+/SDict 10 dict def
+systemdict /pdfmark known not {
+ userdict /pdfmark systemdict /cleartomark get put
+} if
+SDict begin [
+ /Title (foo.eps)
+ /Subject (gnuplot plot)
+ /Creator (gnuplot 4.6 patchlevel 5)
+ /Author (kisskys)
+% /Producer (gnuplot)
+% /Keywords ()
+ /CreationDate (Sat Jul 11 23:19:23 2015)
+ /DOCINFO pdfmark
+end
+} ifelse
+end
+%%EndProlog
+%%Page: 1 1
+gnudict begin
+gsave
+doclip
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 7200.00 5040.00 BoxColFill} if
+gsave % colour palette begin
+/maxcolors 0 def
+/HSV2RGB { exch dup 0.0 eq {pop exch pop dup dup} % achromatic gray
+ { /HSVs exch def /HSVv exch def 6.0 mul dup floor dup 3 1 roll sub
+ /HSVf exch def /HSVi exch cvi def /HSVp HSVv 1.0 HSVs sub mul def
+ /HSVq HSVv 1.0 HSVs HSVf mul sub mul def
+ /HSVt HSVv 1.0 HSVs 1.0 HSVf sub mul sub mul def
+ /HSVi HSVi 6 mod def 0 HSVi eq {HSVv HSVt HSVp}
+ {1 HSVi eq {HSVq HSVv HSVp}{2 HSVi eq {HSVp HSVv HSVt}
+ {3 HSVi eq {HSVp HSVq HSVv}{4 HSVi eq {HSVt HSVp HSVv}
+ {HSVv HSVp HSVq} ifelse} ifelse} ifelse} ifelse} ifelse
+ } ifelse} def
+/Constrain {
+ dup 0 lt {0 exch pop}{dup 1 gt {1 exch pop} if} ifelse} def
+/YIQ2RGB {
+ 3 copy -1.702 mul exch -1.105 mul add add Constrain 4 1 roll
+ 3 copy -0.647 mul exch -0.272 mul add add Constrain 5 1 roll
+ 0.621 mul exch -0.956 mul add add Constrain 3 1 roll } def
+/CMY2RGB { 1 exch sub exch 1 exch sub 3 2 roll 1 exch sub 3 1 roll exch } def
+/XYZ2RGB { 3 copy -0.9017 mul exch -0.1187 mul add exch 0.0585 mul exch add
+ Constrain 4 1 roll 3 copy -0.0279 mul exch 1.999 mul add exch
+ -0.9844 mul add Constrain 5 1 roll -0.2891 mul exch -0.5338 mul add
+ exch 1.91 mul exch add Constrain 3 1 roll} def
+/SelectSpace {ColorSpace (HSV) eq {HSV2RGB}{ColorSpace (XYZ) eq {
+ XYZ2RGB}{ColorSpace (CMY) eq {CMY2RGB}{ColorSpace (YIQ) eq {YIQ2RGB}
+ if} ifelse} ifelse} ifelse} def
+/InterpolatedColor true def
+/grayindex {/gidx 0 def
+ {GrayA gidx get grayv ge {exit} if /gidx gidx 1 add def} loop} def
+/dgdx {grayv GrayA gidx get sub GrayA gidx 1 sub get
+ GrayA gidx get sub div} def
+/redvalue {RedA gidx get RedA gidx 1 sub get
+ RedA gidx get sub dgdxval mul add} def
+/greenvalue {GreenA gidx get GreenA gidx 1 sub get
+ GreenA gidx get sub dgdxval mul add} def
+/bluevalue {BlueA gidx get BlueA gidx 1 sub get
+ BlueA gidx get sub dgdxval mul add} def
+/interpolate {
+ grayindex grayv GrayA gidx get sub abs 1e-5 le
+ {RedA gidx get GreenA gidx get BlueA gidx get}
+ {/dgdxval dgdx def redvalue greenvalue bluevalue} ifelse} def
+/GrayA [0 .2 .4 .6 .8 1 ] def
+/RedA [1 1 .8 .8 .8 1 ] def
+/GreenA [.8 .8 .8 1 1 1 ] def
+/BlueA [.8 1 1 1 .8 .8 ] def
+/pm3dround {maxcolors 0 gt {dup 1 ge
+ {pop 1} {maxcolors mul floor maxcolors 1 sub div} ifelse} if} def
+/pm3dGamma 1.0 1.5 Gamma mul div def
+/ColorSpace (RGB) def
+Color InterpolatedColor or { % COLOUR vs. GRAY map
+ InterpolatedColor { %% Interpolation vs. RGB-Formula
+ /g {stroke pm3dround /grayv exch def interpolate
+ SelectSpace setrgbcolor} bind def
+ }{
+ /g {stroke pm3dround dup cF7 Constrain exch dup cF5 Constrain exch cF15 Constrain
+ SelectSpace setrgbcolor} bind def
+ } ifelse
+}{
+ /g {stroke pm3dround pm3dGamma exp setgray} bind def
+} ifelse
+1.000 UL
+LTb
+LCb setrgbcolor
+378 1277 M
+63 0 V
+5687 0 R
+-63 0 V
+-5771 0 R
+(S2) Rshow
+1.000 UL
+LTb
+LCb setrgbcolor
+378 2660 M
+63 0 V
+5687 0 R
+-63 0 V
+-5771 0 R
+(A) Rshow
+1.000 UL
+LTb
+LCb setrgbcolor
+378 4042 M
+63 0 V
+5687 0 R
+-63 0 V
+-5771 0 R
+(S0) Rshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+378 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+378 448 M
+0 63 V
+0 4360 R
+0 -63 V
+378 308 M
+( 0) Cshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+1336 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+1336 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 5) Cshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+2295 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+2295 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 10) Cshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+3253 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+3253 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 15) Cshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+4211 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+4211 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 20) Cshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+5170 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+5170 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 25) Cshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTa
+LCa setrgbcolor
+6128 448 M
+0 4423 V
+stroke
+LTb
+LCb setrgbcolor
+6128 448 M
+0 63 V
+0 4360 R
+0 -63 V
+0 -4500 R
+( 30) Cshow
+1.000 UL
+LTb
+LCb setrgbcolor
+1.000 UL
+LTb
+LCb setrgbcolor
+378 4871 N
+378 448 L
+5750 0 V
+0 4423 V
+-5750 0 V
+Z stroke
+LCb setrgbcolor
+112 2659 M
+currentpoint gsave translate -270 rotate 0 0 M
+() Cshow
+grestore
+LTb
+LCb setrgbcolor
+3253 98 M
+(time) Cshow
+LTb
+3253 4801 M
+() Cshow
+1.000 UL
+LTb
+0 g 0.800 378 3489 575 1106 BoxColFill
+LCb setrgbcolor
+378 3489 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+0 g 0.800 953 2107 383 1105 BoxColFill
+LCb setrgbcolor
+953 2107 M
+0 1105 V
+383 0 V
+0 -1105 V
+-383 0 V
+stroke
+LTb
+.2 g 0.800 1145 3489 575 1106 BoxColFill
+LCb setrgbcolor
+1145 3489 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+0 g 0.800 1336 724 575 1106 BoxColFill
+LCb setrgbcolor
+1336 724 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+.2 g 0.800 1720 2107 766 1105 BoxColFill
+LCb setrgbcolor
+1720 2107 M
+0 1105 V
+766 0 V
+0 -1105 V
+-766 0 V
+stroke
+LTb
+.4 g 0.800 1911 3489 575 1106 BoxColFill
+LCb setrgbcolor
+1911 3489 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+.2 g 0.800 2486 724 575 1106 BoxColFill
+LCb setrgbcolor
+2486 724 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+.4 g 0.800 2486 2107 575 1105 BoxColFill
+LCb setrgbcolor
+2486 2107 M
+0 1105 V
+575 0 V
+0 -1105 V
+-575 0 V
+stroke
+LTb
+.6 g 0.800 2678 3489 575 1106 BoxColFill
+LCb setrgbcolor
+2678 3489 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+.4 g 0.800 3061 724 575 1106 BoxColFill
+LCb setrgbcolor
+3061 724 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+.6 g 0.800 3253 2107 767 1105 BoxColFill
+LCb setrgbcolor
+3253 2107 M
+0 1105 V
+767 0 V
+0 -1105 V
+-767 0 V
+stroke
+LTb
+.8 g 0.800 3445 3489 575 1106 BoxColFill
+LCb setrgbcolor
+3445 3489 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+.6 g 0.800 4020 724 575 1106 BoxColFill
+LCb setrgbcolor
+4020 724 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+.8 g 0.800 4020 2107 575 1105 BoxColFill
+LCb setrgbcolor
+4020 2107 M
+0 1105 V
+575 0 V
+0 -1105 V
+-575 0 V
+stroke
+LTb
+1 g 0.800 4211 3489 575 1106 BoxColFill
+LCb setrgbcolor
+4211 3489 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+.8 g 0.800 4595 724 575 1106 BoxColFill
+LCb setrgbcolor
+4595 724 M
+0 1106 V
+575 0 V
+0 -1106 V
+-575 0 V
+stroke
+LTb
+1 g 0.800 4786 2107 767 1105 BoxColFill
+LCb setrgbcolor
+4786 2107 M
+0 1105 V
+767 0 V
+0 -1105 V
+-767 0 V
+stroke
+LTb
+1 g 0.800 5553 724 574 1106 BoxColFill
+LCb setrgbcolor
+5553 724 M
+0 1106 V
+574 0 V
+0 -1106 V
+-574 0 V
+1.000 UP
+stroke
+LTb
+LCb setrgbcolor
+% Begin plot #1
+6.000 UL
+LT0
+0 g LCb setrgbcolor
+6548 4801 M
+(0) Rshow
+LT0
+0 g 6632 4801 M
+399 0 V
+% End plot #1
+% Begin plot #2
+stroke
+LT1
+.2 g LCb setrgbcolor
+6548 4661 M
+(1) Rshow
+LT1
+.2 g 6632 4661 M
+399 0 V
+% End plot #2
+% Begin plot #3
+stroke
+LT2
+.4 g LCb setrgbcolor
+6548 4521 M
+(2) Rshow
+LT2
+.4 g 6632 4521 M
+399 0 V
+% End plot #3
+% Begin plot #4
+stroke
+LT3
+.6 g LCb setrgbcolor
+6548 4381 M
+(3) Rshow
+LT3
+.6 g 6632 4381 M
+399 0 V
+% End plot #4
+% Begin plot #5
+stroke
+LT4
+.8 g LCb setrgbcolor
+6548 4241 M
+(4) Rshow
+LT4
+.8 g 6632 4241 M
+399 0 V
+% End plot #5
+% Begin plot #6
+stroke
+LT5
+1 g LCb setrgbcolor
+6548 4101 M
+(5) Rshow
+LT5
+1 g 6632 4101 M
+399 0 V
+% End plot #6
+stroke
+1.000 UL
+LTb
+LCb setrgbcolor
+378 4871 N
+378 448 L
+5750 0 V
+0 4423 V
+-5750 0 V
+Z stroke
+1.000 UP
+1.000 UL
+LTb
+LCb setrgbcolor
+grestore % colour palette end
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
diff --git a/asterix-experiments/src/main/resources/gantt/foo.gpl b/asterix-experiments/src/main/resources/gantt/foo.gpl
new file mode 100644
index 0000000..d1e62bf
--- /dev/null
+++ b/asterix-experiments/src/main/resources/gantt/foo.gpl
@@ -0,0 +1,35 @@
+set xrange [0.000000:30.000000]
+set yrange [0.400000:3.600000]
+set autoscale x
+set xlabel "time"
+set ylabel ""
+set title ""
+set ytics ("A" 2, "S2" 1, "S0" 3)
+set key outside width +2
+set grid xtics
+set palette model RGB defined ( 0 1.0 0.8 0.8, 1 1.0 0.8 1.0, 2 0.8 0.8 1.0, 3 0.8 1.0 1.0, 4 0.8 1.0 0.8, 5 1.0 1.0 0.8 )
+unset colorbox
+set object 1 rectangle from 0.000000, 2.6 to 3.000000, 3.4 fillcolor palette frac 0.00 fillstyle solid 0.8
+set object 2 rectangle from 3.000000, 1.6 to 5.000000, 2.4 fillcolor palette frac 0.00 fillstyle solid 0.8
+set object 3 rectangle from 4.000000, 2.6 to 7.000000, 3.4 fillcolor palette frac 0.20 fillstyle solid 0.8
+set object 4 rectangle from 5.000000, 0.6 to 8.000000, 1.4 fillcolor palette frac 0.00 fillstyle solid 0.8
+set object 5 rectangle from 7.000000, 1.6 to 11.000000, 2.4 fillcolor palette frac 0.20 fillstyle solid 0.8
+set object 6 rectangle from 8.000000, 2.6 to 11.000000, 3.4 fillcolor palette frac 0.40 fillstyle solid 0.8
+set object 7 rectangle from 11.000000, 0.6 to 14.000000, 1.4 fillcolor palette frac 0.20 fillstyle solid 0.8
+set object 8 rectangle from 11.000000, 1.6 to 14.000000, 2.4 fillcolor palette frac 0.40 fillstyle solid 0.8
+set object 9 rectangle from 12.000000, 2.6 to 15.000000, 3.4 fillcolor palette frac 0.60 fillstyle solid 0.8
+set object 10 rectangle from 14.000000, 0.6 to 17.000000, 1.4 fillcolor palette frac 0.40 fillstyle solid 0.8
+set object 11 rectangle from 15.000000, 1.6 to 19.000000, 2.4 fillcolor palette frac 0.60 fillstyle solid 0.8
+set object 12 rectangle from 16.000000, 2.6 to 19.000000, 3.4 fillcolor palette frac 0.80 fillstyle solid 0.8
+set object 13 rectangle from 19.000000, 0.6 to 22.000000, 1.4 fillcolor palette frac 0.60 fillstyle solid 0.8
+set object 14 rectangle from 19.000000, 1.6 to 22.000000, 2.4 fillcolor palette frac 0.80 fillstyle solid 0.8
+set object 15 rectangle from 20.000000, 2.6 to 23.000000, 3.4 fillcolor palette frac 1.00 fillstyle solid 0.8
+set object 16 rectangle from 22.000000, 0.6 to 25.000000, 1.4 fillcolor palette frac 0.80 fillstyle solid 0.8
+set object 17 rectangle from 23.000000, 1.6 to 27.000000, 2.4 fillcolor palette frac 1.00 fillstyle solid 0.8
+set object 18 rectangle from 27.000000, 0.6 to 30.000000, 1.4 fillcolor palette frac 1.00 fillstyle solid 0.8
+plot -1 title "0" with lines linecolor palette frac 0.00 linewidth 6, \
+ -1 title "1" with lines linecolor palette frac 0.20 linewidth 6, \
+ -1 title "2" with lines linecolor palette frac 0.40 linewidth 6, \
+ -1 title "3" with lines linecolor palette frac 0.60 linewidth 6, \
+ -1 title "4" with lines linecolor palette frac 0.80 linewidth 6, \
+ -1 title "5" with lines linecolor palette frac 1.00 linewidth 6
\ No newline at end of file
diff --git a/asterix-experiments/src/main/resources/gantt/gantt.py b/asterix-experiments/src/main/resources/gantt/gantt.py
new file mode 100644
index 0000000..faf9e94
--- /dev/null
+++ b/asterix-experiments/src/main/resources/gantt/gantt.py
@@ -0,0 +1,387 @@
+#!/usr/bin/env python
+#
+# TODO:
+# - Task colors:
+# - User-defined using config file.
+# - Automagically chosen from color space.
+# - Advanced algorithm (contact Hannes Pretorius).
+# - Koos' specs:
+# - Resources and tasks sorted in read-in order (default)
+# or alphabetically (flag).
+# - Have proper gnuplot behavior on windows/x11, eps/pdf, latex terminals.
+# - Create and implement algorithm for critical path analysis.
+# - Split generic stuff into a Gantt class, and specific stuff into the main.
+#
+# gantt.py ganttfile | gnuplot
+
+import itertools, sys, getopt
+from ConfigParser import ConfigParser
+
+rectangleHeight = 0.8 #: Height of a rectangle in units.
+
+class Activity(object):
+ """
+ Container for activity information.
+
+ @ivar resource: Resource name.
+ @type resource: C{str}
+
+ @ivar start: Start time of the activity.
+ @type start: C{float}
+
+ @ivar stop: End time of the activity.
+ @type stop: C{float}
+
+ @ivar task: Name of the task/activity being performed.
+ @type task: C{str}
+ """
+ def __init__(self, resource, start, stop, task):
+ self.resource = resource
+ self.start = start
+ self.stop = stop
+ self.task = task
+
+class Rectangle(object):
+ """
+ Container for rectangle information.
+ """
+ def __init__(self, bottomleft, topright, fillcolor):
+ self.bottomleft = bottomleft
+ self.topright = topright
+ self.fillcolor = fillcolor
+ self.fillstyle = 'solid 0.8'
+ self.linewidth = 2
+
+class ColorBook(object):
+ """
+ Class managing colors.
+
+ @ivar colors
+ @ivar palette
+ @ivar prefix
+ """
+ def __init__(self, colorfname, tasks):
+ """
+ Construct a ColorBook object.
+
+ @param colorfname: Name of the color config file (if specified).
+ @type colorfname: C{str} or C{None}
+
+ @param tasks: Existing task types.
+ @type tasks: C{list} of C{str}
+ """
+ if colorfname:
+ values = self.load_config(colorfname, tasks)
+ else:
+ values = self.fixed(tasks)
+
+ self.colors, self.palette, self.prefix = values
+
+
+ def load_config(self, colorfname, tasks):
+ """
+ Read task colors from a configuration file.
+ """
+ palettedef = 'model RGB'
+ colorprefix = 'rgb'
+
+ # Read in task colors from configuration file
+ config = ConfigParser()
+ config.optionxform = str # makes option names case sensitive
+ config.readfp(open(colorfname, 'r'))
+ # Colors are RGB colornames
+ colors = dict(config.items('Colors'))
+
+ # Raise KeyError if no color is specified for a task
+ nocolors = [t for t in tasks if not colors.has_key(t)]
+ if nocolors:
+ msg = 'Could not find task color for ' + ', '.join(nocolors)
+ raise KeyError(msg)
+
+ return colors, palettedef, colorprefix
+
+ def fixed(self, tasks):
+ """
+ Pick colors from a pre-defined palette.
+ """
+ # Set task colors
+ # SE colors
+ # (see http://w3.wtb.tue.nl/nl/organisatie/systems_engineering/\
+ # info_for_se_students/how2make_a_poster/pictures/)
+ # Decrease the 0.8 values for less transparent colors.
+ se_palette = {"se_red": (1.0, 0.8, 0.8),
+ "se_pink": (1.0, 0.8, 1.0),
+ "se_violet": (0.8, 0.8, 1.0),
+ "se_blue": (0.8, 1.0, 1.0),
+ "se_green": (0.8, 1.0, 0.8),
+ "se_yellow": (1.0, 1.0, 0.8)}
+ se_gradient = ["se_red", "se_pink", "se_violet",
+ "se_blue", "se_green", "se_yellow"]
+ se_palettedef = '( ' + \
+ ', '.join(('%d ' % n +
+ ' '.join((str(x) for x in se_palette[c]))
+ for n, c in enumerate(se_gradient))) + \
+ ' )'
+
+ palettedef = 'model RGB defined %s' % se_palettedef
+ colorprefix = 'palette frac'
+ # Colors are fractions from the palette defined
+ colors = dict((t, '%0.2f' % (float(n)/(len(tasks)-1)))
+ for n, t in enumerate(tasks))
+
+ return colors, palettedef, colorprefix
+
+class DummyClass(object):
+ """
+ Dummy class for storing option values in.
+ """
+
+
+def make_rectangles(activities, resource_map, colors):
+ """
+ Construct a collection of L{Rectangle} for all activities.
+
+ @param activities: Activities being performed.
+ @type activities: C{iterable} of L{Activity}
+
+ @param resource_map: Indices of all resources.
+ @type resource_map: C{dict} of C{str} to C{int}
+
+ @param colors: Colors for all tasks.
+ @type colors: C{dict} of C{str} to C{str}
+
+ @return: Collection of rectangles to draw.
+ @rtype: C{list} of L{Rectangle}
+ """
+ rectangles = []
+ for act in activities:
+ ypos = resource_map[act.resource]
+ bottomleft = (act.start, ypos - 0.5 * rectangleHeight)
+ topright = (act.stop, ypos + 0.5 * rectangleHeight)
+ fillcolor = colors[act.task]
+ rectangles.append(Rectangle(bottomleft, topright, fillcolor))
+
+ return rectangles
+
+
+def load_ganttfile(ganttfile):
+ """
+ Load the resource/task file.
+
+ @param ganttfile: Name of the gantt file.
+ @type ganttfile: C{str}
+
+ @return: Activities loaded from the file, collection of
+ (resource, start, end, task) activities.
+ @rtype: C{list} of L{Activity}
+ """
+ activities = []
+ for line in open(ganttfile, 'r').readlines():
+ line = line.strip().split()
+ if len(line) == 0:
+ continue
+ resource = line[0]
+ start = float(line[1])
+ stop = float(line[2])
+ task = line[3]
+ activities.append(Activity(resource, start, stop, task))
+
+ return activities
+
+def make_unique_tasks_resources(alphasort, activities):
+ """
+ Construct collections of unique task names and resource names.
+
+ @param alphasort: Sort resources and tasks alphabetically.
+ @type alphasort: C{bool}
+
+ @param activities: Activities to draw.
+ @type activities: C{list} of L{Activity}
+
+ @return: Collections of task-types and resources.
+ @rtype: C{list} of C{str}, C{list} of C{str}
+ """
+ # Create list with unique resources and tasks in activity order.
+ resources = []
+ tasks = []
+ for act in activities:
+ if act.resource not in resources:
+ resources.append(act.resource)
+ if act.task not in tasks:
+ tasks.append(act.task)
+
+ # Sort such that resources and tasks appear in alphabetical order
+ if alphasort:
+ resources.sort()
+ tasks.sort()
+
+ # Resources are read from top (y=max) to bottom (y=1)
+ resources.reverse()
+
+ return tasks, resources
+
+
+def generate_plotdata(activities, resources, tasks, rectangles, options,
+ resource_map, color_book):
+ """
+ Generate Gnuplot lines.
+ """
+ xmin = 0
+ xmax = max(act.stop for act in activities)
+ ymin = 0 + (rectangleHeight / 2)
+ ymax = len(resources) + 1 - (rectangleHeight / 2)
+ xlabel = 'time'
+ ylabel = ''
+ title = options.plottitle
+ ytics = ''.join(['(',
+ ', '.join(('"%s" %d' % item)
+ for item in resource_map.iteritems()),
+ ')'])
+ # outside and 2 characters from the graph
+ key_position = 'outside width +2'
+ grid_tics = 'xtics'
+
+ # Set plot dimensions
+ plot_dimensions = ['set xrange [%f:%f]' % (xmin, xmax),
+ 'set yrange [%f:%f]' % (ymin, ymax),
+ 'set autoscale x', # extends x axis to next tic mark
+ 'set xlabel "%s"' % xlabel,
+ 'set ylabel "%s"' % ylabel,
+ 'set title "%s"' % title,
+ 'set ytics %s' % ytics,
+ 'set key %s' % key_position,
+ 'set grid %s' % grid_tics,
+ 'set palette %s' % color_book.palette,
+ 'unset colorbox']
+
+ # Generate gnuplot rectangle objects
+ plot_rectangles = (' '.join(['set object %d rectangle' % n,
+ 'from %f, %0.1f' % r.bottomleft,
+ 'to %f, %0.1f' % r.topright,
+ 'fillcolor %s %s' % (color_book.prefix,
+ r.fillcolor),
+ 'fillstyle solid 0.8'])
+ for n, r in itertools.izip(itertools.count(1), rectangles))
+
+ # Generate gnuplot lines
+ plot_lines = ['plot ' +
+ ', \\\n\t'.join(' '.join(['-1',
+ 'title "%s"' % t,
+ 'with lines',
+ 'linecolor %s %s ' % (color_book.prefix,
+ color_book.colors[t]),
+ 'linewidth 6'])
+ for t in tasks)]
+
+ return plot_dimensions, plot_rectangles, plot_lines
+
+def write_data(plot_dimensions, plot_rectangles, plot_lines, fname):
+ """
+ Write plot data out to file or screen.
+
+ @param fname: Name of the output file, if specified.
+ @type fname: C{str} (??)
+ """
+ if fname:
+ g = open(fname, 'w')
+ g.write('\n'.join(itertools.chain(plot_dimensions, plot_rectangles,
+ plot_lines)))
+ g.close()
+ else:
+ print '\n'.join(itertools.chain(plot_dimensions, plot_rectangles,
+ plot_lines))
+
+def fmt_opt(short, long, arg, text):
+ if arg:
+ return '-%s %s, --%s%s\t%s' % (short[:-1], arg, long, arg, text)
+ else:
+ return '-%s, --%s\t%s' % (short, long, text)
+
+def make_default_options():
+ option_values = DummyClass()
+ option_values.outputfile = ''
+ option_values.colorfile = ''
+ option_values.alphasort = False
+ option_values.plottitle = ''
+ return option_values
+
+def process_options():
+ """
+ Handle option and command-line argument processing.
+
+ @return: Options and gantt input filename.
+ @rtype: L{OptionParser} options, C{str}
+ """
+ optdefs = [('o:', 'output=', 'FILE', 'Write output to FILE.'),
+ ('c:', 'color=', 'FILE', 'Use task colors (RGB) as defined in '
+ 'configuration FILE (in RGB triplets,\n\t\t\t\tGnuplot '
+ 'colornames, or hexadecimal representations.'),
+ ('a', 'alpha', '', '\t\tShow resources and tasks in '
+ 'alphabetical order.'),
+ ('t:','title=', 'TITLE', 'Set plot title to TITLE (between '
+ 'double quotes).'),
+ ('h', 'help', '', '\t\tShow online help.')]
+ short_opts = ''.join(opt[0] for opt in optdefs if opt[0])
+ long_opts = [opt[1] for opt in optdefs if opt[1]]
+ usage_text = 'gantt.py [options] gantt-file\nwhere\n' + \
+ '\n'.join(' ' + fmt_opt(*opt) for opt in optdefs)
+
+ option_values = make_default_options()
+
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], short_opts, long_opts)
+ except getopt.GetoptError, err:
+ sys.stderr.write("gantt.py: %s\n" % err)
+ sys.exit(2)
+
+ for opt, optval in opts:
+ if opt in ('-o', '--output'):
+ option_values.outputfile = optval
+ continue
+ if opt in ('-c', '--color'):
+ option_values.colorfile = optval
+ continue
+ if opt in ('-a', '--alphasort'):
+ option_values.alphasort = True
+ continue
+ if opt in ('-t', '--title'):
+ option_values.plottitle = optval
+ continue
+ if opt in ('-h', '--help'):
+ print usage_text
+ sys.exit(0)
+
+ # Check if correct number of arguments is supplied
+ if len(args) != 1:
+ sys.stderr.write('gantty.py: incorrect number of arguments '
+ '(task/resource file expected)\n')
+ sys.exit(1)
+
+ return option_values, args[0]
+
+def compute(options, ganttfile):
+ activities = load_ganttfile(ganttfile)
+ tasks, resources = make_unique_tasks_resources(options.alphasort,
+ activities)
+
+ # Assign indices to resources
+ resource_map = dict(itertools.izip(resources, itertools.count(1)))
+
+ color_book = ColorBook(options.colorfile, tasks)
+ rectangles = make_rectangles(activities, resource_map, color_book.colors)
+
+ plot_dims, plot_rects, plot_lines = \
+ generate_plotdata(activities, resources, tasks, rectangles,
+ options, resource_map, color_book)
+
+ write_data(plot_dims, plot_rects, plot_lines, options.outputfile)
+
+def run():
+ options, ganttfile = process_options()
+ compute(options, ganttfile)
+
+
+if __name__ == '__main__':
+ run()
+
+
diff --git a/asterix-experiments/src/main/resources/gantt/vargantt1.gpl b/asterix-experiments/src/main/resources/gantt/vargantt1.gpl
new file mode 100644
index 0000000..02ac5e3
--- /dev/null
+++ b/asterix-experiments/src/main/resources/gantt/vargantt1.gpl
@@ -0,0 +1,35 @@
+set xrange [0.000000:30.000000]
+set yrange [0.400000:3.600000]
+set autoscale x
+set xlabel "time"
+set ylabel ""
+set title "Gantt chart"
+set ytics ("A" 2, "S2" 1, "S0" 3)
+set key outside width +2
+set grid xtics
+set palette model RGB
+unset colorbox
+set object 1 rectangle from 0.000000, 2.6 to 3.000000, 3.4 fillcolor rgb "#0092B5" fillstyle solid 0.8
+set object 2 rectangle from 3.000000, 1.6 to 5.000000, 2.4 fillcolor rgb "#0092B5" fillstyle solid 0.8
+set object 3 rectangle from 4.000000, 2.6 to 7.000000, 3.4 fillcolor rgb "#00AC82" fillstyle solid 0.8
+set object 4 rectangle from 5.000000, 0.6 to 8.000000, 1.4 fillcolor rgb "#0092B5" fillstyle solid 0.8
+set object 5 rectangle from 7.000000, 1.6 to 11.000000, 2.4 fillcolor rgb "#00AC82" fillstyle solid 0.8
+set object 6 rectangle from 8.000000, 2.6 to 11.000000, 3.4 fillcolor rgb "#84D200" fillstyle solid 0.8
+set object 7 rectangle from 11.000000, 0.6 to 14.000000, 1.4 fillcolor rgb "#00AC82" fillstyle solid 0.8
+set object 8 rectangle from 11.000000, 1.6 to 14.000000, 2.4 fillcolor rgb "#84D200" fillstyle solid 0.8
+set object 9 rectangle from 12.000000, 2.6 to 15.000000, 3.4 fillcolor rgb "#CEDF00" fillstyle solid 0.8
+set object 10 rectangle from 14.000000, 0.6 to 17.000000, 1.4 fillcolor rgb "#84D200" fillstyle solid 0.8
+set object 11 rectangle from 15.000000, 1.6 to 19.000000, 2.4 fillcolor rgb "#CEDF00" fillstyle solid 0.8
+set object 12 rectangle from 16.000000, 2.6 to 19.000000, 3.4 fillcolor rgb "#FFDD00" fillstyle solid 0.8
+set object 13 rectangle from 19.000000, 0.6 to 22.000000, 1.4 fillcolor rgb "#CEDF00" fillstyle solid 0.8
+set object 14 rectangle from 19.000000, 1.6 to 22.000000, 2.4 fillcolor rgb "#FFDD00" fillstyle solid 0.8
+set object 15 rectangle from 20.000000, 2.6 to 23.000000, 3.4 fillcolor rgb "#FF9A00" fillstyle solid 0.8
+set object 16 rectangle from 22.000000, 0.6 to 25.000000, 1.4 fillcolor rgb "#FFDD00" fillstyle solid 0.8
+set object 17 rectangle from 23.000000, 1.6 to 27.000000, 2.4 fillcolor rgb "#FF9A00" fillstyle solid 0.8
+set object 18 rectangle from 27.000000, 0.6 to 30.000000, 1.4 fillcolor rgb "#FF9A00" fillstyle solid 0.8
+plot -1 title "0" with lines linecolor rgb "#0092B5" linewidth 6, \
+ -1 title "1" with lines linecolor rgb "#00AC82" linewidth 6, \
+ -1 title "2" with lines linecolor rgb "#84D200" linewidth 6, \
+ -1 title "3" with lines linecolor rgb "#CEDF00" linewidth 6, \
+ -1 title "4" with lines linecolor rgb "#FFDD00" linewidth 6, \
+ -1 title "5" with lines linecolor rgb "#FF9A00" linewidth 6
\ No newline at end of file
diff --git a/asterix-experiments/src/main/resources/gantt/vargantt1.plt b/asterix-experiments/src/main/resources/gantt/vargantt1.plt
new file mode 100644
index 0000000..7f48291
--- /dev/null
+++ b/asterix-experiments/src/main/resources/gantt/vargantt1.plt
@@ -0,0 +1,4 @@
+set terminal postscript eps color solid
+set output "foo.eps"
+load "foo.gpl"
+unset output
diff --git a/asterix-experiments/src/main/resources/gantt/vargantt1.txt b/asterix-experiments/src/main/resources/gantt/vargantt1.txt
new file mode 100644
index 0000000..26a5641
--- /dev/null
+++ b/asterix-experiments/src/main/resources/gantt/vargantt1.txt
@@ -0,0 +1,18 @@
+S0 0.00000000000000000000 3.00000000000000000000 0
+A 3.00000000000000000000 5.00000000000000000000 0
+S0 4.00000000000000000000 7.00000000000000000000 1
+S2 5.00000000000000000000 8.00000000000000000000 0
+A 7.00000000000000000000 11.00000000000000000000 1
+S0 8.00000000000000000000 11.00000000000000000000 2
+S2 11.00000000000000000000 14.00000000000000000000 1
+A 11.00000000000000000000 14.00000000000000000000 2
+S0 12.00000000000000000000 15.00000000000000000000 3
+S2 14.00000000000000000000 17.00000000000000000000 2
+A 15.00000000000000000000 19.00000000000000000000 3
+S0 16.00000000000000000000 19.00000000000000000000 4
+S2 19.00000000000000000000 22.00000000000000000000 3
+A 19.00000000000000000000 22.00000000000000000000 4
+S0 20.00000000000000000000 23.00000000000000000000 5
+S2 22.00000000000000000000 25.00000000000000000000 4
+A 23.00000000000000000000 27.00000000000000000000 5
+S2 27.00000000000000000000 30.00000000000000000000 5
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/1.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/1.aql
new file mode 100644
index 0000000..0446799
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/1.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_a.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_a.aql
new file mode 100644
index 0000000..20e7ad5
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_a.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index BtreeExtraFieldIdx on Tweets(btree-extra-field1) type btree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_b.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_b.aql
new file mode 100644
index 0000000..aec3bff
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_b.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index RtreeLocationIdx on Tweets(sender-location) type rtree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_c.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_c.aql
new file mode 100644
index 0000000..c3ea516
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_c.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index InvMessageTextIdx on Tweets(message-text) type ngram(3);
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_d.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_d.aql
new file mode 100644
index 0000000..ea9eb8d
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/2_d.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index InvMessageTextIdx on Tweets(message-text) type keyword;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/3.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/3.aql
new file mode 100644
index 0000000..a143dd1
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/3.aql
@@ -0,0 +1,7 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index BtreeExtraFieldIdx on Tweets(btree-extra-field1) type btree;
+create index RtreeLocationIdx on Tweets(sender-location) type rtree;
+create index InvMessageKeywordIdx on Tweets(message-text) type keyword;
+create index InvMessagetNgramIdx on Tweets(message-text) type ngram(3);
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_1.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_1.aql
new file mode 100644
index 0000000..c3e7425
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_1.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index BtreeExtraFieldIdx1 on Tweets(btree-extra-field1) type btree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_2.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_2.aql
new file mode 100644
index 0000000..3f9e0d1
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_2.aql
@@ -0,0 +1,5 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index BtreeExtraFieldIdx1 on Tweets(btree-extra-field1) type btree;
+create index BtreeExtraFieldIdx2 on Tweets(btree-extra-field2) type btree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_4.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_4.aql
new file mode 100644
index 0000000..44f230d
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_4.aql
@@ -0,0 +1,7 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index BtreeExtraFieldIdx1 on Tweets(btree-extra-field1) type btree;
+create index BtreeExtraFieldIdx2 on Tweets(btree-extra-field2) type btree;
+create index BtreeExtraFieldIdx3 on Tweets(btree-extra-field3) type btree;
+create index BtreeExtraFieldIdx4 on Tweets(btree-extra-field4) type btree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_8.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_8.aql
new file mode 100644
index 0000000..f126aca
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/4_8.aql
@@ -0,0 +1,11 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index BtreeExtraFieldIdx1 on Tweets(btree-extra-field1) type btree;
+create index BtreeExtraFieldIdx2 on Tweets(btree-extra-field2) type btree;
+create index BtreeExtraFieldIdx3 on Tweets(btree-extra-field3) type btree;
+create index BtreeExtraFieldIdx4 on Tweets(btree-extra-field4) type btree;
+create index BtreeExtraFieldIdx5 on Tweets(btree-extra-field5) type btree;
+create index BtreeExtraFieldIdx6 on Tweets(btree-extra-field6) type btree;
+create index BtreeExtraFieldIdx7 on Tweets(btree-extra-field7) type btree;
+create index BtreeExtraFieldIdx8 on Tweets(btree-extra-field8) type btree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_1.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_1.aql
new file mode 100644
index 0000000..20c0d3e
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_1.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+
+create dataset Tweets1(TweetMessageType) primary key tweetid;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_1_count.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_1_count.aql
new file mode 100644
index 0000000..fab917d2
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_1_count.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+let $count1 := count(for $t in dataset Tweets1 return $t.tweetid)
+return {"count1": $count1}
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_2.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_2.aql
new file mode 100644
index 0000000..5efcfc1
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_2.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets1(TweetMessageType) primary key tweetid;
+create dataset Tweets2(TweetMessageType) primary key tweetid;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_2_count.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_2_count.aql
new file mode 100644
index 0000000..ce3d880
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_2_count.aql
@@ -0,0 +1,7 @@
+use dataverse experiments;
+
+let $count1 := count(for $t in dataset Tweets1 return $t.tweetid)
+return {"count1": $count1}
+
+let $count2 := count(for $t in dataset Tweets2 return $t.tweetid)
+return {"count2": $count2}
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_3.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_3.aql
new file mode 100644
index 0000000..e6d9c30
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_3.aql
@@ -0,0 +1,5 @@
+use dataverse experiments;
+
+create dataset Tweets1(TweetMessageType) primary key tweetid;
+create dataset Tweets2(TweetMessageType) primary key tweetid;
+create dataset Tweets3(TweetMessageType) primary key tweetid;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_3_count.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_3_count.aql
new file mode 100644
index 0000000..fa2c97f
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_3_count.aql
@@ -0,0 +1,10 @@
+use dataverse experiments;
+
+let $count1 := count(for $t in dataset Tweets1 return $t.tweetid)
+return {"count1": $count1}
+
+let $count2 := count(for $t in dataset Tweets2 return $t.tweetid)
+return {"count2": $count2}
+
+let $count3 := count(for $t in dataset Tweets3 return $t.tweetid)
+return {"count3": $count3}
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_4.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_4.aql
new file mode 100644
index 0000000..61d87ae
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_4.aql
@@ -0,0 +1,6 @@
+use dataverse experiments;
+
+create dataset Tweets1(TweetMessageType) primary key tweetid;
+create dataset Tweets2(TweetMessageType) primary key tweetid;
+create dataset Tweets3(TweetMessageType) primary key tweetid;
+create dataset Tweets4(TweetMessageType) primary key tweetid;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_4_count.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_4_count.aql
new file mode 100644
index 0000000..12b6210
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/5_4_count.aql
@@ -0,0 +1,13 @@
+use dataverse experiments;
+
+let $count1 := count(for $t in dataset Tweets1 return $t.tweetid)
+return {"count1": $count1}
+
+let $count2 := count(for $t in dataset Tweets2 return $t.tweetid)
+return {"count2": $count2}
+
+let $count3 := count(for $t in dataset Tweets3 return $t.tweetid)
+return {"count3": $count3}
+
+let $count4 := count(for $t in dataset Tweets4 return $t.tweetid)
+return {"count4": $count4}
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/6_a.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/6_a.aql
new file mode 100644
index 0000000..0b41bc5
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/6_a.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy constant(("num-components"="3"));
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/6_b.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/6_b.aql
new file mode 100644
index 0000000..ccd54d6
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/6_b.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy prefix(("max-mergable-component-size"="1073741824"),
+ ("max-tolerance-component-count"="5"));
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/6_c.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/6_c.aql
new file mode 100644
index 0000000..4022943
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/6_c.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy constant(("num-components"="1000000"));
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_a.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_a.aql
new file mode 100644
index 0000000..0b41bc5
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_a.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy constant(("num-components"="3"));
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_b.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_b.aql
new file mode 100644
index 0000000..ccd54d6
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_b.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy prefix(("max-mergable-component-size"="1073741824"),
+ ("max-tolerance-component-count"="5"));
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_c.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_c.aql
new file mode 100644
index 0000000..4022943
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_c.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy constant(("num-components"="1000000"));
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_compact.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_compact.aql
new file mode 100644
index 0000000..578f0a4
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_compact.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+
+compact dataset Tweets;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_d.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_d.aql
new file mode 100644
index 0000000..4022943
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_d.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy constant(("num-components"="1000000"));
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_q1.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_q1.aql
new file mode 100644
index 0000000..18b54ab
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_q1.aql
@@ -0,0 +1,8 @@
+use dataverse experiments;
+
+let $count := count(
+for $t in dataset Tweets
+where $t.tweetid = int64("1")
+return $t
+)
+return $count
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_q2.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_q2.aql
new file mode 100644
index 0000000..f691509
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/7_q2.aql
@@ -0,0 +1,8 @@
+use dataverse experiments;
+
+let $count := count(
+for $t in dataset Tweets
+where $t.tweetid >= int64("1") and $t.tweetid <= int64("1000")
+return $t
+)
+return $count
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_a.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_a.aql
new file mode 100644
index 0000000..38ee0a1
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_a.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy constant(("num-components"="3"));
+create index BtreeExtraFieldIdx on Tweets(btree-extra-field1) type btree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_b.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_b.aql
new file mode 100644
index 0000000..6eead85
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_b.aql
@@ -0,0 +1,5 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy prefix(("max-mergable-component-size"="1073741824"),
+ ("max-tolerance-component-count"="5"));
+create index BtreeExtraFieldIdx on Tweets(btree-extra-field1) type btree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_c.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_c.aql
new file mode 100644
index 0000000..134f824
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_c.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy constant(("num-components"="1000000"));
+create index BtreeExtraFieldIdx on Tweets(btree-extra-field1) type btree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_compact.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_compact.aql
new file mode 100644
index 0000000..578f0a4
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_compact.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+
+compact dataset Tweets;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_d.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_d.aql
new file mode 100644
index 0000000..134f824
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_d.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+create dataset Tweets(TweetMessageType) primary key tweetid using compaction policy constant(("num-components"="1000000"));
+create index BtreeExtraFieldIdx on Tweets(btree-extra-field1) type btree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_q1.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_q1.aql
new file mode 100644
index 0000000..03bebb6
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_q1.aql
@@ -0,0 +1,8 @@
+use dataverse experiments;
+
+let $count := count(
+for $t in dataset Tweets
+where $t.tweetid = int64("$KEY$")
+return $t
+)
+return {"pointLookupCount": $count}
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_q2.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_q2.aql
new file mode 100644
index 0000000..bd34067
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/8_q2.aql
@@ -0,0 +1,8 @@
+use dataverse experiments;
+
+let $count := count(
+for $t in dataset Tweets
+where $t.btree-extra-field1 > $LKEY$ and $t.btree-extra-field1 <= $HKEY$
+return $t
+)
+return {"rangeQueryCount": $count}
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/avg_gram_tokens.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/avg_gram_tokens.aql
new file mode 100644
index 0000000..2daa62f
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/avg_gram_tokens.aql
@@ -0,0 +1,6 @@
+use dataverse experiments;
+
+let $avg := avg(for $t in dataset Tweets
+let $c := count(gram-tokens($t.message-text, 3, 1))
+return $c)
+return {"avg-grams-per-record": $avg}
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/avg_keyword_tokens.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/avg_keyword_tokens.aql
new file mode 100644
index 0000000..a8dad49
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/avg_keyword_tokens.aql
@@ -0,0 +1,6 @@
+use dataverse experiments;
+
+let $avg := avg(for $t in dataset Tweets
+let $c := count(word-tokens($t.message-text))
+return $c)
+return {"avg-keywords-per-record": $avg}
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_1_ingest.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_1_ingest.aql
new file mode 100644
index 0000000..395f670
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_1_ingest.aql
@@ -0,0 +1,15 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10001,128.195.9.23:10001,128.195.9.24:10001,128.195.9.25:10001,
+ 128.195.9.26:10001,128.195.9.27:10001,128.195.9.28:10001,128.195.9.29:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets1 using policy Br;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_2_ingest.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_2_ingest.aql
new file mode 100644
index 0000000..65f42cc
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_2_ingest.aql
@@ -0,0 +1,26 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10001,128.195.9.23:10001,128.195.9.24:10001,128.195.9.25:10001,
+ 128.195.9.26:10001,128.195.9.27:10001,128.195.9.28:10001,128.195.9.29:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed2 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10002,128.195.9.23:10002,128.195.9.24:10002,128.195.9.25:10002,
+ 128.195.9.26:10002,128.195.9.27:10002,128.195.9.28:10002,128.195.9.29:10002"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets1 using policy Br;
+connect feed TweetFeed2 to dataset Tweets2 using policy Br;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_3_ingest.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_3_ingest.aql
new file mode 100644
index 0000000..945332d
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_3_ingest.aql
@@ -0,0 +1,37 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10001,128.195.9.23:10001,128.195.9.24:10001,128.195.9.25:10001,
+ 128.195.9.26:10001,128.195.9.27:10001,128.195.9.28:10001,128.195.9.29:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed2 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10002,128.195.9.23:10002,128.195.9.24:10002,128.195.9.25:10002,
+ 128.195.9.26:10002,128.195.9.27:10002,128.195.9.28:10002,128.195.9.29:10002"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed3 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10003,128.195.9.23:10003,128.195.9.24:10003,128.195.9.25:10003,
+ 128.195.9.26:10003,128.195.9.27:10003,128.195.9.28:10003,128.195.9.29:10003"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets1 using policy Br;
+connect feed TweetFeed2 to dataset Tweets2 using policy Br;
+connect feed TweetFeed3 to dataset Tweets3 using policy Br;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_4_ingest.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_4_ingest.aql
new file mode 100644
index 0000000..a1112b1
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/5_4_ingest.aql
@@ -0,0 +1,48 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10001,128.195.9.23:10001,128.195.9.24:10001,128.195.9.25:10001,
+ 128.195.9.26:10001,128.195.9.27:10001,128.195.9.28:10001,128.195.9.29:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed2 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10002,128.195.9.23:10002,128.195.9.24:10002,128.195.9.25:10002,
+ 128.195.9.26:10002,128.195.9.27:10002,128.195.9.28:10002,128.195.9.29:10002"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed3 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10003,128.195.9.23:10003,128.195.9.24:10003,128.195.9.25:10003,
+ 128.195.9.26:10003,128.195.9.27:10003,128.195.9.28:10003,128.195.9.29:10003"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed4 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10004,128.195.9.23:10004,128.195.9.24:10004,128.195.9.25:10004,
+ 128.195.9.26:10004,128.195.9.27:10004,128.195.9.28:10004,128.195.9.29:10004"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets1 using policy Br;
+connect feed TweetFeed2 to dataset Tweets2 using policy Br;
+connect feed TweetFeed3 to dataset Tweets3 using policy Br;
+connect feed TweetFeed4 to dataset Tweets4 using policy Br;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_1_ingest.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_1_ingest.aql
new file mode 100644
index 0000000..8f5654d
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_1_ingest.aql
@@ -0,0 +1,24 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="127.0.0.1:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed2 using socket_adapter
+(
+ ("sockets"="127.0.0.1:10002"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets using policy Br;
+connect feed TweetFeed2 to dataset Tweets using policy Br;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_1_ingest_query.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_1_ingest_query.aql
new file mode 100644
index 0000000..c7614dc
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_1_ingest_query.aql
@@ -0,0 +1,24 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="127.0.0.1:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed2 using socket_adapter
+(
+ ("sockets"="127.0.0.1:10002"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets using policy Brittle;
+connect feed TweetFeed2 to dataset Tweets using policy Brittle;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_2_ingest.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_2_ingest.aql
new file mode 100644
index 0000000..ba4c18e
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_2_ingest.aql
@@ -0,0 +1,24 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10001,128.195.9.23:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed2 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10002,128.195.9.23:10002"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets using policy Br;
+connect feed TweetFeed2 to dataset Tweets using policy Br;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_4_ingest.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_4_ingest.aql
new file mode 100644
index 0000000..c5dd828
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_4_ingest.aql
@@ -0,0 +1,24 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10001,128.195.9.23:10001,128.195.9.24:10001,128.195.9.25:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed2 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10002,128.195.9.23:10002,128.195.9.24:10002,128.195.9.25:10002"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets using policy Br;
+connect feed TweetFeed2 to dataset Tweets using policy Br;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_8_ingest.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_8_ingest.aql
new file mode 100644
index 0000000..6d337bd
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_8_ingest.aql
@@ -0,0 +1,24 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10001,128.195.9.23:10001,128.195.9.24:10001,128.195.9.25:10001,128.195.9.26:10001,128.195.9.27:10001,128.195.9.28:10001,128.195.9.29:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+create feed TweetFeed2 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10002,128.195.9.23:10002,128.195.9.24:10002,128.195.9.25:10002,128.195.9.26:10002,128.195.9.27:10002,128.195.9.28:10002,128.195.9.29:10002"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets using policy Br;
+connect feed TweetFeed2 to dataset Tweets using policy Br;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_8_ingest_query.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_8_ingest_query.aql
new file mode 100644
index 0000000..0d057a2
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_8_ingest_query.aql
@@ -0,0 +1,14 @@
+use dataverse experiments;
+
+create feed TweetFeed1 using socket_adapter
+(
+ ("sockets"="128.195.9.22:10001,128.195.9.23:10001,128.195.9.24:10001,128.195.9.25:10001,128.195.9.26:10001,128.195.9.27:10001,128.195.9.28:10001,128.195.9.29:10001"),
+ ("address-type"="IP"),
+ ("type-name"="TweetMessageType"),
+ ("format"="adm"),
+ ("duration"="1200")
+);
+
+set wait-for-completion-feed "false";
+
+connect feed TweetFeed1 to dataset Tweets using policy Brittle;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_types.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_types.aql
new file mode 100644
index 0000000..6a1168c
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/base/base_types.aql
@@ -0,0 +1,31 @@
+drop dataverse experiments if exists;
+create dataverse experiments;
+use dataverse experiments;
+
+create type TwitterUserType as closed {
+ screen-name: string,
+ lang: string,
+ friends_count: int32,
+ statuses_count: int32,
+ name: string,
+ followers_count: int32
+}
+
+create type TweetMessageType as closed {
+ tweetid: int64,
+ user: TwitterUserType,
+ sender-location: point,
+ send-time: datetime,
+ referred-topics: {{ string }},
+ message-text: string,
+
+ btree-extra-field1: int32,
+ btree-extra-field2: int32,
+ btree-extra-field3: int32,
+ btree-extra-field4: int32,
+ btree-extra-field5: int32,
+ btree-extra-field6: int32,
+ btree-extra-field7: int32,
+ btree-extra-field8: int32,
+ dummy-size-adjuster: string // 357
+}
\ No newline at end of file
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/count.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/count.aql
new file mode 100644
index 0000000..a913831
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/count.aql
@@ -0,0 +1,4 @@
+use dataverse experiments;
+
+let $count := count(for $t in dataset Tweets return $t.tweetid)
+return $count;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_dhbtree.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_dhbtree.aql
new file mode 100644
index 0000000..755e5d7
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_dhbtree.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index dhbtreeLocation on Tweets(sender-location) type dhbtree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_dhvbtree.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_dhvbtree.aql
new file mode 100644
index 0000000..b089c37
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_dhvbtree.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index dhvbtreeLocation on Tweets(sender-location) type dhvbtree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_rtree.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_rtree.aql
new file mode 100644
index 0000000..f46a27a
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_rtree.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index rtreeLocation on Tweets(sender-location) type rtree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_shbtree.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_shbtree.aql
new file mode 100644
index 0000000..d2bbe28
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_shbtree.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index shbtreeLocation on Tweets(sender-location) type shbtree(-180.0, -90.0, 180.0, 90.0);
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_sif.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_sif.aql
new file mode 100644
index 0000000..fce9298
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_1_sif.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create index sifLocation on Tweets(sender-location) type sif(-180.0, -90.0, 180.0, 90.0);
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3.aql
new file mode 100644
index 0000000..78b63c6
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3.aql
@@ -0,0 +1,3 @@
+use dataverse experiments;
+create dataset Tweets(TweetMessageType) primary key tweetid;
+create dataset JoinSeedTweets(TweetMessageType) primary key tweetid;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_dhbtree.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_dhbtree.aql
new file mode 100644
index 0000000..36060d7
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_dhbtree.aql
@@ -0,0 +1,2 @@
+use dataverse experiments;
+create index dhbtreeLocation on Tweets(sender-location) type dhbtree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_dhvbtree.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_dhvbtree.aql
new file mode 100644
index 0000000..2369814
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_dhvbtree.aql
@@ -0,0 +1,2 @@
+use dataverse experiments;
+create index dhvbtreeLocation on Tweets(sender-location) type dhvbtree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_rtree.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_rtree.aql
new file mode 100644
index 0000000..d46cd20
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_rtree.aql
@@ -0,0 +1,2 @@
+use dataverse experiments;
+create index rtreeLocation on Tweets(sender-location) type rtree;
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_shbtree.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_shbtree.aql
new file mode 100644
index 0000000..4f83444
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_shbtree.aql
@@ -0,0 +1,2 @@
+use dataverse experiments;
+create index shbtreeLocation on Tweets(sender-location) type shbtree(-180.0, -90.0, 180.0, 90.0);
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_sif.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_sif.aql
new file mode 100644
index 0000000..7faf699
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_create_sif.aql
@@ -0,0 +1,2 @@
+use dataverse experiments;
+create index sifLocation on Tweets(sender-location) type sif(-180.0, -90.0, 180.0, 90.0);
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_pidx_load.aql b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_pidx_load.aql
new file mode 100644
index 0000000..dce43c5
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/aql/spatial_3_pidx_load.aql
@@ -0,0 +1,26 @@
+use dataverse experiments;
+
+load dataset JoinSeedTweets
+using "org.apache.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="128.195.9.22:///scratch/youngsk2/spatial-index-experiment/data/QuerySeedTweets10K-from-SyntheticTweets100M-psi27-pid0.adm"),("format"="adm"));
+
+/* for testing */
+/*
+load dataset Tweets
+using "org.apache.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="128.195.9.22:///scratch/youngsk2/spatial-index-experiment/data/SyntheticTweets2M-psi27-pid0.adm"),("format"="adm"));
+*/
+
+/* for measurement */
+load dataset Tweets
+using "org.apache.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"=
+"128.195.9.22:///scratch/youngsk2/spatial-index-experiment/data/SyntheticTweets100M-psi27-pid0.adm,
+128.195.9.23:///scratch/youngsk2/spatial-index-experiment/data/SyntheticTweets100M-psi26-pid1.adm,
+128.195.9.24:///scratch/youngsk2/spatial-index-experiment/data/SyntheticTweets100M-psi25-pid2.adm,
+128.195.9.25:///scratch/youngsk2/spatial-index-experiment/data/SyntheticTweets100M-psi24-pid3.adm,
+128.195.9.26:///scratch/youngsk2/spatial-index-experiment/data/SyntheticTweets100M-psi23-pid4.adm,
+128.195.9.27:///scratch/youngsk2/spatial-index-experiment/data/SyntheticTweets100M-psi22-pid5.adm,
+128.195.9.28:///scratch/youngsk2/spatial-index-experiment/data/SyntheticTweets100M-psi21-pid6.adm,
+128.195.9.29:///scratch/youngsk2/spatial-index-experiment/data/SyntheticTweets100M-psi20-pid7.adm"),
+("format"="adm"));
\ No newline at end of file
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/balloon.c b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/balloon.c
new file mode 100644
index 0000000..d109be8
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/balloon.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <sys/mman.h>
+#include <unistd.h>
+#include <stdint.h>
+
+ int main() {
+
+ void *mem;
+ int err;
+ uint64_t size = 4.5 * 1024 * 1024;
+ size *= 1024;
+
+ mem = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+ printf ("%d\n", mem);
+ err = mlock(mem, size);
+ printf ("err is %d\n", err);
+ while(1) {
+ sleep(10000);
+ }
+ return 0;
+ }
+
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/1node.xml b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/1node.xml
new file mode 100644
index 0000000..39c386f
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/1node.xml
@@ -0,0 +1,39 @@
+<!--
+ ! Copyright 2009-2013 by The Regents of the University of California
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! you may obtain a copy of the License from
+ !
+ ! http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ !-->
+<cluster xmlns="cluster">
+ <name>1node</name>
+ <username>jenkins</username>
+ <working_dir>
+ <dir>/home/jenkins/asterixdb/working</dir>
+ <NFS>true</NFS>
+ </working_dir>
+ <log_dir>/home/jenkins/asterix/logs</log_dir>
+ <txn_log_dir>/home/jenkins/asterix/txnlogs</txn_log_dir>
+ <iodevices>/home/jenkins/asterix</iodevices>
+ <store>storage</store>
+ <java_home>/usr/lib/jvm/jre-1.8.0</java_home>
+ <master_node>
+ <id>master</id>
+ <cluster_ip>127.0.0.1</cluster_ip>
+ <cluster_port>1099</cluster_port>
+ <client_ip>127.0.0.1</client_ip>
+ <client_port>1098</client_port>
+ <http_port>8888</http_port>
+ </master_node>
+ <node>
+ <id>node1</id>
+ <cluster_ip>127.0.0.1</cluster_ip>
+ </node>
+</cluster>
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/2node.xml b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/2node.xml
new file mode 100644
index 0000000..bc027c4
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/2node.xml
@@ -0,0 +1,44 @@
+<!--
+ ! Copyright 2009-2013 by The Regents of the University of California
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! you may obtain a copy of the License from
+ !
+ ! http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ !-->
+<cluster xmlns="cluster">
+ <name>2node</name>
+ <username>youngsk2</username>
+ <working_dir>
+ <dir>/home/youngsk2/asterixdb/working</dir>
+ <NFS>true</NFS>
+ </working_dir>
+ <log_dir>/mnt/data/sde/youngsk2/asterix/logs</log_dir>
+ <txn_log_dir>/lv_scratch/scratch/youngsk2/asterix/txnlogs</txn_log_dir>
+ <iodevices>/mnt/data/sdb/youngsk2/asterix,/mnt/data/sdc/youngsk2/asterix,/mnt/data/sdd/youngsk2/asterix</iodevices>
+ <store>storage</store>
+ <java_home>/home/youngsk2/jdk1.7.0_65</java_home>
+ <master_node>
+ <id>master</id>
+ <cluster_ip>128.195.9.21</cluster_ip>
+ <cluster_port>1099</cluster_port>
+ <client_ip>128.195.9.21</client_ip>
+ <client_port>1098</client_port>
+ <http_port>8888</http_port>
+ </master_node>
+ <node>
+ <id>node1</id>
+ <cluster_ip>128.195.9.22</cluster_ip>
+ </node>
+ <node>
+ <id>node2</id>
+ <cluster_ip>128.195.9.23</cluster_ip>
+ </node>
+</cluster>
+
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/4node.xml b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/4node.xml
new file mode 100644
index 0000000..aabb3f5
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/4node.xml
@@ -0,0 +1,52 @@
+<!--
+ ! Copyright 2009-2013 by The Regents of the University of California
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! you may obtain a copy of the License from
+ !
+ ! http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ !-->
+<cluster xmlns="cluster">
+ <name>4node</name>
+ <username>youngsk2</username>
+ <working_dir>
+ <dir>/home/youngsk2/asterixdb/working</dir>
+ <NFS>true</NFS>
+ </working_dir>
+ <log_dir>/mnt/data/sde/youngsk2/asterix/logs</log_dir>
+ <txn_log_dir>/lv_scratch/scratch/youngsk2/asterix/txnlogs</txn_log_dir>
+ <iodevices>/mnt/data/sdb/youngsk2/asterix,/mnt/data/sdc/youngsk2/asterix,/mnt/data/sdd/youngsk2/asterix</iodevices>
+ <store>storage</store>
+ <java_home>/home/youngsk2/jdk1.7.0_65</java_home>
+ <master_node>
+ <id>master</id>
+ <cluster_ip>128.195.9.21</cluster_ip>
+ <cluster_port>1099</cluster_port>
+ <client_ip>128.195.9.21</client_ip>
+ <client_port>1098</client_port>
+ <http_port>8888</http_port>
+ </master_node>
+ <node>
+ <id>node1</id>
+ <cluster_ip>128.195.9.22</cluster_ip>
+ </node>
+ <node>
+ <id>node2</id>
+ <cluster_ip>128.195.9.23</cluster_ip>
+ </node>
+ <node>
+ <id>node3</id>
+ <cluster_ip>128.195.9.24</cluster_ip>
+ </node>
+ <node>
+ <id>node4</id>
+ <cluster_ip>128.195.9.25</cluster_ip>
+ </node>
+</cluster>
+
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/8node.xml b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/8node.xml
new file mode 100644
index 0000000..1586f5a
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/8node.xml
@@ -0,0 +1,68 @@
+<!--
+ ! Copyright 2009-2013 by The Regents of the University of California
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! you may obtain a copy of the License from
+ !
+ ! http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ !-->
+<cluster xmlns="cluster">
+ <name>8node</name>
+ <username>youngsk2</username>
+ <working_dir>
+ <dir>/home/youngsk2/asterixdb/working</dir>
+ <NFS>true</NFS>
+ </working_dir>
+ <log_dir>/mnt/data/sde/youngsk2/asterix/logs</log_dir>
+ <txn_log_dir>/lv_scratch/scratch/youngsk2/asterix/txnlogs</txn_log_dir>
+ <iodevices>/mnt/data/sdb/youngsk2/asterix,/mnt/data/sdc/youngsk2/asterix,/mnt/data/sdd/youngsk2/asterix</iodevices>
+ <store>storage</store>
+ <java_home>/home/youngsk2/jdk1.7.0_65</java_home>
+ <master_node>
+ <id>master</id>
+ <cluster_ip>128.195.9.21</cluster_ip>
+ <cluster_port>1099</cluster_port>
+ <client_ip>128.195.9.21</client_ip>
+ <client_port>1098</client_port>
+ <http_port>8888</http_port>
+ </master_node>
+ <node>
+ <id>node1</id>
+ <cluster_ip>128.195.9.22</cluster_ip>
+ </node>
+ <node>
+ <id>node2</id>
+ <cluster_ip>128.195.9.23</cluster_ip>
+ </node>
+ <node>
+ <id>node3</id>
+ <cluster_ip>128.195.9.24</cluster_ip>
+ </node>
+ <node>
+ <id>node4</id>
+ <cluster_ip>128.195.9.25</cluster_ip>
+ </node>
+ <node>
+ <id>node5</id>
+ <cluster_ip>128.195.9.26</cluster_ip>
+ </node>
+ <node>
+ <id>node6</id>
+ <cluster_ip>128.195.9.27</cluster_ip>
+ </node>
+ <node>
+ <id>node7</id>
+ <cluster_ip>128.195.9.28</cluster_ip>
+ </node>
+ <node>
+ <id>node8</id>
+ <cluster_ip>128.195.9.29</cluster_ip>
+ </node>
+</cluster>
+
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/asterix-configuration.xml b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/asterix-configuration.xml
new file mode 100644
index 0000000..0159194
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/asterix-configuration.xml
@@ -0,0 +1,259 @@
+<!--
+ ! Copyright 2009-2013 by The Regents of the University of California
+ ! Licensed under the Apache License, Version 2.0 (the "License");
+ ! you may not use this file except in compliance with the License.
+ ! you may obtain a copy of the License from
+ !
+ ! http://www.apache.org/licenses/LICENSE-2.0
+ !
+ ! Unless required by applicable law or agreed to in writing, software
+ ! distributed under the License is distributed on an "AS IS" BASIS,
+ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ! See the License for the specific language governing permissions and
+ ! limitations under the License.
+ !-->
+<asterixConfiguration xmlns="asterixconf">
+
+ <property>
+ <name>nc.java.opts</name>
+ <value>-Xms6144m -Xmx7168m</value>
+ <description>JVM parameters for each Node Contoller (NC)</description>
+ </property>
+
+ <property>
+ <name>cc.java.opts</name>
+ <value>-Xms6144m -Xmx6144m</value>
+ <description>JVM parameters for each Cluster Contoller (CC)
+ </description>
+ </property>
+
+ <property>
+ <name>max.wait.active.cluster</name>
+ <value>60</value>
+ <description>Maximum wait (in seconds) for a cluster to be ACTIVE (all nodes are available)
+ before a submitted query/statement can be executed. (Default = 60 seconds)
+ </description>
+ </property>
+
+ <property>
+ <name>storage.buffercache.pagesize</name>
+ <value>131072</value>
+ <description>The page size in bytes for pages in the buffer cache.
+ (Default = "131072" // 128KB)
+ </description>
+ </property>
+
+ <property>
+ <name>storage.buffercache.size</name>
+ <value>3221225472</value>
+ <description>[3GB] The size of memory allocated to the disk buffer cache.
+ The value should be a multiple of the buffer cache page size(Default
+ = "536870912" // 512MB)
+ </description>
+ </property>
+
+ <property>
+ <name>storage.buffercache.maxopenfiles</name>
+ <value>214748364</value>
+ <description>The maximum number of open files in the buffer cache.
+ (Default = "214748364")
+ </description>
+ </property>
+
+ <!-- Buffer size per dataset for in-memory components: 1GB -->
+ <property>
+ <name>storage.memorycomponent.pagesize</name>
+ <value>131072</value>
+ <description>The page size in bytes for pages allocated to memory
+ components. (Default = "131072" // 128KB)
+ </description>
+ </property>
+
+ <property>
+ <name>storage.memorycomponent.numpages</name>
+ <value>8192</value>
+ <description>
+ </description>
+ </property>
+ <!--// Buffer size per dataset for in-memory components -->
+
+ <property>
+ <name>storage.metadata.memorycomponent.numpages</name>
+ <value>64</value>
+ <description>The number of pages to allocate for a memory component.
+ (Default = 64)
+ </description>
+ </property>
+
+ <property>
+ <name>storage.memorycomponent.numcomponents</name>
+ <value>2</value>
+ <description>The number of memory components to be used per lsm index.
+ (Default = 2)
+ </description>
+ </property>
+
+ <property>
+ <name>storage.memorycomponent.globalbudget</name>
+ <value>4399824896</value>
+ <description>[4GB + 8MB]The total size of memory in bytes that the sum of all
+ open memory
+ components cannot exceed. (Default = "536870192" // 512MB)
+ </description>
+ </property>
+
+ <property>
+ <name>storage.lsm.bloomfilter.falsepositiverate</name>
+ <value>0.01</value>
+ <description>The maximum acceptable false positive rate for bloom
+ filters associated with LSM indexes. (Default = "0.01" // 1%)
+ </description>
+ </property>
+
+ <property>
+ <name>txn.log.buffer.numpages</name>
+ <value>2</value>
+ <description>The number of in-memory log buffer pages. (Default = "8")
+ </description>
+ </property>
+
+ <property>
+ <name>txn.log.buffer.pagesize</name>
+ <value>8388608</value>
+ <description>[8MB]The size of pages in the in-memory log buffer. (Default =
+ "524288" // 512KB)
+ </description>
+ </property>
+
+ <property>
+ <name>txn.log.partitionsize</name>
+ <value>2147483648</value>
+ <description>The maximum size of a log file partition allowed before
+ rotating the log to the next partition. (Default = "2147483648" //
+ 2GB)
+ </description>
+ </property>
+
+ <property>
+ <name>txn.log.checkpoint.lsnthreshold</name>
+ <value>67108864</value>
+ <description>The size of the window that the maximum LSN is allowed to
+ be ahead of the checkpoint LSN by. (Default = ""67108864" // 64M)
+ </description>
+ </property>
+
+ <property>
+ <name>txn.log.checkpoint.pollfrequency</name>
+ <value>120</value>
+ <description>The time in seconds between that the checkpoint thread
+ waits between polls. (Default = "120" // 120s)
+ </description>
+ </property>
+
+ <property>
+ <name>txn.log.checkpoint.history</name>
+ <value>0</value>
+ <description>The number of old log partition files to keep before
+ discarding. (Default = "0")
+ </description>
+ </property>
+
+ <property>
+ <name>txn.lock.escalationthreshold</name>
+ <value>1000</value>
+ <description>The number of entity level locks that need to be acquired
+ before the locks are coalesced and escalated into a dataset level
+ lock. (Default = "1000")
+ </description>
+ </property>
+
+ <property>
+ <name>txn.lock.shrinktimer</name>
+ <value>5000</value>
+ <description>The time in milliseconds to wait before deallocating
+ unused lock manager memory. (Default = "5000" // 5s)
+ </description>
+ </property>
+
+ <property>
+ <name>txn.lock.timeout.waitthreshold</name>
+ <value>60000</value>
+ <description>The time in milliseconds to wait before labeling a
+ transaction which has been waiting for a lock timed-out. (Default =
+ "60000" // 60s)
+ </description>
+ </property>
+
+ <property>
+ <name>txn.lock.timeout.sweepthreshold</name>
+ <value>10000</value>
+ <description>The time in milliseconds the timeout thread waits between
+ sweeps to detect timed-out transactions. (Default = "10000" // 10s)
+ </description>
+ </property>
+
+ <property>
+ <name>compiler.sortmemory</name>
+ <value>67108864</value>
+ <description>[64MB]The amount of memory in bytes given to sort operations.
+ (Default = "33554432" // 32mb)
+ </description>
+ </property>
+
+ <property>
+ <name>compiler.joinmemory</name>
+ <value>67108864</value>
+ <description>[64MB]The amount of memory in bytes given to join operations.
+ (Default = "33554432" // 32mb)
+ </description>
+ </property>
+
+ <property>
+ <name>compiler.framesize</name>
+ <value>131072</value>
+ <description>The Hyracks frame size that the compiler configures per
+ job. (Default = "131072" // 128KB)
+ </description>
+ </property>
+
+ <property>
+ <name>web.port</name>
+ <value>19001</value>
+ <description>The port for the ASTERIX web interface. (Default = 19001)
+ </description>
+ </property>
+
+ <property>
+ <name>api.port</name>
+ <value>19002</value>
+ <description>The port for the ASTERIX API server. (Default = 19002)
+ </description>
+ </property>
+
+ <property>
+ <name>log.level</name>
+ <value>ALL</value>
+ <description>The minimum log level to be displayed. (Default = INFO)
+ </description>
+ </property>
+ <property>
+ <name>feed.memory.global.budget</name>
+ <value>1073741824</value>
+ <description>Feed memory budget (1 GB = 1073741824 Bytes)
+ </description>
+ </property>
+
+ <property>
+ <name>feed.pending.work.threshold</name>
+ <value>1000</value>
+ <description>Feed pending work threshold
+ </description>
+ </property>
+
+ <property>
+ <name>feed.max.threshold.period</name>
+ <value>100</value>
+ <description>Feed max threshold period
+ </description>
+ </property>
+</asterixConfiguration>
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/managix-conf.xml b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/managix-conf.xml
new file mode 100644
index 0000000..a21935f
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/configs/managix-conf.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<configuration xmlns="installer">
+ <backup>
+ <hdfs>
+ <version>0.20.2</version>
+ <url></url>
+ </hdfs>
+ <backupDir>/home/youngsk2/managix/clusters/local/working_dir/backup</backupDir>
+ </backup>
+ <zookeeper>
+ <homeDir>/home/youngsk2/managix/.installer/zookeeper_home</homeDir>
+ <clientPort>2900</clientPort>
+ <servers>
+ <java_home>/home/youngsk2/jdk1.7.0_65</java_home>
+ <server>128.195.9.21</server>
+ </servers>
+ </zookeeper>
+</configuration>
\ No newline at end of file
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/1.dgen b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/1.dgen
new file mode 100644
index 0000000..428b3a3
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/1.dgen
@@ -0,0 +1 @@
+127.0.0.1 127.0.0.1:10001
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/2.dgen b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/2.dgen
new file mode 100644
index 0000000..7a51869
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/2.dgen
@@ -0,0 +1,2 @@
+128.195.11.61 128.195.9.22:10001
+128.195.11.62 128.195.9.23:10001
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/4.dgen b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/4.dgen
new file mode 100644
index 0000000..0472cf6
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/4.dgen
@@ -0,0 +1,4 @@
+128.195.11.61 128.195.9.22:10001
+128.195.11.62 128.195.9.23:10001
+128.195.11.63 128.195.9.24:10001
+128.195.11.64 128.195.9.25:10001
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_1.dgen b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_1.dgen
new file mode 100644
index 0000000..e671eca
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_1.dgen
@@ -0,0 +1,8 @@
+128.195.9.30 128.195.9.22:10001
+128.195.9.30 128.195.9.23:10001
+128.195.9.21 128.195.9.24:10001
+128.195.9.21 128.195.9.25:10001
+128.195.11.54 128.195.9.26:10001
+128.195.11.54 128.195.9.27:10001
+128.195.11.55 128.195.9.28:10001
+128.195.11.55 128.195.9.29:10001
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_2.dgen b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_2.dgen
new file mode 100644
index 0000000..e82412a
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_2.dgen
@@ -0,0 +1,16 @@
+128.195.9.30 128.195.9.22:10001
+128.195.9.30 128.195.9.23:10001
+128.195.9.21 128.195.9.24:10001
+128.195.9.21 128.195.9.25:10001
+128.195.11.54 128.195.9.26:10001
+128.195.11.54 128.195.9.27:10001
+128.195.11.55 128.195.9.28:10001
+128.195.11.55 128.195.9.29:10001
+128.195.11.56 128.195.9.22:10002
+128.195.11.56 128.195.9.23:10002
+128.195.11.57 128.195.9.24:10002
+128.195.11.57 128.195.9.25:10002
+128.195.11.59 128.195.9.26:10002
+128.195.11.59 128.195.9.27:10002
+128.195.11.60 128.195.9.28:10002
+128.195.11.60 128.195.9.29:10002
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_3.dgen b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_3.dgen
new file mode 100644
index 0000000..5846b08
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_3.dgen
@@ -0,0 +1,24 @@
+128.195.9.30 128.195.9.22:10001
+128.195.9.30 128.195.9.23:10001
+128.195.9.21 128.195.9.24:10001
+128.195.9.21 128.195.9.25:10001
+128.195.11.54 128.195.9.26:10001
+128.195.11.54 128.195.9.27:10001
+128.195.11.55 128.195.9.28:10001
+128.195.11.55 128.195.9.29:10001
+128.195.11.56 128.195.9.22:10002
+128.195.11.56 128.195.9.23:10002
+128.195.11.57 128.195.9.24:10002
+128.195.11.57 128.195.9.25:10002
+128.195.11.59 128.195.9.26:10002
+128.195.11.59 128.195.9.27:10002
+128.195.11.60 128.195.9.28:10002
+128.195.11.60 128.195.9.29:10002
+128.195.11.62 128.195.9.22:10003
+128.195.11.62 128.195.9.23:10003
+128.195.11.63 128.195.9.24:10003
+128.195.11.63 128.195.9.25:10003
+128.195.11.64 128.195.9.26:10003
+128.195.11.64 128.195.9.27:10003
+128.195.11.65 128.195.9.28:10003
+128.195.11.65 128.195.9.29:10003
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_4.dgen b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_4.dgen
new file mode 100644
index 0000000..ce6dbb2
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/5_4.dgen
@@ -0,0 +1,32 @@
+128.195.9.30 128.195.9.22:10001
+128.195.9.30 128.195.9.23:10001
+128.195.9.21 128.195.9.24:10001
+128.195.9.21 128.195.9.25:10001
+128.195.11.54 128.195.9.26:10001
+128.195.11.54 128.195.9.27:10001
+128.195.11.55 128.195.9.28:10001
+128.195.11.55 128.195.9.29:10001
+128.195.11.56 128.195.9.22:10002
+128.195.11.56 128.195.9.23:10002
+128.195.11.57 128.195.9.24:10002
+128.195.11.57 128.195.9.25:10002
+128.195.11.59 128.195.9.26:10002
+128.195.11.59 128.195.9.27:10002
+128.195.11.60 128.195.9.28:10002
+128.195.11.60 128.195.9.29:10002
+128.195.11.62 128.195.9.22:10003
+128.195.11.62 128.195.9.23:10003
+128.195.11.63 128.195.9.24:10003
+128.195.11.63 128.195.9.25:10003
+128.195.11.64 128.195.9.26:10003
+128.195.11.64 128.195.9.27:10003
+128.195.11.65 128.195.9.28:10003
+128.195.11.65 128.195.9.29:10003
+128.195.11.66 128.195.9.22:10004
+128.195.11.66 128.195.9.23:10004
+128.195.11.68 128.195.9.24:10004
+128.195.11.68 128.195.9.25:10004
+128.195.11.72 128.195.9.26:10004
+128.195.11.72 128.195.9.27:10004
+128.195.11.86 128.195.9.28:10004
+128.195.11.86 128.195.9.29:10004
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/8.dgen b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/8.dgen
new file mode 100644
index 0000000..8571cbe
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/8.dgen
@@ -0,0 +1,8 @@
+128.195.11.61 128.195.9.22:10001
+128.195.11.62 128.195.9.23:10001
+128.195.11.63 128.195.9.24:10001
+128.195.11.64 128.195.9.25:10001
+128.195.11.65 128.195.9.26:10001
+128.195.11.66 128.195.9.27:10001
+128.195.11.67 128.195.9.28:10001
+128.195.11.68 128.195.9.29:10001
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/8.dqgen b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/8.dqgen
new file mode 100644
index 0000000..8571cbe
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/dgen/8.dqgen
@@ -0,0 +1,8 @@
+128.195.11.61 128.195.9.22:10001
+128.195.11.62 128.195.9.23:10001
+128.195.11.63 128.195.9.24:10001
+128.195.11.64 128.195.9.25:10001
+128.195.11.65 128.195.9.26:10001
+128.195.11.66 128.195.9.27:10001
+128.195.11.67 128.195.9.28:10001
+128.195.11.68 128.195.9.29:10001
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/killdrivers.sh b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/killdrivers.sh
new file mode 100644
index 0000000..9e1e7b0
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/killdrivers.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+jps | grep Driver | awk '{print $1}' | xargs kill -9
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/killscreens.sh b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/killscreens.sh
new file mode 100644
index 0000000..9b6e5f9
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/killscreens.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+screen -ls | grep asterix | cut -d. -f1 | awk '{print $1}' | xargs kill -9
+screen -wipe
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/logging.properties b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/logging.properties
new file mode 100644
index 0000000..e3c448c
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/logging.properties
@@ -0,0 +1,84 @@
+#/*
+# Copyright 2009-2013 by The Regents of the University of California
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# you may obtain a copy of the License from
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#*/
+############################################################
+# Default Logging Configuration File
+#
+# You can use a different file by specifying a filename
+# with the java.util.logging.config.file system property.
+# For example java -Djava.util.logging.config.file=myfile
+############################################################
+
+############################################################
+# Global properties
+############################################################
+
+# "handlers" specifies a comma separated list of log Handler
+# classes. These handlers will be installed during VM startup.
+# Note that these classes must be on the system classpath.
+# By default we only configure a ConsoleHandler, which will only
+# show messages at the INFO and above levels.
+
+handlers= java.util.logging.ConsoleHandler
+
+# To also add the FileHandler, use the following line instead.
+
+# handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+
+# Default global logging level.
+# This specifies which kinds of events are logged across
+# all loggers. For any given facility this global level
+# can be overriden by a facility specific level
+# Note that the ConsoleHandler also has a separate level
+# setting to limit messages printed to the console.
+
+.level= INFO
+# .level= INFO
+# .level= FINE
+# .level = FINEST
+
+############################################################
+# Handler specific properties.
+# Describes specific configuration info for Handlers.
+############################################################
+
+# default file output is in user's home directory.
+
+# java.util.logging.FileHandler.pattern = %h/java%u.log
+# java.util.logging.FileHandler.limit = 50000
+# java.util.logging.FileHandler.count = 1
+# java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
+
+# Limit the message that are printed on the console to FINE and above.
+
+java.util.logging.ConsoleHandler.level = INFO
+java.util.logging.ConsoleHandler.formatter = org.apache.asterix.experiment.logging.ExperimentLogFormatter
+#java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+
+############################################################
+# Facility specific properties.
+# Provides extra control for each logger.
+############################################################
+
+# For example, set the com.xyz.foo logger to only log SEVERE
+# messages:
+
+
+#org.apache.asterix.test.level = INFO
+#org.apache.asterix.level = INFO
+#org.apache.hyracks.algebricks.level = FINE
+#org.apache.hyracks.level = INFO
+#org.apache.asterix.test = INFO
+#org.apache.asterix.installer.test = INFO
diff --git a/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/updateMain.sh b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/updateMain.sh
new file mode 100644
index 0000000..9fc1676
--- /dev/null
+++ b/asterix-experiments/src/main/resources/ingestion-experiment-binary-and-configs/updateMain.sh
@@ -0,0 +1,6 @@
+rm -rf /scratch/youngsk2/spatial-index-experiment/ingestion-experiment-root/ingestion-experiment-binary-and-configs/
+unzip /home/youngsk2/spatial-index-experiment/ingestion-experiment-binary-and-configs/ingestion-experiment-binary-and-configs.zip -d /scratch/youngsk2/spatial-index-experiment/ingestion-experiment-root/
+unzip /home/youngsk2/spatial-index-experiment/ingestion-experiment-binary-and-configs/asterix-experiments-0.8.7-SNAPSHOT-binary-assembly.zip -d /scratch/youngsk2/spatial-index-experiment/ingestion-experiment-root/ingestion-experiment-binary-and-configs/;
+rm -rf /scratch/youngsk2/spatial-index-experiment/asterix-instance/* /scratch/youngsk2/spatial-index-experiment/asterix-instance/.installer
+unzip /home/youngsk2/spatial-index-experiment/ingestion-experiment-binary-and-configs/asterix-installer-0.8.7-SNAPSHOT-binary-assembly.zip -d /scratch/youngsk2/spatial-index-experiment/asterix-instance/;
+cp -rf /home/youngsk2/spatial-index-experiment/ingestion-experiment-binary-and-configs/managix-conf.xml /scratch/youngsk2/spatial-index-experiment/asterix-instance/conf/