Adapt MergeBubbleVertex to new graph structure. TODO: check if bubble flip and merge all metadata except kmer
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/.txt.crc b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/.txt.crc
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-0.crc b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-0.crc
new file mode 100644
index 0000000..95b77c7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-1.crc b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-1.crc
new file mode 100644
index 0000000..abcbef3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-2.crc b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-2.crc
new file mode 100644
index 0000000..3442925
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-3.crc b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-3.crc
new file mode 100644
index 0000000..07c5a22
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-4.crc b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-4.crc
new file mode 100644
index 0000000..0bbcdc7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-5.crc b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-5.crc
new file mode 100644
index 0000000..9acb7e8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-6.crc b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-6.crc
new file mode 100644
index 0000000..d586ca1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-7.crc b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-7.crc
new file mode 100644
index 0000000..8cf5625
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-0 b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-0
new file mode 100755
index 0000000..0e3bb1c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-1 b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-1
new file mode 100755
index 0000000..3dea02e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-2 b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-2
new file mode 100755
index 0000000..0a02ad0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-3 b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-3
new file mode 100755
index 0000000..552db50
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-4 b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-4
new file mode 100755
index 0000000..af3baae
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-5 b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-5
new file mode 100755
index 0000000..1e484f5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-6 b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-6
new file mode 100755
index 0000000..315acfa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-7 b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-7
new file mode 100755
index 0000000..af45025
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/graphviz/result.ps
new file mode 100644
index 0000000..61fa3e4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/graphviz/result.ps
@@ -0,0 +1,767 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.26.3 (20100126.1600)
+%%Title: G
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 656 326
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 620 290 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 14 moveto
+0 144 lineto
+56 144 lineto
+56 14 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 127.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 118 moveto
+56 118 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 101.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 92 moveto
+56 92 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 75.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 66 moveto
+56 66 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 49.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 40 moveto
+56 40 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 23.4 moveto 32 (GAA) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 14 moveto
+140 144 lineto
+196 144 lineto
+196 14 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 127.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 118 moveto
+196 118 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 101.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 92 moveto
+196 92 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 75.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 66 moveto
+196 66 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 49.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 40 moveto
+196 40 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 23.4 moveto 31 (AGA) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 79 moveto
+77.39 79 106.37 79 129.53 79 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 82.5 moveto
+139.71 79 lineto
+129.71 75.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 82.5 moveto
+139.71 79 lineto
+129.71 75.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 84.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 62.99 moveto
+133.87 60.51 127.87 58.33 122 57 curveto
+101.2 52.28 94.8 52.28 74 57 curveto
+71.34 57.6 68.65 58.38 65.99 59.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 56.09 moveto
+56.49 62.99 lineto
+67.08 62.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 56.09 moveto
+56.49 62.99 lineto
+67.08 62.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 62.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 556 0 moveto
+556 130 lineto
+612 130 lineto
+612 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+570 113.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 556 104 moveto
+612 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+570 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 556 78 moveto
+612 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+564 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 556 52 moveto
+612 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 556 26 moveto
+612 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+570 9.4 moveto 28 (CTA) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.27 78.05 moveto
+269.06 75.6 463.02 69.07 545.75 66.29 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 546.09 69.78 moveto
+555.97 65.94 lineto
+545.86 62.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 546.09 69.78 moveto
+555.97 65.94 lineto
+545.86 62.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 77.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% GTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 91 moveto
+278 221 lineto
+334 221 lineto
+334 91 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+291.5 204.4 moveto 29 (GTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 195 moveto
+334 195 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 178.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 169 moveto
+334 169 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286 152.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 143 moveto
+334 143 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294.5 126.4 moveto 23 (0.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 117 moveto
+334 117 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 100.4 moveto 28 (CTA) alignedtext
+grestore
+% AGA->GTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.25 114.72 moveto
+201.7 120.06 207.69 125.08 214 129 curveto
+230.31 139.14 250.6 145.62 267.97 149.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 267.3 153.12 moveto
+277.81 151.81 lineto
+268.78 146.28 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 267.3 153.12 moveto
+277.81 151.81 lineto
+268.78 146.28 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 152.4 moveto 46 (RF: [0]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 101 moveto
+416 231 lineto
+472 231 lineto
+472 101 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 214.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 205 moveto
+472 205 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 188.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 179 moveto
+472 179 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 162.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 153 moveto
+472 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 136.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 127 moveto
+472 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 110.4 moveto 28 (ATA) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 472.11 115.15 moveto
+477.4 108.41 483.38 102.09 490 97 curveto
+506.26 84.5 527.71 76.71 546.01 71.95 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 546.89 75.33 moveto
+555.8 69.6 lineto
+545.26 68.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 546.89 75.33 moveto
+555.8 69.6 lineto
+545.26 68.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+491 102.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->GTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 415.89 151.63 moveto
+410.11 149.3 403.97 147.24 398 146 curveto
+380.54 142.37 360.94 143.77 344.32 146.51 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 343.59 143.09 moveto
+334.41 148.36 lineto
+344.88 149.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 343.59 143.09 moveto
+334.41 148.36 lineto
+344.88 149.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 151.4 moveto 46 (FR: [0]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 556 152 moveto
+556 282 lineto
+612 282 lineto
+612 152 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 152 moveto
+556 282 lineto
+612 282 lineto
+612 152 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+569.5 265.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 256 moveto
+612 256 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+565.5 239.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 230 moveto
+612 230 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+564 213.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 204 moveto
+612 204 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572.5 187.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 178 moveto
+612 178 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+569.5 161.4 moveto 29 (AAT) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 472.23 187.46 moveto
+477.9 191.06 483.97 194.44 490 197 curveto
+507.43 204.39 527.87 209.16 545.23 212.18 curveto
+stroke
+0 1 1 edgecolor
+newpath 545.16 215.71 moveto
+555.59 213.84 lineto
+546.27 208.8 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 545.16 215.71 moveto
+555.59 213.84 lineto
+546.27 208.8 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+490 215.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 555.99 54.5 moveto
+550.1 52.51 543.88 50.56 538 49 curveto
+457.32 27.61 435.11 15.24 352 23 curveto
+289.86 28.8 271.91 25.73 214 49 curveto
+210.99 50.21 207.97 51.63 205 53.17 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 203.22 50.16 moveto
+196.25 58.14 lineto
+206.68 56.24 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 203.22 50.16 moveto
+196.25 58.14 lineto
+206.68 56.24 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 28.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 556 98.57 moveto
+550.35 104.4 544.23 110.14 538 115 curveto
+532.87 119 505.2 133.89 481.2 146.56 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 479.45 143.53 moveto
+472.24 151.28 lineto
+482.72 149.72 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 479.45 143.53 moveto
+472.24 151.28 lineto
+482.72 149.72 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+491 146.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% GTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 277.95 124.85 moveto
+272.36 119.75 266.27 114.88 260 111 curveto
+243.54 100.8 223.39 93.32 206.15 88.17 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 206.96 84.77 moveto
+196.39 85.41 lineto
+205.06 91.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 206.96 84.77 moveto
+196.39 85.41 lineto
+205.06 91.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 116.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% GTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 334.13 161.58 moveto
+340.01 162.55 346.19 163.43 352 164 curveto
+369.48 165.7 388.91 166.31 405.39 166.45 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 405.74 169.95 moveto
+415.75 166.48 lineto
+405.76 162.95 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 405.74 169.95 moveto
+415.75 166.48 lineto
+405.76 162.95 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 171.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 555.86 186.3 moveto
+550.36 181.84 544.33 177.81 538 175 curveto
+520.88 167.4 500.31 164.79 482.78 164.23 curveto
+stroke
+0 0 0 edgecolor
+newpath 482.36 160.73 moveto
+472.32 164.12 lineto
+482.29 167.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 482.36 160.73 moveto
+472.32 164.12 lineto
+482.29 167.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+491.5 180.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 656 326
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/txt b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/txt
new file mode 100755
index 0000000..e5b5c58
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleMerge/CTA_GTA_FR_RF/txt
@@ -0,0 +1,6 @@
+GAA	{[]	[]	[]	[{AGA:[1]}]	{5':[], ~5':[]}GAA	1.0x}
+ATA	{[]	[{CTA:[1]}, {GTA:[0]}]	[]	[{AAT:[1]}]	{5':[], ~5':[]}ATA	1.0x}
+GTA	{[]	[{ATA:[1]}]	[{AGA:[1]}]	[]	{5':[], ~5':[]}CTA	0.0x}
+CTA	{[]	[{ATA:[1]}]	[{AGA:[1]}]	[]	{5':[], ~5':[]}CTA	1.0x}
+AGA	{[{GAA:[1]}]	[]	[{CTA:[1]}, {GTA:[0]}]	[]	{5':[], ~5':[]}AGA	1.0x}
+AAT	{[{ATA:[1]}]	[]	[]	[]	{5':[(1-0_0)], ~5':[]}AAT	1.0x}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BubbleMergeMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BubbleMergeMessageWritable.java
index 2650b18..43506bc 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BubbleMergeMessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BubbleMergeMessageWritable.java
@@ -3,6 +3,7 @@
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
+import java.util.Comparator;
 
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
@@ -18,6 +19,13 @@
         node = new NodeWritable();
     }
     
+    public void set(BubbleMergeMessageWritable msg){
+        this.setSourceVertexId(msg.getSourceVertexId());
+        this.setFlag(msg.getFlag());
+        this.setMajorVertexId(msg.getMajorVertexId());
+        this.setNode(msg.node);
+    }
+    
     public void reset(){
         super.reset();
         majorVertexId.reset(0);
@@ -54,4 +62,11 @@
         majorVertexId.write(out);
         node.write(out);
     }
+    
+    public static class SortByCoverage implements Comparator<BubbleMergeMessageWritable> {
+        @Override
+        public int compare(BubbleMergeMessageWritable left, BubbleMergeMessageWritable right) {
+            return Float.compare(left.node.getAverageCoverage(), right.node.getAverageCoverage());
+        }
+    }
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java
index 07fb389..ab62877 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java
@@ -24,6 +24,15 @@
         flag = 0;
     }
     
+    @Override
+    public String toString(){
+        StringBuilder sbuilder = new StringBuilder();
+        sbuilder.append('{');
+        sbuilder.append(sourceVertexId.toString());
+        sbuilder.append('}');
+        return sbuilder.toString();
+    }
+    
     public VKmerBytesWritable getSourceVertexId() {
         return sourceVertexId;
     }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
index 166be51..0b9e58c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
@@ -8,15 +8,12 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.hadoop.io.NullWritable;
-
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
 import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
 import edu.uci.ics.genomix.pregelix.io.BubbleMergeMessageWritable;
-import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
@@ -44,7 +41,7 @@
         if (maxIteration < 0)
             maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
         if(dissimilarThreshold == -1)
-            dissimilarThreshold = getContext().getConfiguration().getFloat(DISSIMILARITY_THRESHOLD, (float) 0.05);
+            dissimilarThreshold = getContext().getConfiguration().getFloat(DISSIMILARITY_THRESHOLD, (float) 0.5);
         if(incomingMsg == null)
             incomingMsg = new BubbleMergeMessageWritable();
         if(outgoingMsg == null)
@@ -62,21 +59,21 @@
         switch(neighborToMeDir){
             case MessageFlag.DIR_RF:
             case MessageFlag.DIR_RR:
-                if(hasNextDest()){
+                if(getVertexValue().hasNextDest()){
                     outgoingMsg.setMajorVertexId(incomingMsg.getSourceVertexId());
                     outgoingMsg.setSourceVertexId(getVertexId());
-                    outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
+                    outgoingMsg.setNode(getVertexValue().getNode());
                     destVertexId.setAsCopy(getNextDestVertexId());
                     sendMsg(destVertexId, outgoingMsg);
                 }
                 break;
             case MessageFlag.DIR_FF:
             case MessageFlag.DIR_FR:
-                if(hasPrevDest()){
+                if(getVertexValue().hasPrevDest()){
                     outgoingMsg.setMajorVertexId(incomingMsg.getSourceVertexId());
                     outgoingMsg.setSourceVertexId(getVertexId());
-                    outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
-                    destVertexId.setAsCopy();
+                    outgoingMsg.setNode(getVertexValue().getNode());
+                    destVertexId.setAsCopy(getPrevDestVertexId());
                     sendMsg(destVertexId, outgoingMsg);
                 }
                 break;
@@ -90,13 +87,13 @@
             if(!receivedMsgMap.containsKey(incomingMsg.getMajorVertexId())){
                 receivedMsgList.clear();
                 receivedMsgList.add(incomingMsg);
-                receivedMsgMap.put(incomingMsg.getMajorVertexId(), (ArrayList<MessageWritable>)receivedMsgList.clone());
+                receivedMsgMap.put(incomingMsg.getMajorVertexId(), (ArrayList<BubbleMergeMessageWritable>)receivedMsgList.clone());
             }
             else{
                 receivedMsgList.clear();
                 receivedMsgList.addAll(receivedMsgMap.get(incomingMsg.getMajorVertexId()));
                 receivedMsgList.add(incomingMsg);
-                receivedMsgMap.put(incomingMsg.getMajorVertexId(), (ArrayList<MessageWritable>)receivedMsgList.clone());
+                receivedMsgMap.put(incomingMsg.getMajorVertexId(), (ArrayList<BubbleMergeMessageWritable>)receivedMsgList.clone());
             }
         }
     }
@@ -104,20 +101,20 @@
     public void processSimilarSetToUnchangeSetAndDeletedSet(){
         unchangedSet.clear();
         deletedSet.clear();
-        MessageWritable topCoverageMessage = new MessageWritable();
-        MessageWritable tmpMessage = new MessageWritable();
-        Iterator<MessageWritable> it;
+        BubbleMergeMessageWritable topCoverageMessage = new BubbleMergeMessageWritable();
+        BubbleMergeMessageWritable tmpMessage = new BubbleMergeMessageWritable();
+        Iterator<BubbleMergeMessageWritable> it;
         while(!receivedMsgList.isEmpty()){
             it = receivedMsgList.iterator();
             topCoverageMessage.set(it.next());
             it.remove(); //delete topCoverage node
             while(it.hasNext()){
                 tmpMessage.set(it.next());
-                //compute the similarity  
+                //compute the similarity  TODO take care of if flip
                 float fracDissimilar = topCoverageMessage.getSourceVertexId().fracDissimilar(tmpMessage.getSourceVertexId());
                 if(fracDissimilar < dissimilarThreshold){ //If similar with top node, delete this node and put it in deletedSet 
                     //add coverage to top node
-                    topCoverageMessage.mergeCoverage(tmpMessage);
+                    topCoverageMessage.getNode().mergeCoverage(tmpMessage.getNode());
                     deletedSet.add(tmpMessage);
                     it.remove();
                 }
@@ -127,16 +124,16 @@
     }
     
     public void processUnchangedSet(){
-        for(MessageWritable msg : unchangedSet){
+        for(BubbleMergeMessageWritable msg : unchangedSet){
             outFlag = MessageFlag.UNCHANGE;
             outgoingMsg.setFlag(outFlag);
-            outgoingMsg.setAverageCoverage(msg.getAverageCoverage());
+            outgoingMsg.setNode(msg.getNode());
             sendMsg(msg.getSourceVertexId(), outgoingMsg);
         }
     }
     
     public void processDeletedSet(){
-        for(MessageWritable msg : deletedSet){
+        for(BubbleMergeMessageWritable msg : deletedSet){
             outFlag = MessageFlag.KILL;
             outgoingMsg.setFlag(outFlag);
             sendMsg(msg.getSourceVertexId(), outgoingMsg);
@@ -163,10 +160,9 @@
             /** aggregate bubble nodes and grouped by major vertex **/ 
             aggregateBubbleNodesByMajorNode(msgIterator);
             
-            
             for(VKmerBytesWritable prevId : receivedMsgMap.keySet()){
                 if(receivedMsgList.size() > 1){ // filter bubble
-                    /** for each startVertex, sort the node by decreasing order of coverage **/
+                    /** for each majorVertex, sort the node by decreasing order of coverage **/
                     receivedMsgList = receivedMsgMap.get(prevId);
                     Collections.sort(receivedMsgList, new BubbleMergeMessageWritable.SortByCoverage());
                     
@@ -185,7 +181,7 @@
                     broadcaseKillself();
                 } else if(incomingMsg.getFlag() == MessageFlag.UNCHANGE){
                     /** update average coverage **/
-                    getVertexValue().setAvgCoverage(incomingMsg.getAverageCoverage());
+                    getVertexValue().setAvgCoverage(incomingMsg.getNode().getAverageCoverage());
                 }
             }
         } else if(getSuperstep() == 5){
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeSmallTestSuite.java
deleted file mode 100644
index eb8e268..0000000
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeSmallTestSuite.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright 2009-2010 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.
- */
-package edu.uci.ics.genomix.pregelix.JobRun;
-
-import java.io.BufferedReader;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.logging.Logger;
-
-import junit.framework.Test;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hdfs.MiniDFSCluster;
-import org.apache.hadoop.mapred.JobConf;
-
-import edu.uci.ics.pregelix.core.jobgen.clusterconfig.ClusterConfig;
-import edu.uci.ics.pregelix.core.util.PregelixHyracksIntegrationUtil;
-
-@SuppressWarnings("deprecation")
-public class BubbleMergeSmallTestSuite extends TestSuite {
-    private static final Logger LOGGER = Logger.getLogger(BubbleMergeSmallTestSuite.class.getName());
-
-    public static final String PreFix = "data/actual/bubbleadd/BubbleAddGraph/bin"; 
-    public static final String[] TestDir = { PreFix + File.separator
-    + "5"};
-    private static final String ACTUAL_RESULT_DIR = "data/actual/bubblemerge";
-    private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
-    private static final String PATH_TO_CLUSTER_STORE = "src/test/resources/cluster/stores.properties";
-    private static final String PATH_TO_CLUSTER_PROPERTIES = "src/test/resources/cluster/cluster.properties";
-    private static final String PATH_TO_JOBS = "src/test/resources/jobs/";
-    private static final String PATH_TO_ONLY = "src/test/resources/only_bubblemerge.txt";
-
-    public static final String HDFS_INPUTPATH = "/PathTestSet";
-
-    private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
-    private MiniDFSCluster dfsCluster;
-
-    private JobConf conf = new JobConf();
-    private int numberOfNC = 2;
-
-    public void setUp() throws Exception {
-        ClusterConfig.setStorePath(PATH_TO_CLUSTER_STORE);
-        ClusterConfig.setClusterPropertiesPath(PATH_TO_CLUSTER_PROPERTIES);
-        cleanupStores();
-        PregelixHyracksIntegrationUtil.init();
-        LOGGER.info("Hyracks mini-cluster started");
-        FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
-        FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
-        startHDFS();
-    }
-
-    private void startHDFS() throws IOException {
-        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/core-site.xml"));
-        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/mapred-site.xml"));
-        conf.addResource(new Path(PATH_TO_HADOOP_CONF + "/hdfs-site.xml"));
-        FileSystem lfs = FileSystem.getLocal(new Configuration());
-        lfs.delete(new Path("build"), true);
-        System.setProperty("hadoop.log.dir", "logs");
-        dfsCluster = new MiniDFSCluster(conf, numberOfNC, true, null);
-        FileSystem dfs = FileSystem.get(conf);
-
-        for (String testDir : TestDir) {
-            File src = new File(testDir);
-            Path dest = new Path(HDFS_INPUTPATH + File.separator + src.getName());
-            dfs.mkdirs(dest);
-            //src.listFiles()
-            //src.listFiles((FilenameFilter)(new WildcardFileFilter("part*")))
-            for (File f : src.listFiles()) {
-                dfs.copyFromLocalFile(new Path(f.getAbsolutePath()), dest);
-            }
-        }
-
-        DataOutputStream confOutput = new DataOutputStream(new FileOutputStream(new File(HADOOP_CONF_PATH)));
-        conf.writeXml(confOutput);
-        confOutput.flush();
-        confOutput.close();
-    }
-
-    private void cleanupStores() throws IOException {
-        FileUtils.forceMkdir(new File("teststore"));
-        FileUtils.forceMkdir(new File("build"));
-        FileUtils.cleanDirectory(new File("teststore"));
-        FileUtils.cleanDirectory(new File("build"));
-    }
-
-    /**
-     * cleanup hdfs cluster
-     */
-    private void cleanupHDFS() throws Exception {
-        dfsCluster.shutdown();
-    }
-
-    public void tearDown() throws Exception {
-        PregelixHyracksIntegrationUtil.deinit();
-        LOGGER.info("Hyracks mini-cluster shut down");
-        cleanupHDFS();
-    }
-
-    public static Test suite() throws Exception {
-        List<String> onlys = getFileList(PATH_TO_ONLY);
-        File testData = new File(PATH_TO_JOBS);
-        File[] queries = testData.listFiles();
-        BubbleMergeSmallTestSuite testSuite = new BubbleMergeSmallTestSuite();
-        testSuite.setUp();
-        boolean onlyEnabled = false;
-        FileSystem dfs = FileSystem.get(testSuite.conf);
-
-        if (onlys.size() > 0) {
-            onlyEnabled = true;
-        }
-
-        for (File qFile : queries) {
-            if (qFile.isFile()) {
-                if (onlyEnabled && !isInList(onlys, qFile.getName())) {
-                    continue;
-                } else {
-                    for (String testPathStr : TestDir) {
-                        File testDir = new File(testPathStr);
-                        String resultFileName = ACTUAL_RESULT_DIR + File.separator + jobExtToResExt(qFile.getName())
-                                + File.separator + "bin" + File.separator + testDir.getName();
-                        String textFileName = ACTUAL_RESULT_DIR + File.separator + jobExtToResExt(qFile.getName())
-                                + File.separator + "txt" + File.separator + testDir.getName();
-                        String graphvizFileName = ACTUAL_RESULT_DIR + File.separator + jobExtToResExt(qFile.getName())
-                                + File.separator + "graphviz" + File.separator + testDir.getName();
-                        testSuite.addTest(new BasicSmallTestCase(HADOOP_CONF_PATH, qFile.getName(), qFile
-                                .getAbsolutePath().toString(), dfs,
-                                HDFS_INPUTPATH + File.separator + testDir.getName(), resultFileName, textFileName, graphvizFileName));
-                    }
-                }
-            }
-        }
-        return testSuite;
-    }
-
-    /**
-     * Runs the tests and collects their result in a TestResult.
-     */
-    @Override
-    public void run(TestResult result) {
-        try {
-            int testCount = countTestCases();
-            for (int i = 0; i < testCount; i++) {
-                // cleanupStores();
-                Test each = this.testAt(i);
-                if (result.shouldStop())
-                    break;
-                runTest(each, result);
-            }
-            tearDown();
-        } catch (Exception e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    protected static List<String> getFileList(String ignorePath) throws FileNotFoundException, IOException {
-        BufferedReader reader = new BufferedReader(new FileReader(ignorePath));
-        String s = null;
-        List<String> ignores = new ArrayList<String>();
-        while ((s = reader.readLine()) != null) {
-            ignores.add(s);
-        }
-        reader.close();
-        return ignores;
-    }
-
-    private static String jobExtToResExt(String fname) {
-        int dot = fname.lastIndexOf('.');
-        return fname.substring(0, dot);
-    }
-
-    private static boolean isInList(List<String> onlys, String name) {
-        for (String only : onlys)
-            if (name.indexOf(only) >= 0)
-                return true;
-        return false;
-    }
-
-}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeTestSuite.java
new file mode 100644
index 0000000..f0f4b91
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleMergeTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class BubbleMergeTestSuite extends BasicGraphCleanTestSuite{
+
+    public static Test suite() throws Exception {
+        String pattern ="BubbleMerge";
+        String testSet[] = {"CTA_GTA_FR_RF"};
+        init(pattern, testSet);
+        BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+        return makeTestSuite(testSuite);
+    }
+}