Merge branch 'master' into anbangx/backupMergingWithMaster
diff --git a/.gitignore b/.gitignore
index 0517ac2..9ee7a8b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,6 @@
build
edu.uci.ics.hyracks.control.nc.NodeControllerService
exception
-expected
teststore1
teststore2
dev1
diff --git a/genomix/HyracksCodeFormatProfile.xml b/genomix/HyracksCodeFormatProfile.xml
new file mode 100644
index 0000000..2cde66d
--- /dev/null
+++ b/genomix/HyracksCodeFormatProfile.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<profiles version="11">
+<profile kind="CodeFormatterProfile" name="HyracksCodeFormatProfile" version="11">
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.compiler.source" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="48"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="9999"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="49"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+</profile>
+</profiles>
diff --git a/genomix/genomix-data/.settings/org.eclipse.core.resources.prefs b/genomix/genomix-data/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..609d3ca
--- /dev/null
+++ b/genomix/genomix-data/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/resources=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/<project>=UTF-8
diff --git a/genomix/genomix-data/.settings/org.eclipse.jdt.core.prefs b/genomix/genomix-data/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ec4300d
--- /dev/null
+++ b/genomix/genomix-data/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/genomix/genomix-data/.settings/org.eclipse.m2e.core.prefs b/genomix/genomix-data/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/genomix/genomix-data/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/genomix/genomix-data/HyracksCodeFormatProfile.xml b/genomix/genomix-data/HyracksCodeFormatProfile.xml
new file mode 100644
index 0000000..2cde66d
--- /dev/null
+++ b/genomix/genomix-data/HyracksCodeFormatProfile.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<profiles version="11">
+<profile kind="CodeFormatterProfile" name="HyracksCodeFormatProfile" version="11">
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.compiler.source" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="48"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="9999"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.5"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="49"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+</profile>
+</profiles>
diff --git a/genomix/genomix-data/pom.xml b/genomix/genomix-data/pom.xml
new file mode 100644
index 0000000..fcec760
--- /dev/null
+++ b/genomix/genomix-data/pom.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>genomix-data</artifactId>
+ <name>genomix-data</name>
+
+ <parent>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>genomix</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ </parent>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.7</source>
+ <target>1.7</target>
+ <fork>true</fork>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-core</artifactId>
+ <version>0.20.2</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/genomix/genomix-data/src/main/assembly/binary-assembly.xml b/genomix/genomix-data/src/main/assembly/binary-assembly.xml
new file mode 100644
index 0000000..68d424a
--- /dev/null
+++ b/genomix/genomix-data/src/main/assembly/binary-assembly.xml
@@ -0,0 +1,19 @@
+<assembly>
+ <id>binary-assembly</id>
+ <formats>
+ <format>zip</format>
+ <format>dir</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/appassembler/bin</directory>
+ <outputDirectory>bin</outputDirectory>
+ <fileMode>0755</fileMode>
+ </fileSet>
+ <fileSet>
+ <directory>target/appassembler/lib</directory>
+ <outputDirectory>lib</outputDirectory>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/KmerUtil.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/KmerUtil.java
new file mode 100644
index 0000000..866d6c5
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/KmerUtil.java
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.data;
+
+import edu.uci.ics.genomix.type.GeneCode;
+
+public class KmerUtil {
+ public static final String empty = "";
+
+ public static int getByteNumFromK(int k) {
+ int x = k / 4;
+ if (k % 4 != 0) {
+ x += 1;
+ }
+ return x;
+ }
+
+ public static byte reverseKmerByte(byte k) {
+ int x = (((k >> 2) & 0x33) | ((k << 2) & 0xcc));
+ return (byte) (((x >> 4) & 0x0f) | ((x << 4) & 0xf0));
+ }
+
+ public static String recoverKmerFrom(int k, byte[] keyData, int keyStart, int keyLength) {
+ StringBuilder strKmer = new StringBuilder();
+ int byteId = keyStart + keyLength - 1;
+ if (byteId < 0 || k < 1) {
+ return empty;
+ }
+ byte currentbyte = keyData[byteId];
+ for (int geneCount = 0; geneCount < k; geneCount++) {
+ if (geneCount % 4 == 0 && geneCount > 0) {
+ currentbyte = keyData[--byteId];
+ }
+ strKmer.append((char) GeneCode.GENE_SYMBOL[(currentbyte >> ((geneCount % 4) * 2)) & 0x03]);
+ }
+ return strKmer.toString();
+ }
+
+
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/Marshal.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/Marshal.java
new file mode 100644
index 0000000..90def56
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/Marshal.java
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.data;
+
+import java.nio.ByteBuffer;
+
+public class Marshal {
+ public static int getInt(byte[] bytes, int offset) {
+ return ((bytes[offset] & 0xff) << 24) + ((bytes[offset + 1] & 0xff) << 16) + ((bytes[offset + 2] & 0xff) << 8)
+ + ((bytes[offset + 3] & 0xff) << 0);
+ }
+
+ public static long getLong(byte[] bytes, int offset) {
+ long value = 0;
+ for (int i = offset; i < bytes.length && i < offset + 8; i++)
+ {
+ value = (value << 8) + (bytes[i] & 0xff);
+ }
+ return value;
+// return ((bytes[offset] & 0xff) << 56) + ((bytes[offset + 1] & 0xff) << 48) + ((bytes[offset + 2] & 0xff) << 40)
+// + ((bytes[offset + 3] & 0xff) << 32) + ((bytes[offset + 4] & 0xff) << 24) + ((bytes[offset + 5] & 0xff) << 16)
+// + ((bytes[offset + 6] & 0xff) << 8) + ((bytes[offset + 7] & 0xff) << 0);
+ }
+
+ public static float getFloat(byte[] bytes, int offset) {
+ return ByteBuffer.wrap(bytes, offset, 4).getFloat();
+ }
+
+ public static void putInt(int val, byte[] bytes, int offset) {
+ bytes[offset] = (byte)((val >>> 24) & 0xFF);
+ bytes[offset + 1] = (byte)((val >>> 16) & 0xFF);
+ bytes[offset + 2] = (byte)((val >>> 8) & 0xFF);
+ bytes[offset + 3] = (byte)((val >>> 0) & 0xFF);
+ }
+
+ public static void putLong(long val, byte[] bytes, int offset) {
+ ByteBuffer byteBuffer = ByteBuffer.allocate(8);
+ System.arraycopy(byteBuffer.putLong(val).array(), 0, bytes, offset, 8);
+// bytes[offset] = (byte)((val >>> 56) & 0xFF);
+// bytes[offset + 1] = (byte)((val >>> 48) & 0xFF);
+// bytes[offset + 2] = (byte)((val >>> 40) & 0xFF);
+// bytes[offset + 3] = (byte)((val >>> 32) & 0xFF);
+// bytes[offset + 4] = (byte)((val >>> 24) & 0xFF);
+// bytes[offset + 5] = (byte)((val >>> 16) & 0xFF);
+// bytes[offset + 6] = (byte)((val >>> 8) & 0xFF);
+// bytes[offset + 7] = (byte)((val >>> 0) & 0xFF);
+ }
+
+ public static void putFloat(float val, byte[] bytes, int offset) {
+ ByteBuffer byteBuffer = ByteBuffer.allocate(4);
+ System.arraycopy(byteBuffer.putFloat(val).array(), 0, bytes, offset, 4);
+ }
+
+ public static int hashBytes(byte[] bytes, int offset, int length) {
+ int hash = 1;
+ for (int i = offset; i < offset + length; i++)
+ hash = (31 * hash) + (int) bytes[i];
+ return hash;
+ }
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeListWritable.java
new file mode 100644
index 0000000..7a81d89
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeListWritable.java
@@ -0,0 +1,345 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.type;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.hadoop.io.WritableComparable;
+
+import edu.uci.ics.genomix.data.Marshal;
+
+
+public class EdgeListWritable implements WritableComparable<EdgeListWritable>, Serializable, Iterable<EdgeWritable>{
+
+ private static final long serialVersionUID = 1L;
+ private static final int SIZE_INT = 4;
+
+ protected EdgeWritable edgeIter = new EdgeWritable();
+
+ private ArrayList<EdgeWritable> edges;
+
+ public EdgeListWritable() {
+ edges = new ArrayList<EdgeWritable>(1);
+ }
+
+ /**
+ * Set the internal readIDs when the given positionList has readid, position, and mateid set
+ */
+ public EdgeListWritable(EdgeListWritable other) {
+ this();
+ setAsCopy(other);
+ }
+
+ public EdgeListWritable(List<EdgeWritable> otherList) {
+ this();
+ for (EdgeWritable e : otherList) {
+ add(e);
+ }
+ }
+
+ public void setAsCopy(EdgeListWritable otherEdge){
+ reset();
+ edges.addAll(otherEdge.edges);
+ }
+
+ public void reset() {
+ edges.clear();
+ }
+
+ public EdgeWritable get(int i) {
+ return edges.get(i);
+ }
+
+ public boolean add(EdgeWritable element) {
+ return edges.add(new EdgeWritable(element));
+ }
+
+ public EdgeWritable set(int i, EdgeWritable element) {
+ return edges.set(i, element);
+ }
+
+ public boolean isEmpty(){
+ return getCountOfPosition() == 0;
+ }
+
+ public int getCountOfPosition() {
+ return edges.size();
+ }
+
+ public int getLength() {
+ int total = SIZE_INT;
+ for (EdgeWritable e : edges) {
+ total += e.getLength();
+ }
+ return total;
+ }
+
+ public EdgeWritable getEdge(VKmerBytesWritable key){
+ for(EdgeWritable edge : edges){
+ if(edge.getKey().equals(key)){
+ return edge;
+ }
+ }
+ return null;
+ }
+ /**
+ * Return this Edge's representation as a new byte array
+ */
+ public byte[] marshalToByteArray() throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(getLength());
+ DataOutputStream out = new DataOutputStream(baos);
+ write(out);
+ return baos.toByteArray();
+ }
+
+ public void setAsCopy(byte[] data, int offset) {
+ int curOffset = offset;
+ int count = Marshal.getInt(data, offset);
+ curOffset += SIZE_INT;
+ edges.clear();
+ for (int i=0; i < count; i++) {
+ EdgeWritable e = new EdgeWritable();
+ e.setAsCopy(data, curOffset);
+ edges.add(e);
+ curOffset += e.getLength();
+ }
+ }
+
+ public void setAsReference(byte[] data, int offset) {
+ int curOffset = offset;
+ int count = Marshal.getInt(data, offset);
+ curOffset += SIZE_INT;
+ edges.clear();
+ for (int i=0; i < count; i++) {
+ edges.add(new EdgeWritable(data, curOffset));
+ curOffset += edges.get(i).getLength();
+ }
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ out.writeInt(edges.size());
+ for (EdgeWritable e : edges) {
+ e.write(out);
+ }
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ int count = in.readInt();
+ for (int i = 0; i < count; i++) {
+ EdgeWritable e = new EdgeWritable();
+ e.readFields(in);
+ edges.add(e);
+ }
+ }
+
+ /**
+ * initial comparison is based on the edgelist length, then equivalence of the edges' kmers
+ */
+ @Override
+ public int compareTo(EdgeListWritable other) {
+ int result = Integer.compare(edges.size(), other.edges.size());
+ if (result != 0) {
+ return result;
+ }
+ for (int i=0; i < edges.size(); i++) {
+ result = edges.get(i).compareTo(other.edges.get(i));
+ if (result != 0) {
+ return result;
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public int hashCode() {
+ return edges.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (! (o instanceof EdgeListWritable))
+ return false;
+
+ EdgeListWritable ew = (EdgeListWritable) o;
+ return compareTo(ew) == 0;
+ }
+
+ /**
+ * this version of toString sorts the readIds so they're a little easier to see
+ */
+ @Override
+ public String toString() {
+ StringBuilder sbuilder = new StringBuilder();
+ sbuilder.append('[');
+ String delim = "";
+ for (EdgeWritable e : edges) {
+ sbuilder.append(delim).append(e);
+ delim = ", ";
+ }
+ sbuilder.append(']');
+ return sbuilder.toString();
+ }
+
+ @Override
+ public Iterator<EdgeWritable> iterator() {
+ return edges.iterator();
+ }
+
+ /**
+ * return an iterator over the keys of this edgeList. Using the iterator.remove() function will remove the entire edge (not just the keys you're iterating over!)
+ */
+ public Iterator<VKmerBytesWritable> getKeys() {
+ Iterator<VKmerBytesWritable> it = new Iterator<VKmerBytesWritable>() {
+
+ private int currentIndex = 0;
+
+ @Override
+ public boolean hasNext() {
+ return currentIndex < edges.size();
+ }
+
+ @Override
+ public VKmerBytesWritable next() {
+ return edges.get(currentIndex++).getKey();
+ }
+
+ @Override
+ public void remove() {
+ edges.remove(--currentIndex);
+ }
+ };
+ return it;
+ }
+
+ public PositionListWritable getReadIDs(VKmerBytesWritable key) {
+ for (EdgeWritable e : this) {
+ if (e.getKey().equals(key))
+ return e.getReadIDs();
+ }
+ throw new IllegalArgumentException("Cannot get readIDs for VKmer \""+ key +"\". They key was not in the edgeList!");
+ }
+
+
+ public boolean contains(VKmerBytesWritable toFind){
+ Iterator<VKmerBytesWritable> posIterator = this.getKeys();
+ while (posIterator.hasNext()) {
+ if (toFind.equals(posIterator.next()))
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ * remove the first instance of `toRemove`. Uses a linear scan. Throws an
+ * exception if not in this list.
+ */
+ public void remove(VKmerBytesWritable toRemove, boolean ignoreMissing) {
+ Iterator<VKmerBytesWritable> posIterator = this.getKeys();
+ while (posIterator.hasNext()) {
+ if (toRemove.equals(posIterator.next())) {
+ posIterator.remove();
+ return; // break as soon as the element is found
+ }
+ }
+ // element was not found
+ if (!ignoreMissing) {
+ throw new ArrayIndexOutOfBoundsException("the KmerBytesWritable `" + toRemove.toString()
+ + "` was not found in this list.");
+ }
+ }
+
+ public void remove(VKmerBytesWritable toRemove) {
+ remove(toRemove, false);
+ }
+
+ /*
+ * remove the first instance of @toRemove. Uses a linear scan. Throws an exception if not in this list.
+ */
+ public void remove(EdgeWritable toRemove, boolean ignoreMissing) {
+ Iterator<EdgeWritable> edgeIterator = this.iterator();
+ while (edgeIterator.hasNext()) {
+ if (toRemove.equals(edgeIterator.next())) {
+ edgeIterator.remove();
+ return; // found it. return early.
+ }
+ }
+ // element not found.
+ if (!ignoreMissing) {
+ throw new ArrayIndexOutOfBoundsException("the EdgeWritable `" + toRemove.toString()
+ + "` was not found in this list.");
+ }
+ }
+
+ public void remove(EdgeWritable toRemove) {
+ remove(toRemove, false);
+ }
+
+ public void removeSubEdge(EdgeWritable toRemove){
+ Iterator<Long> it = toRemove.readIDIter();
+ while(it.hasNext()){
+ long readId = it.next();
+ this.getReadIDs(toRemove.getKey()).removeReadId(readId);
+ }
+ if(this.getReadIDs(toRemove.getKey()).isEmpty())
+ this.remove(toRemove);
+ }
+
+ /**
+ * Adds all edges in edgeList to me. If I have the same edge as `other`, that entry will be the union of both sets of readIDs.
+ *
+ * NOTE: This function may change the order of the original list!
+ */
+ public void unionUpdate(EdgeListWritable other) {
+ // TODO test this function properly
+ // TODO perhaps there's a more efficient way to do this?
+ HashMap<VKmerBytesWritable, PositionListWritable> unionEdges = new HashMap<VKmerBytesWritable, PositionListWritable>(edges.size() + other.edges.size());
+
+ for (EdgeWritable e : edges) {
+ VKmerBytesWritable key = e.getKey();
+ if (unionEdges.containsKey(key)) {
+ unionEdges.get(key).unionUpdate(e.getReadIDs());
+ }
+ else {
+ unionEdges.put(key, new PositionListWritable(e.getReadIDs())); // make a new copy of their list
+ }
+ }
+ for (EdgeWritable e : other.edges) {
+ VKmerBytesWritable key = e.getKey();
+ if (unionEdges.containsKey(key)) {
+ unionEdges.get(key).unionUpdate(e.getReadIDs());
+ }
+ else {
+ unionEdges.put(key, new PositionListWritable(e.getReadIDs())); // make a new copy of their list
+ }
+ }
+ edges.clear();
+ for (VKmerBytesWritable key : unionEdges.keySet()) {
+ edges.add(new EdgeWritable(key, unionEdges.get(key)));
+ }
+ }
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeWritable.java
new file mode 100644
index 0000000..1c9fd8f
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/EdgeWritable.java
@@ -0,0 +1,246 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.type;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.hadoop.io.WritableComparable;
+
+
+public class EdgeWritable implements WritableComparable<EdgeWritable>, Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ private VKmerBytesWritable key;
+ private PositionListWritable readIDs;
+
+ public EdgeWritable() {
+ key = new VKmerBytesWritable();
+ readIDs = new PositionListWritable();
+ }
+
+ /**
+ * Set the internal readIDs when the given positionList has readid, position, and mateid set
+ */
+ public EdgeWritable(VKmerBytesWritable otherKey, PositionListWritable otherPositions) {
+ this();
+ setAsCopy(otherKey, otherPositions);
+ }
+
+ public EdgeWritable(byte[] newStorage, int newOffset) {
+ this();
+ setAsReference(newStorage, newOffset);
+ }
+
+ public EdgeWritable(EdgeWritable other) {
+ this();
+ setAsCopy(other.key, other.readIDs);
+ }
+
+ public void setAsCopy(EdgeWritable otherEdge){
+ key.setAsCopy(otherEdge.key);
+ readIDs.set(otherEdge.readIDs);
+ }
+
+ /**
+ * Set the key and internal readIDs when the given positionList has readid, position, and mateid set
+ */
+ public void setAsCopy(VKmerBytesWritable otherKey, PositionListWritable otherPositions) {
+ key.setAsCopy(otherKey);
+ setReadIDs(otherPositions);
+ }
+
+ public void setAsCopy(KmerBytesWritable otherKey, PositionListWritable otherPositions) {
+ key.setAsCopy(otherKey);
+ setReadIDs(otherPositions);
+ }
+
+ /**
+ * Set the internal readIDs when the given positionList has readid, position, and mateid set
+ */
+ public void setReadIDs(PositionListWritable otherPositions) {
+ readIDs.reset();
+ for (PositionWritable p : otherPositions) {
+ appendReadID(p);
+ }
+ }
+
+ public void setReadIDs(Set<Long> readIdSet) {
+ readIDs.reset();
+ for (long p : readIdSet) {
+ appendReadID(p);
+ }
+ }
+
+ public void reset() {
+ key.reset(0);
+ readIDs.reset();
+ }
+
+ public VKmerBytesWritable getKey() {
+ return key;
+ }
+
+ public void setKey(VKmerBytesWritable newKey) {
+ key.setAsCopy(newKey);
+ }
+
+ public PositionListWritable getReadIDs() {
+ return readIDs;
+ }
+
+ /**
+ * clear the given PositionWritable of its position & mate info, then append it
+ */
+ public void appendReadID(PositionWritable posn) {
+ readIDs.append((byte)0, posn.getReadId(), 0);
+ }
+
+ public void appendReadID(long readID) {
+ readIDs.append((byte)0, readID, 0);
+ }
+
+ public long[] readIDArray() {
+ return readIDs.toReadIDArray();
+ }
+
+ public Iterator<Long> readIDIter() {
+ Iterator<Long> it = new Iterator<Long>() {
+ private int currentIndex = 0;
+
+ @Override
+ public boolean hasNext() {
+ return currentIndex < readIDs.getCountOfPosition();
+ }
+
+ @Override
+ public Long next() {
+ return new Long(readIDs.getPosition(currentIndex++).getReadId());
+ }
+
+ @Override
+ public void remove() {
+ if (currentIndex <= 0)
+ throw new IllegalStateException("You must advance the iterator using .next() before calling remove()!");
+ readIDs.removePosition(--currentIndex);
+ }
+ };
+ return it;
+ }
+
+
+ public int getLength() {
+ return key.getLength() + readIDs.getLength();
+ }
+
+ /**
+ * Return this Edge's representation as a new byte array
+ */
+ public byte[] marshalToByteArray() throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(getLength());
+ DataOutputStream out = new DataOutputStream(baos);
+ write(out);
+ return baos.toByteArray();
+ }
+
+ public void setAsCopy(byte[] data, int offset) {
+ int curOffset = offset;
+ key.setAsCopy(data, curOffset);
+ curOffset += key.getLength();
+ readIDs.set(data, curOffset);
+ }
+
+ public void setAsReference(byte[] data, int offset) {
+ int curOffset = offset;
+ key.setAsReference(data, curOffset);
+ curOffset += key.getLength();
+ readIDs.setNewReference(data, curOffset);
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ key.write(out);
+ readIDs.write(out);
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ key.readFields(in);
+ readIDs.readFields(in);
+ }
+
+ @Override
+ public int compareTo(EdgeWritable other) {
+ return this.key.compareTo(other.key);
+ }
+
+ @Override
+ public int hashCode() {
+ return this.key.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (! (o instanceof EdgeWritable))
+ return false;
+
+ EdgeWritable ew = (EdgeWritable) o;
+ return key.equals(ew.key) && readIDs.equals(ew.readIDs);
+ }
+
+ public String printReadIdSet(){
+ StringBuilder sbuilder = new StringBuilder();
+ String delim = "";
+ long[] ids = readIDs.toReadIDArray();
+ sbuilder.append("[");
+ if(ids.length > 0){
+ Arrays.sort(ids);
+ for(int i = 0; i < ids.length; i++){
+ sbuilder.append(delim).append(ids[i]);
+ delim = ",";
+ }
+ }
+ sbuilder.append("]");
+ return sbuilder.toString();
+ }
+ /**
+ * this version of toString sorts the readIds so they're a little easier to see
+ */
+ @Override
+ public String toString() {
+ StringBuilder sbuilder = new StringBuilder();
+ sbuilder.append('{');
+ sbuilder.append(key.toString()).append(":[");
+ String delim = "";
+ long[] ids = readIDs.toReadIDArray();
+ Arrays.sort(ids);
+ for (long id : ids) {
+ sbuilder.append(delim).append(id);
+ delim = ",";
+ }
+ sbuilder.append("]}");
+ return sbuilder.toString();
+ }
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/GeneCode.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/GeneCode.java
new file mode 100644
index 0000000..6a5ad7b
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/GeneCode.java
@@ -0,0 +1,96 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.type;
+
+
+public class GeneCode {
+ public final static byte[] GENE_SYMBOL = { 'A', 'C', 'G', 'T' };
+ /**
+ * make sure this 4 ids equal to the sequence id of char in {@GENE_SYMBOL
+ * }
+ */
+ public static final byte A = 0;
+ public static final byte C = 1;
+ public static final byte G = 2;
+ public static final byte T = 3;
+
+ public static byte getCodeFromSymbol(byte ch) {
+ byte r = 0;
+ switch (ch) {
+ case 'A':
+ case 'a':
+ r = A;
+ break;
+ case 'C':
+ case 'c':
+ r = C;
+ break;
+ case 'G':
+ case 'g':
+ r = G;
+ break;
+ case 'T':
+ case 't':
+ r = T;
+ break;
+ }
+ return r;
+ }
+
+ public static byte getPairedGeneCode(byte genecode){
+ if ( genecode < 0 || genecode > 3){
+ throw new IllegalArgumentException("Invalid genecode: " + genecode);
+ }
+ return (byte) (3- genecode);
+ }
+
+ public static byte getPairedCodeFromSymbol(byte ch){
+ return getPairedGeneCode(getCodeFromSymbol(ch));
+ }
+
+ public static byte getSymbolFromCode(byte code) {
+ if (code > 3 || code < 0 ) {
+ throw new IllegalArgumentException("Invalid genecode");
+ }
+ return GENE_SYMBOL[code];
+ }
+
+ public static String reverseComplement(String kmer) {
+ StringBuilder sb = new StringBuilder();
+ for (char letter : kmer.toCharArray()) {
+ sb.append(complement(letter));
+ }
+ return sb.reverse().toString();
+ }
+
+ public static char complement(char ch) {
+ switch (ch) {
+ case 'A':
+ case 'a':
+ return 'T';
+ case 'C':
+ case 'c':
+ return 'G';
+ case 'G':
+ case 'g':
+ return 'C';
+ case 'T':
+ case 't':
+ return 'A';
+ }
+ throw new RuntimeException("Invalid character given in complement: " + ch);
+ }
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
new file mode 100644
index 0000000..4ba12c0
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
@@ -0,0 +1,423 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.type;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+import org.apache.hadoop.io.BinaryComparable;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.io.WritableComparator;
+
+import edu.uci.ics.genomix.data.KmerUtil;
+import edu.uci.ics.genomix.data.Marshal;
+
+/**
+ * Fixed, static-length Kmer used as the key and edge values of each
+ * NodeWritable. Kmer length should be set once during configuration and should
+ * never change.
+ */
+public class KmerBytesWritable extends BinaryComparable implements Serializable, WritableComparable<BinaryComparable> {
+
+ private static final long serialVersionUID = 1L;
+ protected static final byte[] EMPTY_BYTES = {};
+
+ protected static int lettersInKmer;
+ private static int bytesUsed;
+ protected byte[] bytes;
+ protected int offset;
+
+ /**
+ * set the *GLOBAL* kmer length to the given k value.
+ * NOTE: this will invalidate ALL previously created kmers. This function
+ * should be called before any kmers are created
+ */
+ public static void setGlobalKmerLength(int k) {
+ setBytesUsed(KmerUtil.getByteNumFromK(k));
+ lettersInKmer = k;
+ }
+
+ /**
+ * Initialize as empty kmer
+ */
+ public KmerBytesWritable() {
+ bytes = new byte[getBytesUsed()];
+ offset = 0;
+ }
+
+ /**
+ * Copy contents of kmer string
+ */
+ public KmerBytesWritable(String kmer) {
+ this();
+ setByRead(kmer.getBytes(), 0);
+ }
+
+ /**
+ * Set as reference to existing data
+ */
+ public KmerBytesWritable(byte[] newStorage, int newOffset) {
+ setAsReference(newStorage, newOffset);
+ }
+
+ /**
+ * copy kmer in other
+ *
+ * @param other
+ */
+ public KmerBytesWritable(KmerBytesWritable other) {
+ this();
+ setAsCopy(other);
+ }
+
+ /**
+ * copy kmer in other
+ *
+ * @param other
+ */
+ public KmerBytesWritable(VKmerBytesWritable other) {
+ this();
+ setAsCopy(other);
+ }
+
+ /**
+ * Deep copy of the given kmer
+ *
+ * @param other
+ */
+ public void setAsCopy(KmerBytesWritable other) {
+ if (lettersInKmer > 0) {
+ System.arraycopy(other.bytes, other.offset, bytes, offset, getBytesUsed());
+ }
+ }
+
+ /**
+ * Deep copy of the given kmer
+ *
+ * @param other
+ */
+ public void setAsCopy(VKmerBytesWritable other) {
+ if (other.lettersInKmer != lettersInKmer) {
+ throw new IllegalArgumentException("Provided VKmer (" + other + ") is of an incompatible length (was " + other.getKmerLetterLength() + ", should be " + lettersInKmer + ")!");
+ }
+ if (lettersInKmer > 0) {
+ System.arraycopy(other.bytes, other.kmerStartOffset, bytes, offset, getBytesUsed());
+ }
+ }
+
+
+ /**
+ * Deep copy of the given bytes data
+ *
+ * @param newData
+ * @param newOffset
+ */
+ public void setAsCopy(byte[] newData, int newOffset) {
+ if (newData.length - newOffset < getBytesUsed()) {
+ throw new IllegalArgumentException("Requested " + getBytesUsed() + " bytes (k=" + lettersInKmer
+ + ") but buffer has only " + (newData.length - newOffset) + " bytes");
+ }
+ System.arraycopy(newData, newOffset, bytes, offset, getBytesUsed());
+ }
+
+ /**
+ * Point this datablock to the given bytes array It works like the pointer
+ * to new datablock.
+ *
+ * @param newData
+ * @param newOffset
+ */
+ public void setAsReference(byte[] newData, int newOffset) {
+ if (newData.length - newOffset < getBytesUsed()) {
+ throw new IllegalArgumentException("Requested " + getBytesUsed() + " bytes (k=" + lettersInKmer
+ + ") but buffer has only " + (newData.length - newOffset) + " bytes");
+ }
+ bytes = newData;
+ offset = newOffset;
+ }
+
+ /**
+ * Point this datablock to the given kmer's byte array It works like the pointer
+ * to new datablock.
+ *
+ * @param newData
+ * @param offset
+ */
+ public void setAsReference(VKmerBytesWritable other) {
+ if (other.lettersInKmer != lettersInKmer) {
+ throw new IllegalArgumentException("Provided VKmer (" + other + ") is of an incompatible length (was " + other.getKmerLetterLength() + ", should be " + lettersInKmer + ")!");
+ }
+ bytes = other.bytes;
+ offset = other.kmerStartOffset;
+ }
+
+ /**
+ * Get one genecode (A|G|C|T) from the given kmer index e.g. Get the 4th
+ * gene of the kmer ACGTA will return T
+ *
+ * @param pos
+ * @return
+ */
+ public byte getGeneCodeAtPosition(int pos) {
+ if (pos >= lettersInKmer || pos < 0) {
+ throw new ArrayIndexOutOfBoundsException("Gene position (" + pos + ") out of bounds for k=" + lettersInKmer);
+ }
+ return geneCodeAtPosition(pos);
+ }
+
+ /**
+ * unchecked version of getGeneCodeAtPosition. Used when kmerlength is
+ * inaccurate (mid-merge)
+ */
+ private byte geneCodeAtPosition(int pos) {
+ int posByte = pos / 4;
+ int shift = (pos % 4) << 1;
+ return (byte) ((bytes[offset + getBytesUsed() - 1 - posByte] >> shift) & 0x3);
+ }
+
+ public static int getKmerLength() {
+ return lettersInKmer;
+ }
+
+ public static int getBytesPerKmer() {
+ return getBytesUsed();
+ }
+
+ @Override
+ public byte[] getBytes() {
+ return bytes;
+ }
+
+ public int getOffset() {
+ return offset;
+ }
+
+ @Override
+ public int getLength() {
+ return getBytesUsed();
+ }
+
+ /**
+ * Read Kmer from read text into bytes array e.g. AATAG will compress as
+ * [0x000G, 0xATAA]
+ *
+ * @param stringBytes
+ * @param start
+ */
+ @SuppressWarnings("static-access")
+ public void setByRead(byte[] stringBytes, int start) {
+ byte l = 0;
+ int bytecount = 0;
+ int bcount = this.getBytesUsed() - 1;
+ for (int i = start; i < start + lettersInKmer && i < stringBytes.length; i++) {
+ byte code = GeneCode.getCodeFromSymbol(stringBytes[i]);
+ l |= (byte) (code << bytecount);
+ bytecount += 2;
+ if (bytecount == 8) {
+ bytes[offset + bcount--] = l;
+ l = 0;
+ bytecount = 0;
+ }
+ }
+ if (bcount >= 0) {
+ bytes[offset] = l;
+ }
+ }
+
+ /**
+ * Compress Reversed read into bytes array e.g. AATAG will paired to CTATT,
+ * and then compress as [0x000T,0xTATC]
+ *
+ * @param input
+ * array
+ * @param start
+ * position
+ */
+ public void setByReadReverse(byte[] array, int start) {
+ byte l = 0;
+ int bytecount = 0;
+ int bcount = getBytesUsed() - 1;
+ // for (int i = start + kmerlength - 1; i >= 0 && i < array.length; i--)
+ // {
+ for (int i = start + lettersInKmer - 1; i >= start && i < array.length; i--) {
+ byte code = GeneCode.getPairedCodeFromSymbol(array[i]);
+ l |= (byte) (code << bytecount);
+ bytecount += 2;
+ if (bytecount == 8) {
+ bytes[offset + bcount--] = l;
+ l = 0;
+ bytecount = 0;
+ }
+ }
+ if (bcount >= 0) {
+ bytes[offset] = l;
+ }
+ }
+
+ /**
+ * Shift Kmer to accept new char input
+ *
+ * @param c
+ * Input new gene character
+ * @return the shift out gene, in gene code format
+ */
+ public byte shiftKmerWithNextChar(byte c) {
+ return shiftKmerWithNextCode(GeneCode.getCodeFromSymbol(c));
+ }
+
+ /**
+ * Shift Kmer to accept new gene code
+ *
+ * @param c
+ * Input new gene code
+ * @return the shift out gene, in gene code format
+ */
+ public byte shiftKmerWithNextCode(byte c) {
+ byte output = (byte) (bytes[offset + getBytesUsed() - 1] & 0x03);
+ for (int i = getBytesUsed() - 1; i > 0; i--) {
+ byte in = (byte) (bytes[offset + i - 1] & 0x03);
+ bytes[offset + i] = (byte) (((bytes[offset + i] >>> 2) & 0x3f) | (in << 6));
+ }
+ int pos = ((lettersInKmer - 1) % 4) << 1;
+ byte code = (byte) (c << pos);
+ bytes[offset] = (byte) (((bytes[offset] >>> 2) & 0x3f) | code);
+ clearLeadBit();
+ return output;
+ }
+
+ /**
+ * Shift Kmer to accept new input char
+ *
+ * @param c
+ * Input new gene character
+ * @return the shiftout gene, in gene code format
+ */
+ public byte shiftKmerWithPreChar(byte c) {
+ return shiftKmerWithPreCode(GeneCode.getCodeFromSymbol(c));
+ }
+
+ /**
+ * Shift Kmer to accept new gene code
+ *
+ * @param c
+ * Input new gene code
+ * @return the shiftout gene, in gene code format
+ */
+ public byte shiftKmerWithPreCode(byte c) {
+ int pos = ((lettersInKmer - 1) % 4) << 1;
+ byte output = (byte) ((bytes[offset] >> pos) & 0x03);
+ for (int i = 0; i < getBytesUsed() - 1; i++) {
+ byte in = (byte) ((bytes[offset + i + 1] >> 6) & 0x03);
+ bytes[offset + i] = (byte) ((bytes[offset + i] << 2) | in);
+ }
+ bytes[offset + getBytesUsed() - 1] = (byte) ((bytes[offset + getBytesUsed() - 1] << 2) | c);
+ clearLeadBit();
+ return output;
+ }
+
+ public static void appendOneByteAtPosition(int k, byte onebyte, byte[] buffer, int start, int length) {
+ int position = start + length - 1 - k / 4;
+ if (position < start) {
+ throw new IllegalArgumentException("Buffer for kmer storage is invalid");
+ }
+ int shift = ((k) % 4) << 1;
+ int mask = shift == 0 ? 0 : ((1 << shift) - 1);
+
+ buffer[position] = (byte) ((buffer[position] & mask) | ((0xff & onebyte) << shift));
+ if (position > start && shift != 0) {
+ buffer[position - 1] = (byte) ((buffer[position - 1] & (0xff - mask)) | ((byte) ((0xff & onebyte) >>> (8 - shift))));
+ }
+ }
+
+ public static byte getOneByteFromKmerAtPosition(int k, byte[] buffer, int start, int length) {
+ int position = start + length - 1 - k / 4;
+ if (position < start) {
+ throw new IllegalArgumentException("Buffer of kmer storage is invalid");
+ }
+ int shift = (k % 4) << 1;
+ byte data = (byte) (((0xff) & buffer[position]) >>> shift);
+ if (shift != 0 && position > start) {
+ data |= 0xff & (buffer[position - 1] << (8 - shift));
+ }
+ return data;
+ }
+
+ protected void clearLeadBit() {
+ if (lettersInKmer % 4 != 0) {
+ bytes[offset] &= (1 << ((lettersInKmer % 4) << 1)) - 1;
+ }
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ in.readFully(bytes, offset, getBytesUsed());
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ out.write(bytes, offset, getBytesUsed());
+ }
+
+ @Override
+ public int hashCode() {
+ return Marshal.hashBytes(bytes, offset, getBytesUsed());
+ }
+
+ @Override
+ public boolean equals(Object right_obj) {
+ if (right_obj instanceof KmerBytesWritable) {
+ // since these may be backed by storage of different sizes, we have to manually check each byte
+ KmerBytesWritable right = (KmerBytesWritable) right_obj;
+ for (int i=0; i < getBytesUsed(); i++) {
+ if (bytes[offset + i] != right.bytes[right.offset + i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return KmerUtil.recoverKmerFrom(lettersInKmer, bytes, offset, getBytesUsed());
+ }
+
+ public static int getBytesUsed() {
+ return bytesUsed;
+ }
+
+ public static void setBytesUsed(int bytesUsed) {
+ KmerBytesWritable.bytesUsed = bytesUsed;
+ }
+
+ public static class Comparator extends WritableComparator {
+ public Comparator() {
+ super(KmerBytesWritable.class);
+ }
+
+ public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+ return compareBytes(b1, s1, l1, b2, s2, l2);
+ }
+ }
+
+ static { // register this comparator
+ WritableComparator.define(KmerBytesWritable.class, new Comparator());
+ }
+
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java
new file mode 100644
index 0000000..394d14e
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java
@@ -0,0 +1,311 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.type;
+
+public class KmerBytesWritableFactory {
+ private VKmerBytesWritable kmer;
+
+ public KmerBytesWritableFactory(int k) {
+ kmer = new VKmerBytesWritable(k);
+ }
+
+ /**
+ * Read Kmer from read text into bytes array e.g. AATAG will compress as
+ * [0x000G, 0xATAA]
+ *
+ * @param k
+ * @param array
+ * @param start
+ */
+ public VKmerBytesWritable getKmerByRead(int k, byte[] array, int start) {
+ kmer.setByRead(k, array, start);
+ return kmer;
+ }
+
+ /**
+ * Compress Reversed Kmer into bytes array AATAG will compress as
+ * [0x000A,0xATAG]
+ *
+ * @param array
+ * @param start
+ */
+ public VKmerBytesWritable getKmerByReadReverse(int k, byte[] array, int start) {
+ kmer.setByReadReverse(k, array, start);
+ return kmer;
+ }
+
+ /**
+ * Get last kmer from kmer-chain.
+ * e.g. kmerChain is AAGCTA, if k =5, it will
+ * return AGCTA
+ *
+ * @param k
+ * @param kInChain
+ * @param kmerChain
+ * @return LastKmer bytes array
+ */
+ public VKmerBytesWritable getLastKmerFromChain(int lastK, final VKmerBytesWritable kmerChain) {
+ if (lastK > kmerChain.getKmerLetterLength()) {
+ return null;
+ }
+ if (lastK == kmerChain.getKmerLetterLength()) {
+ kmer.setAsCopy(kmerChain);
+ return kmer;
+ }
+ kmer.reset(lastK);
+
+ /** from end to start */
+ int byteInChain = kmerChain.getKmerByteLength() - 1 - (kmerChain.getKmerLetterLength() - lastK) / 4;
+ int posInByteOfChain = ((kmerChain.getKmerLetterLength() - lastK) % 4) << 1; // *2
+ int byteInKmer = kmer.getKmerByteLength() - 1;
+ for (; byteInKmer >= 0 && byteInChain > 0; byteInKmer--, byteInChain--) {
+ kmer.getBlockBytes()[byteInKmer + kmer.getKmerOffset()] = (byte) ((0xff & kmerChain.getBlockBytes()[byteInChain + kmerChain.getKmerOffset()]) >> posInByteOfChain);
+ kmer.getBlockBytes()[byteInKmer + kmer.getKmerOffset()] |= ((kmerChain.getBlockBytes()[byteInChain + kmerChain.getKmerOffset() - 1] << (8 - posInByteOfChain)));
+ }
+
+ /** last kmer byte */
+ if (byteInKmer == 0) {
+ kmer.getBlockBytes()[0 + kmer.getKmerOffset()] = (byte) ((kmerChain.getBlockBytes()[0 + kmerChain.getKmerOffset()] & 0xff) >> posInByteOfChain);
+ }
+ kmer.clearLeadBit();
+ return kmer;
+ }
+
+ /**
+ * Get first kmer from kmer-chain e.g. kmerChain is AAGCTA, if k=5, it will
+ * return AAGCT
+ *
+ * @param k
+ * @param kInChain
+ * @param kmerChain
+ * @return FirstKmer bytes array
+ */
+ public VKmerBytesWritable getFirstKmerFromChain(int firstK, final VKmerBytesWritable kmerChain) {
+ if (firstK > kmerChain.getKmerLetterLength()) {
+ return null;
+ }
+ if (firstK == kmerChain.getKmerLetterLength()) {
+ kmer.setAsCopy(kmerChain);
+ return kmer;
+ }
+ kmer.reset(firstK);
+
+ int i = 1;
+ for (; i < kmer.getKmerByteLength(); i++) {
+ kmer.getBlockBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i] = kmerChain.getBlockBytes()[kmerChain.getKmerOffset() + kmerChain.getKmerByteLength() - i];
+ }
+ int posInByteOfChain = (firstK % 4) << 1; // *2
+ if (posInByteOfChain == 0) {
+ kmer.getBlockBytes()[0 + kmer.getKmerOffset()] = kmerChain.getBlockBytes()[kmerChain.getKmerOffset() + kmerChain.getKmerByteLength() - i];
+ } else {
+ kmer.getBlockBytes()[0 + kmer.getKmerOffset()] = (byte) (kmerChain.getBlockBytes()[kmerChain.getKmerOffset() + kmerChain.getKmerByteLength() - i] & ((1 << posInByteOfChain) - 1));
+ }
+ kmer.clearLeadBit();
+ return kmer;
+ }
+
+ public VKmerBytesWritable getSubKmerFromChain(int startK, int kSize, final VKmerBytesWritable kmerChain) {
+ if (startK + kSize > kmerChain.getKmerLetterLength()) {
+ return null;
+ }
+ if (startK == 0 && kSize == kmerChain.getKmerLetterLength()) {
+ kmer.setAsCopy(kmerChain);
+ return kmer;
+ }
+ kmer.reset(kSize);
+
+ /** from end to start */
+ int byteInChain = kmerChain.getKmerByteLength() - 1 - startK / 4;
+ int posInByteOfChain = startK % 4 << 1; // *2
+ int byteInKmer = kmer.getKmerByteLength() - 1;
+ for (; byteInKmer >= 0 && byteInChain > 0; byteInKmer--, byteInChain--) {
+ kmer.getBlockBytes()[byteInKmer + kmer.getKmerOffset()] = (byte) ((0xff & kmerChain.getBlockBytes()[byteInChain + kmerChain.getKmerOffset()]) >> posInByteOfChain);
+ kmer.getBlockBytes()[byteInKmer + kmer.getKmerOffset()] |= ((kmerChain.getBlockBytes()[byteInChain + kmerChain.getKmerOffset() - 1] << (8 - posInByteOfChain)));
+ }
+
+ /** last kmer byte */
+ if (byteInKmer == 0) {
+ kmer.getBlockBytes()[0 + kmer.getKmerOffset()] = (byte) ((kmerChain.getBlockBytes()[0 + kmerChain.getKmerOffset()] & 0xff) >> posInByteOfChain);
+ }
+ kmer.clearLeadBit();
+ return kmer;
+ }
+
+ /**
+ * Merge kmer with next neighbor in gene-code format.
+ * The k of new kmer will increase by 1
+ * e.g. AAGCT merge with A => AAGCTA
+ *
+ * @param k
+ * :input k of kmer
+ * @param kmer
+ * : input bytes of kmer
+ * @param nextCode
+ * : next neighbor in gene-code format
+ * @return the merged Kmer, this K of this Kmer is k+1
+ */
+ public VKmerBytesWritable mergeKmerWithNextCode(final VKmerBytesWritable kmer, byte nextCode) {
+ this.kmer.reset(kmer.getKmerLetterLength() + 1);
+ for (int i = 1; i <= kmer.getKmerByteLength(); i++) {
+ this.kmer.getBlockBytes()[this.kmer.getKmerOffset() + this.kmer.getKmerByteLength() - i] = kmer.getBlockBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i];
+ }
+ if (this.kmer.getKmerByteLength() > kmer.getKmerByteLength()) {
+ this.kmer.getBlockBytes()[0 + kmer.getKmerOffset()] = (byte) (nextCode & 0x3);
+ } else {
+ this.kmer.getBlockBytes()[0 + kmer.getKmerOffset()] = (byte) (kmer.getBlockBytes()[0 + kmer.getKmerOffset()] | ((nextCode & 0x3) << ((kmer.getKmerLetterLength() % 4) << 1)));
+ }
+ this.kmer.clearLeadBit();
+ return this.kmer;
+ }
+
+ /**
+ * Merge kmer with previous neighbor in gene-code format.
+ * The k of new kmer will increase by 1
+ * e.g. AAGCT merge with A => AAAGCT
+ *
+ * @param k
+ * :input k of kmer
+ * @param kmer
+ * : input bytes of kmer
+ * @param preCode
+ * : next neighbor in gene-code format
+ * @return the merged Kmer,this K of this Kmer is k+1
+ */
+ public VKmerBytesWritable mergeKmerWithPreCode(final VKmerBytesWritable kmer, byte preCode) {
+ this.kmer.reset(kmer.getKmerLetterLength() + 1);
+ int byteInMergedKmer = 0;
+ if (kmer.getKmerLetterLength() % 4 == 0) {
+ this.kmer.getBlockBytes()[0 + kmer.getKmerOffset()] = (byte) ((kmer.getBlockBytes()[0 + kmer.getKmerOffset()] >> 6) & 0x3);
+ byteInMergedKmer++;
+ }
+ for (int i = 0; i < kmer.getKmerByteLength() - 1; i++, byteInMergedKmer++) {
+ this.kmer.getBlockBytes()[byteInMergedKmer + kmer.getKmerOffset()] = (byte) ((kmer.getBlockBytes()[i + kmer.getKmerOffset()] << 2) | ((kmer.getBlockBytes()[i + kmer.getKmerOffset() + 1] >> 6) & 0x3));
+ }
+ this.kmer.getBlockBytes()[byteInMergedKmer + kmer.getKmerOffset()] = (byte) ((kmer.getBlockBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - 1] << 2) | (preCode & 0x3));
+ this.kmer.clearLeadBit();
+ return this.kmer;
+ }
+
+ /**
+ * Merge two kmer to one kmer
+ * e.g. ACTA + ACCGT => ACTAACCGT
+ *
+ * @param preK
+ * : previous k of kmer
+ * @param kmerPre
+ * : bytes array of previous kmer
+ * @param nextK
+ * : next k of kmer
+ * @param kmerNext
+ * : bytes array of next kmer
+ * @return merged kmer, the new k is @preK + @nextK
+ */
+ public VKmerBytesWritable mergeTwoKmer(final VKmerBytesWritable preKmer, final VKmerBytesWritable nextKmer) {
+ kmer.reset(preKmer.getKmerLetterLength() + nextKmer.getKmerLetterLength());
+ int i = 1;
+ for (; i <= preKmer.getKmerByteLength(); i++) {
+ kmer.getBlockBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i] = preKmer.getBlockBytes()[preKmer.getKmerOffset() + preKmer.getKmerByteLength() - i];
+ }
+ if (i > 1) {
+ i--;
+ }
+ if (preKmer.getKmerLetterLength() % 4 == 0) {
+ for (int j = 1; j <= nextKmer.getKmerByteLength(); j++) {
+ kmer.getBlockBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i - j] = nextKmer.getBlockBytes()[nextKmer.getKmerOffset() + nextKmer.getKmerByteLength() - j];
+ }
+ } else {
+ int posNeedToMove = ((preKmer.getKmerLetterLength() % 4) << 1);
+ kmer.getBlockBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i] |= nextKmer.getBlockBytes()[nextKmer.getKmerOffset() + nextKmer.getKmerByteLength() - 1] << posNeedToMove;
+ for (int j = 1; j < nextKmer.getKmerByteLength(); j++) {
+ kmer.getBlockBytes()[kmer.getKmerOffset() + kmer.getKmerByteLength() - i - j] = (byte) (((nextKmer.getBlockBytes()[nextKmer.getKmerOffset() + nextKmer.getKmerByteLength() - j] & 0xff) >> (8 - posNeedToMove)) | (nextKmer
+ .getBlockBytes()[nextKmer.getKmerOffset() + nextKmer.getKmerByteLength() - j - 1] << posNeedToMove));
+ }
+ if (nextKmer.getKmerLetterLength() % 4 == 0 || (nextKmer.getKmerLetterLength() % 4) * 2 + posNeedToMove > 8) {
+ kmer.getBlockBytes()[0 + kmer.getKmerOffset()] = (byte) ((0xff & nextKmer.getBlockBytes()[0 + nextKmer.getKmerOffset()]) >> (8 - posNeedToMove));
+ }
+ }
+ kmer.clearLeadBit();
+ return kmer;
+ }
+
+ /**
+ * Safely shifted the kmer forward without change the input kmer
+ * e.g. AGCGC shift with T => GCGCT
+ *
+ * @param k
+ * : kmer length
+ * @param kmer
+ * : input kmer
+ * @param afterCode
+ * : input genecode
+ * @return new created kmer that shifted by afterCode, the K will not change
+ */
+ public VKmerBytesWritable shiftKmerWithNextCode(final VKmerBytesWritable kmer, byte afterCode) {
+ this.kmer.setAsCopy(kmer);
+ this.kmer.shiftKmerWithNextCode(afterCode);
+ return this.kmer;
+ }
+
+ /**
+ * Safely shifted the kmer backward without change the input kmer
+ * e.g. AGCGC shift with T => TAGCG
+ *
+ * @param k
+ * : kmer length
+ * @param kmer
+ * : input kmer
+ * @param preCode
+ * : input genecode
+ * @return new created kmer that shifted by preCode, the K will not change
+ */
+ public VKmerBytesWritable shiftKmerWithPreCode(final VKmerBytesWritable kmer, byte preCode) {
+ this.kmer.setAsCopy(kmer);
+ this.kmer.shiftKmerWithPreCode(preCode);
+ return this.kmer;
+ }
+
+ /**
+ * get the reverse sequence of given kmer
+ *
+ * @param kmer
+ */
+ public VKmerBytesWritable reverse(final VKmerBytesWritable kmer) {
+ this.kmer.reset(kmer.getKmerLetterLength());
+
+ int curPosAtKmer = ((kmer.getKmerLetterLength() - 1) % 4) << 1;
+ int curByteAtKmer = 0;
+
+ int curPosAtReverse = 0;
+ int curByteAtReverse = this.kmer.getKmerByteLength() - 1;
+ this.kmer.getBlockBytes()[curByteAtReverse + this.kmer.getKmerOffset()] = 0;
+ for (int i = 0; i < kmer.getKmerLetterLength(); i++) {
+ byte gene = (byte) ((kmer.getBlockBytes()[curByteAtKmer + kmer.getKmerOffset()] >> curPosAtKmer) & 0x03);
+ this.kmer.getBlockBytes()[curByteAtReverse + this.kmer.getKmerOffset()] |= gene << curPosAtReverse;
+ curPosAtReverse += 2;
+ if (curPosAtReverse >= 8) {
+ curPosAtReverse = 0;
+ this.kmer.getBlockBytes()[--curByteAtReverse + this.kmer.getKmerOffset()] = 0;
+ }
+ curPosAtKmer -= 2;
+ if (curPosAtKmer < 0) {
+ curPosAtKmer = 6;
+ curByteAtKmer++;
+ }
+ }
+ this.kmer.clearLeadBit();
+ return this.kmer;
+ }
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
new file mode 100644
index 0000000..e8fb93f
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
@@ -0,0 +1,510 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.type;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Comparator;
+
+import org.apache.hadoop.io.WritableComparable;
+
+import edu.uci.ics.genomix.data.Marshal;
+
+public class NodeWritable implements WritableComparable<NodeWritable>, Serializable {
+
+ private static final long serialVersionUID = 1L;
+ public static final NodeWritable EMPTY_NODE = new NodeWritable();
+
+ private static final int SIZE_FLOAT = 4;
+
+ private EdgeListWritable[] edges = { null, null, null, null };
+
+ private PositionListWritable startReads; // first internalKmer in read
+ private PositionListWritable endReads; // first internalKmer in read (but
+ // internalKmer was flipped)
+
+ private VKmerBytesWritable internalKmer;
+
+ private float averageCoverage;
+
+ // merge/update directions
+ public static class DirectionFlag {
+ public static final byte DIR_FF = 0b00 << 0;
+ public static final byte DIR_FR = 0b01 << 0;
+ public static final byte DIR_RF = 0b10 << 0;
+ public static final byte DIR_RR = 0b11 << 0;
+ public static final byte DIR_MASK = 0b11 << 0;
+ public static final byte DIR_CLEAR = 0b1111100 << 0;
+
+ public static final byte[] values = { DIR_FF, DIR_FR, DIR_RF, DIR_RR };
+ }
+
+ public static class IncomingListFlag {
+ public static final byte DIR_RF = 0b10 << 0;
+ public static final byte DIR_RR = 0b11 << 0;
+
+ public static final byte[] values = {DIR_RF, DIR_RR };
+ }
+
+ public static class OutgoingListFlag {
+ public static final byte DIR_FF = 0b00 << 0;
+ public static final byte DIR_FR = 0b01 << 0;
+
+ public static final byte[] values = {DIR_FF, DIR_FR };
+ }
+
+ public NodeWritable() {
+ for (byte d : DirectionFlag.values) {
+ edges[d] = new EdgeListWritable();
+ }
+ startReads = new PositionListWritable();
+ endReads = new PositionListWritable();
+ internalKmer = new VKmerBytesWritable(); // in graph construction - not
+ // set kmerlength
+ // Optimization: VKmer
+ averageCoverage = 0;
+ }
+
+ public NodeWritable(EdgeListWritable[] edges, PositionListWritable startReads, PositionListWritable endReads,
+ VKmerBytesWritable kmer, float coverage) {
+ this();
+ setAsCopy(edges, startReads, endReads, kmer, coverage);
+ }
+
+ public NodeWritable(byte[] data, int offset) {
+ this();
+ setAsReference(data, offset);
+ }
+
+ public NodeWritable getNode(){
+ return this;
+ }
+
+ public void setAsCopy(NodeWritable node) {
+ setAsCopy(node.edges, node.startReads, node.endReads, node.internalKmer, node.averageCoverage);
+ }
+
+ public void setAsCopy(EdgeListWritable[] edges, PositionListWritable startReads, PositionListWritable endReads,
+ VKmerBytesWritable kmer2, float coverage) {
+ for (byte d : DirectionFlag.values) {
+ this.edges[d].setAsCopy(edges[d]);
+ }
+ this.startReads.set(startReads);
+ this.endReads.set(endReads);
+ this.internalKmer.setAsCopy(kmer2);
+ this.averageCoverage = coverage;
+ }
+
+ public void reset() {
+ for (byte d : DirectionFlag.values) {
+ edges[d].reset();
+ }
+ startReads.reset();
+ endReads.reset();
+ internalKmer.reset(0);
+ averageCoverage = 0;
+ }
+
+ public VKmerBytesWritable getInternalKmer() {
+ return internalKmer;
+ }
+
+ public void setInternalKmer(VKmerBytesWritable internalKmer) {
+ this.internalKmer.setAsCopy(internalKmer);
+ }
+
+ public int getKmerLength() {
+ return internalKmer.getKmerLetterLength();
+ }
+
+ public EdgeListWritable getEdgeList(byte dir) {
+ return edges[dir & DirectionFlag.DIR_MASK];
+ }
+
+ public void setEdgeList(byte dir, EdgeListWritable edgeList) {
+ this.edges[dir & DirectionFlag.DIR_MASK].setAsCopy(edgeList);
+ }
+
+ public EdgeListWritable[] getEdges() {
+ return edges;
+ }
+
+ public void setEdges(EdgeListWritable[] edges) {
+ this.edges = edges;
+ }
+
+ public float getAverageCoverage() {
+ return averageCoverage;
+ }
+
+ public void setAverageCoverage(float averageCoverage) {
+ this.averageCoverage = averageCoverage;
+ }
+
+ /**
+ * Update my coverage to be the average of this and other. Used when merging
+ * paths.
+ */
+ public void mergeCoverage(NodeWritable other) {
+ // sequence considered in the average doesn't include anything
+ // overlapping with other kmers
+ float adjustedLength = internalKmer.getKmerLetterLength() + other.internalKmer.getKmerLetterLength()
+ - (KmerBytesWritable.getKmerLength() - 1) * 2;
+
+ float myCount = (internalKmer.getKmerLetterLength() - KmerBytesWritable.getKmerLength() + 1) * averageCoverage;
+ float otherCount = (other.internalKmer.getKmerLetterLength() - KmerBytesWritable.getKmerLength() + 1) * other.averageCoverage;
+ averageCoverage = (myCount + otherCount) / adjustedLength;
+ }
+
+ /**
+ * Update my coverage as if all the reads in other became my own
+ */
+ public void addCoverage(NodeWritable other) {
+ float myAdjustedLength = internalKmer.getKmerLetterLength() - KmerBytesWritable.getKmerLength() - 1;
+ float otherAdjustedLength = other.internalKmer.getKmerLetterLength() - KmerBytesWritable.getKmerLength() - 1;
+ averageCoverage += other.averageCoverage * (otherAdjustedLength / myAdjustedLength);
+ }
+
+ public void setAvgCoverage(float coverage) {
+ averageCoverage = coverage;
+ }
+
+ public float getAvgCoverage() {
+ return averageCoverage;
+ }
+
+ public PositionListWritable getStartReads() {
+ return startReads;
+ }
+
+ public void setStartReads(PositionListWritable startReads) {
+ this.startReads.set(startReads);
+ }
+
+ public PositionListWritable getEndReads() {
+ return endReads;
+ }
+
+ public void setEndReads(PositionListWritable endReads) {
+ this.endReads.set(endReads);
+ }
+
+ /**
+ * Returns the length of the byte-array version of this node
+ */
+ public int getSerializedLength() {
+ int length = 0;
+ for (byte d : DirectionFlag.values) {
+ length += edges[d].getLength();
+ }
+ length += startReads.getLength();
+ length += endReads.getLength();
+ length += internalKmer.getLength();
+ length += SIZE_FLOAT; // avgCoverage
+ return length;
+ }
+
+ /**
+ * Return this Node's representation as a new byte array
+ */
+ public byte[] marshalToByteArray() throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(getSerializedLength());
+ DataOutputStream out = new DataOutputStream(baos);
+ write(out);
+ return baos.toByteArray();
+ }
+
+ public void setAsCopy(byte[] data, int offset) {
+ int curOffset = offset;
+ for (byte d : DirectionFlag.values) {
+ edges[d].setAsCopy(data, curOffset);
+ curOffset += edges[d].getLength();
+ }
+ startReads.set(data, curOffset);
+ curOffset += startReads.getLength();
+ endReads.set(data, curOffset);
+ curOffset += endReads.getLength();
+ internalKmer.setAsCopy(data, curOffset);
+ curOffset += internalKmer.getLength();
+ averageCoverage = Marshal.getFloat(data, curOffset);
+ }
+
+ public void setAsReference(byte[] data, int offset) {
+ int curOffset = offset;
+ for (byte d : DirectionFlag.values) {
+ edges[d].setAsReference(data, curOffset);
+ curOffset += edges[d].getLength();
+ }
+ startReads.setNewReference(data, curOffset);
+ curOffset += startReads.getLength();
+ endReads.setNewReference(data, curOffset);
+ curOffset += endReads.getLength();
+
+ internalKmer.setAsReference(data, curOffset);
+ curOffset += internalKmer.getLength();
+ averageCoverage = Marshal.getFloat(data, curOffset);
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ for (byte d : DirectionFlag.values) {
+ edges[d].write(out);
+ }
+ startReads.write(out);
+ endReads.write(out);
+ this.internalKmer.write(out);
+ out.writeFloat(averageCoverage);
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ for (byte d : DirectionFlag.values) {
+ edges[d].readFields(in);
+ }
+ startReads.readFields(in);
+ endReads.readFields(in);
+ this.internalKmer.readFields(in);
+ averageCoverage = in.readFloat();
+ }
+
+ @Override
+ public int compareTo(NodeWritable other) {
+ return this.internalKmer.compareTo(other.internalKmer);
+ }
+
+ public class SortByCoverage implements Comparator<NodeWritable> {
+ @Override
+ public int compare(NodeWritable left, NodeWritable right) {
+ return Float.compare(left.averageCoverage, right.averageCoverage);
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ return this.internalKmer.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof NodeWritable))
+ return false;
+
+ NodeWritable nw = (NodeWritable) o;
+ for (byte d : DirectionFlag.values) {
+ if (!edges[d].equals(nw.edges[d]))
+ return false;
+ }
+
+ return (averageCoverage == nw.averageCoverage && startReads.equals(nw.startReads) &&
+ endReads.equals(nw.endReads) && internalKmer.equals(nw.internalKmer));
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sbuilder = new StringBuilder();
+ sbuilder.append('{');
+ for (byte d : DirectionFlag.values) {
+ sbuilder.append(edges[d].toString()).append('\t');
+ }
+ sbuilder.append("{5':" + startReads.toString() + ", ~5':" + endReads.toString() + "}");
+ sbuilder.append(internalKmer.toString()).append('\t');
+ sbuilder.append(averageCoverage).append('x').append('}');
+ return sbuilder.toString();
+ }
+
+ /**
+ * merge this node with another node. If a flip is necessary, `other` will flip.
+ * According to `dir`:
+ * 1) kmers are concatenated/prepended/flipped
+ * 2) coverage becomes a weighted average of the two spans
+ * 3) startReads and endReads are merged and possibly flipped
+ * 4) my edges are replaced with some subset of `other`'s edges
+ *
+ * An error is raised when:
+ * 1) non-overlapping kmers // TODO
+ * 2) `other` has degree > 1 towards me
+ *
+ * @param dir
+ * : one of the DirectionFlag.DIR_*
+ * @param other
+ * : the node to merge with. I should have a `dir` edge towards `other`
+ */
+ public void mergeWithNode(byte dir, final NodeWritable other) {
+ mergeEdges(dir, other);
+ mergeStartAndEndReadIDs(dir, other);
+ mergeCoverage(other);
+ internalKmer.mergeWithKmerInDir(dir, KmerBytesWritable.lettersInKmer, other.internalKmer);
+ }
+
+
+ /**
+ * update my edge list
+ */
+ public void updateEdges(byte deleteDir, VKmerBytesWritable toDelete, byte updateDir, NodeWritable other){
+ edges[deleteDir].remove(toDelete);
+ switch (updateDir) {
+ case DirectionFlag.DIR_FF:
+ edges[DirectionFlag.DIR_FF].unionUpdate(other.edges[DirectionFlag.DIR_FF]);
+ edges[DirectionFlag.DIR_FR].unionUpdate(other.edges[DirectionFlag.DIR_FR]);
+ break;
+ case DirectionFlag.DIR_FR:
+ edges[DirectionFlag.DIR_FF].unionUpdate(other.edges[DirectionFlag.DIR_RF]);
+ edges[DirectionFlag.DIR_FR].unionUpdate(other.edges[DirectionFlag.DIR_RR]);
+ break;
+ case DirectionFlag.DIR_RF:
+ edges[DirectionFlag.DIR_RF].unionUpdate(other.edges[DirectionFlag.DIR_FF]);
+ edges[DirectionFlag.DIR_RR].unionUpdate(other.edges[DirectionFlag.DIR_FR]);
+ break;
+ case DirectionFlag.DIR_RR:
+ edges[DirectionFlag.DIR_RF].unionUpdate(other.edges[DirectionFlag.DIR_RF]);
+ edges[DirectionFlag.DIR_RR].unionUpdate(other.edges[DirectionFlag.DIR_RR]);
+ break;
+ }
+ }
+
+ /**
+ * merge my edge list (both kmers and readIDs) with those of `other`. Assumes that `other` is doing the flipping, if any.
+ */
+ public void mergeEdges(byte dir, NodeWritable other) {
+ switch (dir & DirectionFlag.DIR_MASK) {
+ case DirectionFlag.DIR_FF:
+ if (outDegree() > 1)
+ throw new IllegalArgumentException("Illegal FF merge attempted! My outgoing degree is " + outDegree() + " in " + toString());
+ if (other.inDegree() > 1)
+ throw new IllegalArgumentException("Illegal FF merge attempted! Other incoming degree is " + other.inDegree() + " in " + other.toString());
+ edges[DirectionFlag.DIR_FF].setAsCopy(other.edges[DirectionFlag.DIR_FF]);
+ edges[DirectionFlag.DIR_FR].setAsCopy(other.edges[DirectionFlag.DIR_FR]);
+ break;
+ case DirectionFlag.DIR_FR:
+ if (outDegree() > 1)
+ throw new IllegalArgumentException("Illegal FR merge attempted! My outgoing degree is " + outDegree() + " in " + toString());
+ if (other.outDegree() > 1)
+ throw new IllegalArgumentException("Illegal FR merge attempted! Other outgoing degree is " + other.outDegree() + " in " + other.toString());
+ edges[DirectionFlag.DIR_FF].setAsCopy(other.edges[DirectionFlag.DIR_RF]);
+ edges[DirectionFlag.DIR_FR].setAsCopy(other.edges[DirectionFlag.DIR_RR]);
+ break;
+ case DirectionFlag.DIR_RF:
+ if (inDegree() > 1)
+ throw new IllegalArgumentException("Illegal RF merge attempted! My incoming degree is " + inDegree() + " in " + toString());
+ if (other.inDegree() > 1)
+ throw new IllegalArgumentException("Illegal RF merge attempted! Other incoming degree is " + other.inDegree() + " in " + other.toString());
+ edges[DirectionFlag.DIR_RF].setAsCopy(other.edges[DirectionFlag.DIR_FF]);
+ edges[DirectionFlag.DIR_RR].setAsCopy(other.edges[DirectionFlag.DIR_FR]);
+ break;
+ case DirectionFlag.DIR_RR:
+ if (inDegree() > 1)
+ throw new IllegalArgumentException("Illegal RR merge attempted! My incoming degree is " + inDegree() + " in " + toString());
+ if (other.outDegree() > 1)
+ throw new IllegalArgumentException("Illegal RR merge attempted! Other outgoing degree is " + other.outDegree() + " in " + other.toString());
+ edges[DirectionFlag.DIR_RF].setAsCopy(other.edges[DirectionFlag.DIR_RF]);
+ edges[DirectionFlag.DIR_RR].setAsCopy(other.edges[DirectionFlag.DIR_RR]);
+ break;
+ }
+ }
+
+ private void mergeStartAndEndReadIDs(byte dir, NodeWritable other) {
+ int K = KmerBytesWritable.lettersInKmer;
+ int otherLength = other.internalKmer.lettersInKmer;
+ int thisLength = internalKmer.lettersInKmer;
+ int newOtherOffset, newThisOffset;
+ switch (dir & DirectionFlag.DIR_MASK) {
+ case DirectionFlag.DIR_FF:
+ newOtherOffset = thisLength - K + 1;
+ // stream theirs in with my offset
+ for (PositionWritable p : other.startReads) {
+ startReads.append(p.getMateId(), p.getReadId(), newOtherOffset + p.getPosId());
+ }
+ for (PositionWritable p : other.endReads) {
+ endReads.append(p.getMateId(), p.getReadId(), newOtherOffset + p.getPosId());
+ }
+ break;
+ case DirectionFlag.DIR_FR:
+ newOtherOffset = thisLength - K + 1 + otherLength - K;
+ // stream theirs in, offset and flipped
+ for (PositionWritable p : other.startReads) {
+ endReads.append(p.getMateId(), p.getReadId(), newOtherOffset + p.getPosId());
+ }
+ for (PositionWritable p : other.endReads) {
+ startReads.append(p.getMateId(), p.getReadId(), newOtherOffset + p.getPosId());
+ }
+ break;
+ case DirectionFlag.DIR_RF:
+ newThisOffset = otherLength - K + 1;
+ newOtherOffset = otherLength - K;
+ // shift my offsets (other is prepended)
+ for (PositionWritable p : startReads) {
+ p.set(p.getMateId(), p.getReadId(), newThisOffset + p.getPosId());
+ }
+ for (PositionWritable p : endReads) {
+ p.set(p.getMateId(), p.getReadId(), newThisOffset + p.getPosId());
+ }
+ //stream theirs in, not offset (they are first now) but flipped
+ for (PositionWritable p : other.startReads) {
+ endReads.append(p.getMateId(), p.getReadId(), newOtherOffset + p.getPosId());
+ }
+ for (PositionWritable p : other.endReads) {
+ startReads.append(p.getMateId(), p.getReadId(), newOtherOffset + p.getPosId());
+ }
+ break;
+ case DirectionFlag.DIR_RR:
+ newThisOffset = otherLength - K + 1;
+ // shift my offsets (other is prepended)
+ for (PositionWritable p : startReads) {
+ p.set(p.getMateId(), p.getReadId(), newThisOffset + p.getPosId());
+ }
+ for (PositionWritable p : endReads) {
+ p.set(p.getMateId(), p.getReadId(), newThisOffset + p.getPosId());
+ }
+ for (PositionWritable p : other.startReads) {
+ startReads.append(p);
+ }
+ for (PositionWritable p : other.endReads) {
+ endReads.append(p);
+ }
+ break;
+ }
+ }
+
+ public int inDegree() {
+ return edges[DirectionFlag.DIR_RR].getCountOfPosition() + edges[DirectionFlag.DIR_RF].getCountOfPosition();
+ }
+
+ public int outDegree() {
+ return edges[DirectionFlag.DIR_FF].getCountOfPosition() + edges[DirectionFlag.DIR_FR].getCountOfPosition();
+ }
+
+ /*
+ * Return if this node is a "path" compressible node, that is, it has an
+ * in-degree and out-degree of 1
+ */
+ public boolean isPathNode() {
+ return inDegree() == 1 && outDegree() == 1;
+ }
+
+ public boolean isSimpleOrTerminalPath() {
+ return isPathNode() || (inDegree() == 0 && outDegree() == 1) || (inDegree() == 1 && outDegree() == 0);
+ }
+
+ public boolean isStartReadOrEndRead(){
+ return startReads.getCountOfPosition() > 0 || endReads.getCountOfPosition() > 0;
+ }
+
+}
\ No newline at end of file
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
new file mode 100644
index 0000000..1f34e47
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
@@ -0,0 +1,376 @@
+package edu.uci.ics.genomix.type;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.hadoop.io.Writable;
+
+import edu.uci.ics.genomix.data.Marshal;
+import edu.uci.ics.genomix.type.PositionWritable;
+
+public class PositionListWritable implements Writable, Iterable<PositionWritable>, Serializable {
+ private static final long serialVersionUID = 1L;
+ protected static final byte[] EMPTY_BYTES = {0,0,0,0};
+ protected static final int HEADER_SIZE = 4;
+
+ protected byte[] storage;
+ protected int offset;
+ protected int valueCount;
+ protected int maxStorageSize;
+
+
+ protected PositionWritable posIter = new PositionWritable();
+
+ public PositionListWritable() {
+ storage = EMPTY_BYTES;
+ valueCount = 0;
+ offset = 0;
+ maxStorageSize = storage.length;
+ }
+
+ public PositionListWritable(byte[] data, int offset) {
+ setNewReference(data, offset);
+ }
+
+ public PositionListWritable(List<PositionWritable> posns) {
+ this();
+ setSize(posns.size() * PositionWritable.LENGTH + HEADER_SIZE); // reserve space for all elements
+ for (PositionWritable p : posns) {
+ append(p);
+ }
+ }
+
+ public PositionListWritable(PositionListWritable other) {
+ this();
+ set(other);
+ }
+
+ public void setNewReference(byte[] data, int offset) {
+ this.valueCount = Marshal.getInt(data, offset);
+ this.storage = data;
+ this.offset = offset;
+ maxStorageSize = valueCount * PositionWritable.LENGTH + HEADER_SIZE;
+ }
+
+ public void append(long uuid) {
+ setSize((1 + valueCount) * PositionWritable.LENGTH + HEADER_SIZE);
+ Marshal.putLong(uuid, storage, offset + valueCount * PositionWritable.LENGTH + HEADER_SIZE);
+ valueCount += 1;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ public void append(byte mateId, long readId, int posId) {
+ append(PositionWritable.makeUUID(mateId, readId, posId));
+ }
+
+ public void append(PositionWritable pos) {
+ if (pos != null)
+ append(pos.getUUID());
+ else
+ throw new RuntimeException("This position is null pointer!");
+ }
+
+ public void appendReadId(long readId){
+ append((byte)0, readId, 0);
+ }
+
+ /*
+ * Append the otherList to the end of myList
+ */
+ public void appendList(PositionListWritable otherList) {
+ if (otherList.valueCount > 0) {
+ setSize((valueCount + otherList.valueCount) * PositionWritable.LENGTH + HEADER_SIZE);
+ // copy contents of otherList into the end of my storage
+ System.arraycopy(otherList.storage, otherList.offset + HEADER_SIZE, storage, offset + valueCount
+ * PositionWritable.LENGTH + HEADER_SIZE, otherList.valueCount * PositionWritable.LENGTH);
+ valueCount += otherList.valueCount;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+ }
+
+ /**
+ * Save the union of my list and otherList. Uses a temporary HashSet for
+ * uniquefication
+ */
+ public void unionUpdate(PositionListWritable otherList) {
+ int newSize = valueCount + otherList.valueCount;
+ HashSet<PositionWritable> uniqueElements = new HashSet<PositionWritable>(newSize);
+ for (PositionWritable pos : this) {
+ uniqueElements.add(new PositionWritable(pos));
+ }
+ for (PositionWritable pos : otherList) {
+ uniqueElements.add(new PositionWritable(pos));
+ }
+ valueCount = 0;
+ setSize(newSize * PositionWritable.LENGTH + HEADER_SIZE);
+ for (PositionWritable pos : uniqueElements) {
+ append(pos);
+ }
+ }
+
+ public static int getCountByDataLength(int length) {
+ if (length % PositionWritable.LENGTH != 0) {
+ throw new IllegalArgumentException("Length of positionlist is invalid");
+ }
+ return length / PositionWritable.LENGTH;
+ }
+
+ public void set(PositionListWritable otherList) {
+ set(otherList.storage, otherList.offset);
+ }
+
+ public void set(byte[] newData, int newOffset) {
+ int newValueCount = Marshal.getInt(newData, newOffset);
+ setSize(newValueCount * PositionWritable.LENGTH + HEADER_SIZE);
+ if (newValueCount > 0) {
+ System.arraycopy(newData, newOffset + HEADER_SIZE, storage, this.offset + HEADER_SIZE, newValueCount * PositionWritable.LENGTH);
+ }
+ valueCount = newValueCount;
+ Marshal.putInt(valueCount, storage, this.offset);
+ }
+
+ public void reset() {
+ valueCount = 0;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ protected void setSize(int size) {
+ if (size > getCapacity()) {
+ setCapacity((size * 3 / 2));
+ }
+ }
+
+ protected int getCapacity() {
+ return maxStorageSize - offset;
+ }
+
+ public String printStartReadIdSet(){
+ String output = "5':[";
+ if(valueCount > 0){
+ for(int i = 0; i < valueCount - 1; i++)
+ output += getPosition(i).getReadId() + ",";
+ output += getPosition(valueCount - 1).getReadId();
+ }
+ output += "]";
+ return output;
+ }
+
+ public String printEndReadIdSet(){
+ String output = "~5':[";
+ if(valueCount > 0){
+ for(int i = 0; i < valueCount - 1; i++)
+ output += getPosition(i).getReadId() + ",";
+ output += getPosition(valueCount - 1).getReadId();
+ }
+ output += "]";
+ return output;
+ }
+
+ protected void setCapacity(int new_cap) {
+ if (new_cap > getCapacity()) {
+ byte[] new_data = new byte[new_cap];
+ if (valueCount > 0) {
+ System.arraycopy(storage, offset, new_data, 0, valueCount * PositionWritable.LENGTH + HEADER_SIZE);
+ }
+ storage = new_data;
+ offset = 0;
+ maxStorageSize = storage.length;
+ }
+ }
+
+ public PositionWritable getPosition(int i) {
+ if (i >= valueCount) {
+ throw new ArrayIndexOutOfBoundsException("No such positions");
+ }
+ posIter.setNewReference(storage, offset + i * PositionWritable.LENGTH + HEADER_SIZE);
+ return posIter;
+ }
+
+ public void resetPosition(int i, long uuid) {
+ if (i >= valueCount) {
+ throw new ArrayIndexOutOfBoundsException("No such positions");
+ }
+ Marshal.putLong(uuid, storage, offset + i * PositionWritable.LENGTH + HEADER_SIZE);
+ }
+
+ public void removePosition(int i) {
+ if (i < 0 || i > valueCount)
+ throw new IllegalArgumentException("Invalid position specified in removePosition! Should be 0 <= " + i + " <= " + valueCount + ").");
+ System.arraycopy(storage, offset + i * PositionWritable.LENGTH + HEADER_SIZE, storage, offset
+ + (i - 1) * PositionWritable.LENGTH + HEADER_SIZE, (valueCount - i)
+ * PositionWritable.LENGTH);
+ valueCount--;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ public int getCountOfPosition() {
+ return valueCount;
+ }
+
+ public byte[] getByteArray() {
+ return storage;
+ }
+
+ public int getStartOffset() {
+ return offset;
+ }
+
+ public int getLength() {
+ return valueCount * PositionWritable.LENGTH + HEADER_SIZE;
+ }
+
+ @Override
+ public Iterator<PositionWritable> iterator() {
+ Iterator<PositionWritable> it = new Iterator<PositionWritable>() {
+
+ private int currentIndex = 0;
+
+ @Override
+ public boolean hasNext() {
+ return currentIndex < valueCount;
+ }
+
+ @Override
+ public PositionWritable next() {
+ return getPosition(currentIndex++);
+ }
+
+ @Override
+ public void remove() {
+ if (currentIndex < valueCount)
+ System.arraycopy(storage, offset + currentIndex * PositionWritable.LENGTH + HEADER_SIZE, storage, offset
+ + (currentIndex - 1) * PositionWritable.LENGTH + HEADER_SIZE, (valueCount - currentIndex)
+ * PositionWritable.LENGTH);
+ valueCount--;
+ currentIndex--;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+ };
+ return it;
+ }
+
+ /*
+ * remove the first instance of @toRemove. Uses a linear scan. Throws an exception if not in this list.
+ */
+ public void remove(PositionWritable toRemove, boolean ignoreMissing) {
+ Iterator<PositionWritable> posIterator = this.iterator();
+ while (posIterator.hasNext()) {
+ if (toRemove.equals(posIterator.next())) {
+ posIterator.remove();
+ return; // found it. return early.
+ }
+ }
+ // element not found.
+ if (!ignoreMissing) {
+ throw new ArrayIndexOutOfBoundsException("the PositionWritable `" + toRemove.toString()
+ + "` was not found in this list.");
+ }
+ }
+
+ public void remove(PositionWritable toRemove) {
+ remove(toRemove, false);
+ }
+
+ public void removeReadId(long readId){
+ PositionWritable toRemove = new PositionWritable();
+ toRemove.set((byte)0, readId, 0);
+ remove(toRemove);
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ out.writeInt(valueCount);
+ out.write(storage, offset + HEADER_SIZE, valueCount * PositionWritable.LENGTH);
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ int newValueCount = in.readInt();
+ setSize(newValueCount * PositionWritable.LENGTH + HEADER_SIZE);
+ in.readFully(storage, offset + HEADER_SIZE, newValueCount * PositionWritable.LENGTH);
+ valueCount = newValueCount;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sbuilder = new StringBuilder();
+ sbuilder.append('[');
+ for (PositionWritable pos : this) {
+ sbuilder.append(pos.toString());
+ sbuilder.append(',');
+ }
+ if (valueCount > 0) {
+ sbuilder.setCharAt(sbuilder.length() - 1, ']');
+ } else {
+ sbuilder.append(']');
+ }
+ return sbuilder.toString();
+ }
+
+ public long[] toUUIDArray() {
+ long[] result = new long[valueCount];
+ for (int i=0; i < valueCount; i++) {
+ result[i] = getPosition(i).getUUID();
+ }
+ return result;
+ }
+
+ public long[] toReadIDArray() {
+ long[] result = new long[valueCount];
+ for (int i=0; i < valueCount; i++) {
+ result[i] = getPosition(i).getReadId();
+ }
+ return result;
+ }
+
+ public class readIDIterator implements Iterator<Long> {
+
+ @Override
+ public boolean hasNext() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public Long next() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void remove() {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
+
+ @Override
+ public int hashCode() {
+ return Marshal.hashBytes(getByteArray(), getStartOffset(), getLength());
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof PositionListWritable))
+ return false;
+ PositionListWritable other = (PositionListWritable) o;
+ if (this.valueCount != other.valueCount)
+ return false;
+ for (int i = 0; i < this.valueCount; i++) {
+ if (!this.getPosition(i).equals(other.getPosition(i)))
+ return false;
+ }
+ return true;
+ }
+
+ public boolean isEmpty(){
+ return this.getCountOfPosition() == 0;
+ }
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
new file mode 100644
index 0000000..bcdd423
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
@@ -0,0 +1,132 @@
+package edu.uci.ics.genomix.type;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+import org.apache.hadoop.io.WritableComparable;
+
+import edu.uci.ics.genomix.data.Marshal;
+import edu.uci.ics.genomix.type.PositionWritable;
+
+public class PositionWritable implements WritableComparable<PositionWritable>, Serializable{
+ private static final long serialVersionUID = 1L;
+ protected byte[] storage;
+ protected int offset;
+ public static final int LENGTH = 8;
+
+ public static final int totalBits = 64;
+ private static final int bitsForMate = 1;
+ private static final int bitsForPosition = 16;
+ private static final int readIdShift = bitsForPosition + bitsForMate;
+ private static final int positionIdShift = bitsForMate;
+
+ public PositionWritable() {
+ storage = new byte[LENGTH];
+ offset = 0;
+ }
+
+ public PositionWritable(byte mateId, long readId, int posId){
+ this();
+ set(mateId, readId, posId);
+ }
+
+ public PositionWritable(PositionWritable other) {
+ this();
+ set(other);
+ }
+ public PositionWritable(byte[] storage, int offset) {
+ setNewReference(storage, offset);
+ }
+
+ public void set(long uuid){
+ Marshal.putLong(uuid, storage, offset);
+ }
+
+ public static long makeUUID(byte mateId, long readId, int posId) {
+ return (readId << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
+ }
+
+ public void set(byte mateId, long readId, int posId){
+ Marshal.putLong(makeUUID(mateId, readId, posId), storage, offset);
+ }
+
+ public void set(PositionWritable pos) {
+ set(pos.getMateId(),pos.getReadId(),pos.getPosId());
+ }
+
+ public void setNewReference(byte[] storage, int offset) {
+ this.storage = storage;
+ this.offset = offset;
+ }
+
+ public void reset(){
+ storage = new byte[LENGTH];
+ offset = 0;
+ }
+
+ public long getUUID(){
+ return Marshal.getLong(storage, offset);
+ }
+
+ public byte getMateId(){
+ return (byte) (Marshal.getLong(storage, offset) & 0b1);
+ }
+
+ public long getReadId(){
+ return Marshal.getLong(storage, offset) >>> readIdShift;
+ }
+
+ public int getPosId(){
+ return (int) ((Marshal.getLong(storage, offset) >>> positionIdShift) & 0xffff);
+ }
+
+ public byte[] getByteArray() {
+ return storage;
+ }
+
+ public int getStartOffset() {
+ return offset;
+ }
+
+ public int getLength() {
+ return LENGTH;
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ in.readFully(storage, offset, LENGTH);
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ out.write(storage, offset, LENGTH);
+ }
+
+ @Override
+ public int hashCode() {
+ return Marshal.hashBytes(getByteArray(), getStartOffset(), getLength());
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof PositionWritable))
+ return false;
+ PositionWritable other = (PositionWritable) o;
+ return this.getUUID() == other.getUUID();
+ }
+
+ @Override
+ public int compareTo(PositionWritable other) {
+ return (this.getUUID() < other.getUUID()) ? -1 : ((this.getUUID() == other.getUUID()) ? 0 : 1);
+ }
+
+ /*
+ * String of form "(readId-posID_mate)" where mate is _0 or _1
+ */
+ @Override
+ public String toString() {
+ return "(" + this.getReadId() + "-" + this.getPosId() + "_" + (this.getMateId()) + ")";
+ }
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
new file mode 100644
index 0000000..de5e434
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
@@ -0,0 +1,748 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.type;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.io.Serializable;
+import java.nio.ByteBuffer;
+
+import org.apache.hadoop.io.BinaryComparable;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.io.WritableComparator;
+
+import edu.uci.ics.genomix.data.KmerUtil;
+import edu.uci.ics.genomix.data.Marshal;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+
+
+/**
+ * Variable-length kmer which stores its length internally.
+ * Note: `offset` as used in this class is the offset at which the *kmer*
+ * begins. There is a {@value HEADER_SIZE}-byte header preceding the kmer
+ */
+public class VKmerBytesWritable extends BinaryComparable implements Serializable, WritableComparable<BinaryComparable> {
+ private static final long serialVersionUID = 1L;
+ protected static final byte[] EMPTY_BYTES = { 0, 0, 0, 0 }; // int indicating 0 length
+ protected static final int HEADER_SIZE = 4; // number of bytes for header info
+
+ protected int lettersInKmer;
+ protected int bytesUsed;
+ protected byte[] bytes;
+ protected int kmerStartOffset;
+ protected int storageMaxSize; // since we may be a reference inside a larger datablock, we must track our maximum size
+
+ /**
+ * Initialize as empty kmer
+ */
+ public VKmerBytesWritable() {
+ this(EMPTY_BYTES, 0);
+ }
+
+ /**
+ * Copy contents of kmer string
+ */
+ public VKmerBytesWritable(String kmer) {
+ bytes = new byte[HEADER_SIZE + KmerUtil.getByteNumFromK(kmer.length())];
+ kmerStartOffset = HEADER_SIZE;
+ storageMaxSize = bytes.length;
+ setAsCopy(kmer);
+ }
+
+ /**
+ * Set as reference to given data
+ *
+ * @param storage
+ * : byte array with header
+ * @param offset
+ */
+ public VKmerBytesWritable(byte[] storage, int offset) {
+ setAsReference(storage, offset);
+ }
+
+ /**
+ * Reserve space for k letters
+ */
+ public VKmerBytesWritable(int k) {
+ if (k > 0) {
+ bytes = new byte[HEADER_SIZE + KmerUtil.getByteNumFromK(k)];
+ } else if (k == 0) {
+ bytes = EMPTY_BYTES;
+ } else {
+ throw new IllegalArgumentException("Invalid K (" + k + ").");
+ }
+ kmerStartOffset = HEADER_SIZE;
+ storageMaxSize = bytes.length;
+ setKmerLength(k);
+ }
+
+ /**
+ * deep copy of kmer in other
+ *
+ * @param other
+ */
+ public VKmerBytesWritable(VKmerBytesWritable other) {
+ this(other.lettersInKmer);
+ setAsCopy(other);
+ }
+
+ /**
+ * deep copy of kmer in other
+ *
+ * @param other
+ */
+ @SuppressWarnings("static-access")
+ public VKmerBytesWritable(KmerBytesWritable other) {
+ this(other.lettersInKmer);
+ setAsCopy(other);
+ }
+
+ /**
+ * Deep copy of the given kmer
+ *
+ * @param other
+ */
+ public void setAsCopy(VKmerBytesWritable other) {
+ reset(other.lettersInKmer);
+ if (lettersInKmer > 0) {
+ System.arraycopy(other.bytes, other.kmerStartOffset, bytes, this.kmerStartOffset, bytesUsed);
+ }
+ }
+
+ /**
+ * Deep copy of the given kmer
+ *
+ * @param other
+ */
+ @SuppressWarnings("static-access")
+ public void setAsCopy(KmerBytesWritable other) {
+ reset(other.lettersInKmer);
+ if (lettersInKmer > 0) {
+ System.arraycopy(other.bytes, other.offset, bytes, this.kmerStartOffset, bytesUsed);
+ }
+ }
+
+ /**
+ * set from String kmer
+ */
+ public void setAsCopy(String kmer) {
+ setByRead(kmer.length(), kmer.getBytes(), 0);
+ }
+
+ /**
+ * Deep copy of the given bytes data
+ *
+ * @param newData
+ * : byte array to copy (should have a header)
+ * @param offset
+ */
+ public void setAsCopy(byte[] newData, int offset) {
+ int k = Marshal.getInt(newData, offset);
+ reset(k);
+ System.arraycopy(newData, offset + HEADER_SIZE, bytes, this.kmerStartOffset, bytesUsed);
+ }
+
+
+ /**
+ * Point this datablock to the given bytes array It works like the pointer
+ * to new datablock.
+ *
+ * @param newData
+ * : byte array to copy (should have a header)
+ * @param blockOffset
+ */
+ public void setAsReference(byte[] newData, int blockOffset) {
+ bytes = newData;
+ kmerStartOffset = blockOffset + HEADER_SIZE;
+ int kRequested = Marshal.getInt(newData, blockOffset);
+ int bytesRequested = KmerUtil.getByteNumFromK(kRequested) + HEADER_SIZE;
+ if (newData.length - blockOffset < bytesRequested) {
+ throw new IllegalArgumentException("Requested " + bytesRequested + " bytes (k=" + kRequested
+ + ") but buffer has only " + (newData.length - blockOffset) + " bytes");
+ }
+ storageMaxSize = bytesRequested; // since we are a reference, store our max capacity
+ setKmerLength(kRequested);
+ }
+
+ /**
+ * Reset array by kmerlength
+ *
+ * @param k
+ */
+ public void reset(int k) {
+ int newByteLength = KmerUtil.getByteNumFromK(k);
+ if (bytesUsed < newByteLength) {
+ bytes = new byte[newByteLength + HEADER_SIZE];
+ kmerStartOffset = HEADER_SIZE;
+ storageMaxSize = bytes.length;
+ }
+ setKmerLength(k);
+ }
+
+ protected void clearLeadBit() {
+ if (lettersInKmer % 4 != 0) {
+ bytes[kmerStartOffset] &= (1 << ((lettersInKmer % 4) << 1)) - 1;
+ }
+ }
+
+ /**
+ * Get one genecode (A|G|C|T) from the given kmer index e.g. Get the 4th
+ * gene of the kmer ACGTA will return T
+ *
+ * @param pos
+ * @return
+ */
+ public byte getGeneCodeAtPosition(int pos) {
+ if (pos >= lettersInKmer || pos < 0) {
+ throw new ArrayIndexOutOfBoundsException("Gene position (" + pos + ") out of bounds for k=" + lettersInKmer);
+ }
+ return geneCodeAtPosition(pos);
+ }
+
+ /**
+ * unchecked version of getGeneCodeAtPosition. Used when kmerlength is
+ * inaccurate (mid-merge)
+ */
+ private byte geneCodeAtPosition(int pos) {
+ int posByte = pos / 4;
+ int shift = (pos % 4) << 1;
+ return (byte) ((bytes[kmerStartOffset + bytesUsed - 1 - posByte] >> shift) & 0x3);
+ }
+
+ /**
+ * Shift Kmer to accept new char input
+ *
+ * @param c
+ * Input new gene character
+ * @return the shift out gene, in gene code format
+ */
+ public byte shiftKmerWithNextChar(byte c) {
+ return shiftKmerWithNextCode(GeneCode.getCodeFromSymbol(c));
+ }
+
+ /**
+ * Shift Kmer to accept new gene code
+ *
+ * @param c
+ * Input new gene code
+ * @return the shift out gene, in gene code format
+ */
+ public byte shiftKmerWithNextCode(byte c) {
+ byte output = (byte) (bytes[kmerStartOffset + bytesUsed - 1] & 0x03);
+ for (int i = bytesUsed - 1; i > 0; i--) {
+ byte in = (byte) (bytes[kmerStartOffset + i - 1] & 0x03);
+ bytes[kmerStartOffset + i] = (byte) (((bytes[kmerStartOffset + i] >>> 2) & 0x3f) | (in << 6));
+ }
+ int pos = ((lettersInKmer - 1) % 4) << 1;
+ byte code = (byte) (c << pos);
+ bytes[kmerStartOffset] = (byte) (((bytes[kmerStartOffset] >>> 2) & 0x3f) | code);
+ clearLeadBit();
+ return output;
+ }
+
+ /**
+ * Shift Kmer to accept new input char
+ *
+ * @param c
+ * Input new gene character
+ * @return the shiftout gene, in gene code format
+ */
+ public byte shiftKmerWithPreChar(byte c) {
+ return shiftKmerWithPreCode(GeneCode.getCodeFromSymbol(c));
+ }
+
+ /**
+ * Shift Kmer to accept new gene code
+ *
+ * @param c
+ * Input new gene code
+ * @return the shiftout gene, in gene code format
+ */
+ public byte shiftKmerWithPreCode(byte c) {
+ int pos = ((lettersInKmer - 1) % 4) << 1;
+ byte output = (byte) ((bytes[kmerStartOffset] >> pos) & 0x03);
+ for (int i = 0; i < bytesUsed - 1; i++) {
+ byte in = (byte) ((bytes[kmerStartOffset + i + 1] >> 6) & 0x03);
+ bytes[kmerStartOffset + i] = (byte) ((bytes[kmerStartOffset + i] << 2) | in);
+ }
+ bytes[kmerStartOffset + bytesUsed - 1] = (byte) ((bytes[kmerStartOffset + bytesUsed - 1] << 2) | c);
+ clearLeadBit();
+ return output;
+ }
+
+ public int getKmerLetterLength() {
+ return lettersInKmer;
+ }
+
+ @Override
+ public byte[] getBytes() {
+ return ByteBuffer.wrap(bytes, getBlockOffset(), getLength()).array();
+ }
+
+ public byte[] getBlockBytes() {
+ return bytes;
+ }
+
+ /**
+ * Return the (hyracks-specific) data block offset. This includes the header.
+ */
+ public int getBlockOffset() {
+ return kmerStartOffset - HEADER_SIZE;
+ }
+
+ /**
+ * Return the data block offset where the kmer data begins. This excludes the header.
+ */
+ public int getKmerOffset() {
+ return kmerStartOffset;
+ }
+
+ /**
+ * Return the number of bytes used by both header and kmer chain
+ */
+// @Override
+ public int getLength() {
+ return bytesUsed + HEADER_SIZE;
+ }
+
+ /**
+ * Return the number of bytes used by the kmer chain
+ */
+ public int getKmerByteLength() {
+ return bytesUsed;
+ }
+
+
+ public void setKmerLength(int k) {
+ this.bytesUsed = KmerUtil.getByteNumFromK(k);
+ this.lettersInKmer = k;
+ saveHeader(k);
+ }
+
+ protected int getKmerByteCapacity() {
+ return storageMaxSize - HEADER_SIZE;
+ }
+
+ protected void setKmerByteCapacity(int new_cap) {
+ if (new_cap != getKmerByteCapacity()) {
+ byte[] new_data = new byte[new_cap + HEADER_SIZE];
+ if (new_cap < bytesUsed) {
+ bytesUsed = new_cap;
+ }
+ if (bytesUsed != 0) {
+ System.arraycopy(bytes, kmerStartOffset, new_data, HEADER_SIZE, bytesUsed);
+ }
+ bytes = new_data;
+ kmerStartOffset = HEADER_SIZE;
+ storageMaxSize = bytes.length;
+ }
+ }
+
+ private void saveHeader(int length) {
+ Marshal.putInt(length, bytes, kmerStartOffset - HEADER_SIZE);
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ lettersInKmer = in.readInt();
+ bytesUsed = KmerUtil.getByteNumFromK(lettersInKmer);
+ if (lettersInKmer > 0) {
+ if (getKmerByteCapacity() < this.bytesUsed) {
+ this.bytes = new byte[this.bytesUsed + HEADER_SIZE];
+ this.kmerStartOffset = HEADER_SIZE;
+ storageMaxSize = bytes.length;
+ }
+ in.readFully(bytes, kmerStartOffset, bytesUsed);
+ }
+ saveHeader(lettersInKmer);
+ }
+
+ /**
+ * write the entire byte array including the header
+ */
+ @Override
+ public void write(DataOutput out) throws IOException {
+ out.write(bytes, kmerStartOffset - HEADER_SIZE, bytesUsed + HEADER_SIZE);
+ }
+
+ @Override
+ public int hashCode() {
+ return Marshal.hashBytes(bytes, kmerStartOffset - HEADER_SIZE, bytesUsed + HEADER_SIZE);
+ }
+
+ @Override
+ public boolean equals(Object right_obj) {
+ if (right_obj instanceof VKmerBytesWritable) {
+ // since these may be backed by storage of different sizes, we have to manually check each byte, including the header
+ VKmerBytesWritable right = (VKmerBytesWritable) right_obj;
+ for (int i = -HEADER_SIZE; i < bytesUsed; i++) {
+ if (bytes[kmerStartOffset + i] != right.bytes[right.kmerStartOffset + i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return KmerUtil.recoverKmerFrom(this.lettersInKmer, bytes, kmerStartOffset, bytesUsed);
+ }
+
+ public static class Comparator extends WritableComparator {
+
+ public Comparator() {
+ super(VKmerBytesWritable.class);
+ }
+
+ public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
+ int kmerlength1 = Marshal.getInt(b1, s1);
+ int kmerlength2 = Marshal.getInt(b2, s2);
+ if (kmerlength1 == kmerlength2) {
+ return compareBytes(b1, s1 + HEADER_SIZE, l1 - HEADER_SIZE, b2, s2 + HEADER_SIZE, l2 - HEADER_SIZE);
+ }
+ return kmerlength1 - kmerlength2;
+ }
+ }
+
+ static { // register this comparator
+ WritableComparator.define(VKmerBytesWritable.class, new Comparator());
+ }
+
+ /**
+ * Ensures that there is space for at least `size` bytes of kmer (not
+ * including any header)
+ */
+ protected void setSize(int size) {
+ if (size > getKmerByteCapacity()) {
+ setKmerByteCapacity((size * 3 / 2));
+ }
+ this.bytesUsed = size;
+ }
+
+ public void setByRead(int k, byte[] stringBytes, int start) {
+ reset(k);
+ setByRead(stringBytes, start);
+ }
+
+ /**
+ * Read Kmer from read text into bytes array e.g. AATAG will compress as
+ * [0x000G, 0xATAA]
+ *
+ * @param stringBytes
+ * @param start
+ */
+ private void setByRead(byte[] stringBytes, int start) {
+ byte l = 0;
+ int bytecount = 0;
+ int bcount = this.bytesUsed - 1;
+ for (int i = start; i < start + lettersInKmer && i < stringBytes.length; i++) {
+ byte code = GeneCode.getCodeFromSymbol(stringBytes[i]);
+ l |= (byte) (code << bytecount);
+ bytecount += 2;
+ if (bytecount == 8) {
+ bytes[kmerStartOffset + bcount--] = l;
+ l = 0;
+ bytecount = 0;
+ }
+ }
+ if (bcount >= 0) {
+ bytes[kmerStartOffset] = l;
+ }
+ }
+
+ public void setByReadReverse(int k, byte[] stringBytes, int start) {
+ reset(k);
+ setByReadReverse(stringBytes, start);
+ }
+
+ /**
+ * Compress Reversed read into bytes array e.g. AATAG will paired to CTATT,
+ * and then compress as [0x000T,0xTATC]
+ *
+ * @param input
+ * array
+ * @param start
+ * position
+ */
+ private void setByReadReverse(byte[] array, int start) {
+ byte l = 0;
+ int bytecount = 0;
+ int bcount = bytesUsed - 1;
+ // for (int i = start + kmerlength - 1; i >= 0 && i < array.length; i--)
+ // {
+ for (int i = start + lettersInKmer - 1; i >= start && i < array.length; i--) {
+ byte code = GeneCode.getPairedCodeFromSymbol(array[i]);
+ l |= (byte) (code << bytecount);
+ bytecount += 2;
+ if (bytecount == 8) {
+ bytes[kmerStartOffset + bcount--] = l;
+ l = 0;
+ bytecount = 0;
+ }
+ }
+ if (bcount >= 0) {
+ bytes[kmerStartOffset] = l;
+ }
+ }
+
+ /**
+ * Merge Kmer with the next connected Kmer e.g. AAGCTAA merge with AACAACC,
+ * if the initial kmerSize = 3 then it will return AAGCTAACAACC
+ *
+ * @param initialKmerSize
+ * : the initial kmerSize
+ * @param kmer
+ * : the next kmer
+ */
+ public void mergeWithFFKmer(int initialKmerSize, VKmerBytesWritable kmer) {
+ if (lettersInKmer < initialKmerSize - 1 || kmer.lettersInKmer < initialKmerSize - 1) {
+ throw new IllegalArgumentException("Not enough letters in the kmers to perform a merge! Tried K=" + initialKmerSize + ", merge '" + this + "' with '" + kmer + "'.");
+ }
+ int preKmerLength = lettersInKmer;
+ int preSize = bytesUsed;
+ lettersInKmer += kmer.lettersInKmer - initialKmerSize + 1;
+ setSize(KmerUtil.getByteNumFromK(lettersInKmer));
+ for (int i = 1; i <= preSize; i++) {
+ bytes[kmerStartOffset + bytesUsed - i] = bytes[kmerStartOffset + preSize - i];
+ }
+ for (int k = initialKmerSize - 1; k < kmer.getKmerLetterLength(); k += 4) {
+ byte onebyte = KmerBytesWritable.getOneByteFromKmerAtPosition(k, kmer.bytes, kmer.kmerStartOffset,
+ kmer.bytesUsed);
+ KmerBytesWritable.appendOneByteAtPosition(preKmerLength + k - initialKmerSize + 1, onebyte, bytes,
+ kmerStartOffset, bytesUsed);
+ }
+ clearLeadBit();
+ saveHeader(lettersInKmer);
+ }
+
+ public void mergeWithFFKmer(int kmerSize, KmerBytesWritable kmer) {
+ // TODO make this more efficient
+ mergeWithFFKmer(kmerSize, new VKmerBytesWritable(kmer.toString()));
+ }
+
+ /**
+ * Merge Kmer with the next connected Kmer, when that Kmer needs to be
+ * reverse-complemented e.g. AAGCTAA merge with GGTTGTT, if the initial
+ * kmerSize = 3 then it will return AAGCTAACAACC A merge B => A B~
+ *
+ * @param initialKmerSize
+ * : the initial kmerSize
+ * @param kmer
+ * : the next kmer
+ */
+ public void mergeWithFRKmer(int initialKmerSize, VKmerBytesWritable kmer) {
+ if (lettersInKmer < initialKmerSize - 1 || kmer.lettersInKmer < initialKmerSize - 1) {
+ throw new IllegalArgumentException("Not enough letters in the kmers to perform a merge! Tried K=" + initialKmerSize + ", merge '" + this + "' with '" + kmer + "'.");
+ }
+ int preSize = bytesUsed;
+ int preKmerLength = lettersInKmer;
+ lettersInKmer += kmer.lettersInKmer - initialKmerSize + 1;
+ setSize(KmerUtil.getByteNumFromK(lettersInKmer));
+ // copy prefix into right-side of buffer
+ for (int i = 1; i <= preSize; i++) {
+ bytes[kmerStartOffset + bytesUsed - i] = bytes[kmerStartOffset + preSize - i];
+ }
+
+ int bytecount = (preKmerLength % 4) * 2;
+ int bcount = bytesUsed - preSize - bytecount / 8; // may overlap
+ // previous kmer
+ byte l = bcount == bytesUsed - preSize ? bytes[kmerStartOffset + bcount] : 0x00;
+ bytecount %= 8;
+ for (int i = kmer.lettersInKmer - initialKmerSize; i >= 0; i--) {
+ byte code = GeneCode.getPairedGeneCode(kmer.getGeneCodeAtPosition(i));
+ l |= (byte) (code << bytecount);
+ bytecount += 2;
+ if (bytecount == 8) {
+ bytes[kmerStartOffset + bcount--] = l;
+ l = 0;
+ bytecount = 0;
+ }
+ }
+ if (bcount >= 0) {
+ bytes[kmerStartOffset] = l;
+ }
+ saveHeader(lettersInKmer);
+ }
+
+ public void mergeWithFRKmer(int kmerSize, KmerBytesWritable kmer) {
+ // TODO make this more efficient
+ mergeWithFRKmer(kmerSize, new VKmerBytesWritable(kmer.toString()));
+ }
+
+ /**
+ * Merge Kmer with the previous connected Kmer, when that kmer needs to be
+ * reverse-complemented e.g. AACAACC merge with TTCTGCC, if the initial
+ * kmerSize = 3 then it will return GGCAGAACAACC
+ *
+ * @param initialKmerSize
+ * : the initial kmerSize
+ * @param preKmer
+ * : the previous kmer
+ */
+ public void mergeWithRFKmer(int initialKmerSize, VKmerBytesWritable preKmer) {
+ // TODO make this more efficient
+ VKmerBytesWritable reversed = new VKmerBytesWritable(preKmer.lettersInKmer);
+ reversed.setByReadReverse(preKmer.toString().getBytes(), 0);
+ mergeWithRRKmer(initialKmerSize, reversed);
+ }
+
+ public void mergeWithRFKmer(int kmerSize, KmerBytesWritable kmer) {
+ // TODO make this more efficient
+ mergeWithRFKmer(kmerSize, new VKmerBytesWritable(kmer.toString()));
+ }
+
+ /**
+ * Merge Kmer with the previous connected Kmer e.g. AACAACC merge with
+ * AAGCTAA, if the initial kmerSize = 3 then it will return AAGCTAACAACC
+ *
+ * @param initialKmerSize
+ * : the initial kmerSize
+ * @param preKmer
+ * : the previous kmer
+ */
+ public void mergeWithRRKmer(int initialKmerSize, VKmerBytesWritable preKmer) {
+ if (lettersInKmer < initialKmerSize - 1 || preKmer.lettersInKmer < initialKmerSize - 1) {
+ throw new IllegalArgumentException("Not enough letters in the kmers to perform a merge! Tried K=" + initialKmerSize + ", merge '" + this + "' with '" + preKmer + "'.");
+ }
+ int preKmerLength = lettersInKmer;
+ int preSize = bytesUsed;
+ lettersInKmer += preKmer.lettersInKmer - initialKmerSize + 1;
+ setSize(KmerUtil.getByteNumFromK(lettersInKmer));
+ byte cacheByte = KmerBytesWritable.getOneByteFromKmerAtPosition(0, bytes, kmerStartOffset, preSize);
+
+ // copy prekmer
+ for (int k = 0; k < preKmer.lettersInKmer - initialKmerSize + 1; k += 4) {
+ byte onebyte = KmerBytesWritable.getOneByteFromKmerAtPosition(k, preKmer.bytes, preKmer.kmerStartOffset,
+ preKmer.bytesUsed);
+ KmerBytesWritable.appendOneByteAtPosition(k, onebyte, bytes, kmerStartOffset, bytesUsed);
+ }
+
+ // copy current kmer
+ int k = 4;
+ for (; k < preKmerLength; k += 4) {
+ byte onebyte = KmerBytesWritable.getOneByteFromKmerAtPosition(k, bytes, kmerStartOffset, preSize);
+ KmerBytesWritable.appendOneByteAtPosition(preKmer.lettersInKmer - initialKmerSize + k - 4 + 1, cacheByte,
+ bytes, kmerStartOffset, bytesUsed);
+ cacheByte = onebyte;
+ }
+ KmerBytesWritable.appendOneByteAtPosition(preKmer.lettersInKmer - initialKmerSize + k - 4 + 1, cacheByte,
+ bytes, kmerStartOffset, bytesUsed);
+ clearLeadBit();
+ saveHeader(lettersInKmer);
+ }
+
+ public void mergeWithRRKmer(int kmerSize, KmerBytesWritable kmer) {
+ // TODO make this more efficient
+ mergeWithRRKmer(kmerSize, new VKmerBytesWritable(kmer.toString()));
+ }
+
+ public void mergeWithKmerInDir(byte dir, int initialKmerSize, VKmerBytesWritable kmer) {
+ switch (dir & DirectionFlag.DIR_MASK) {
+ case DirectionFlag.DIR_FF:
+ mergeWithFFKmer(initialKmerSize, kmer);
+ break;
+ case DirectionFlag.DIR_FR:
+ mergeWithFRKmer(initialKmerSize, kmer);
+ break;
+ case DirectionFlag.DIR_RF:
+ mergeWithRFKmer(initialKmerSize, kmer);
+ break;
+ case DirectionFlag.DIR_RR:
+ mergeWithRRKmer(initialKmerSize, kmer);
+ break;
+ default:
+ throw new RuntimeException("Direction not recognized: " + dir);
+ }
+ }
+ public void mergeWithKmerInDir(byte dir, int initialKmerSize, KmerBytesWritable kmer) {
+ // TODO make this more efficient
+ mergeWithKmerInDir(dir, initialKmerSize, new VKmerBytesWritable(kmer.toString()));
+ }
+
+ public KmerBytesWritable asFixedLengthKmer() {
+ if (lettersInKmer != KmerBytesWritable.getKmerLength()) {
+ throw new IllegalArgumentException("VKmer " + this.toString() + " is not of the same length as the fixed length Kmer (" + KmerBytesWritable.getKmerLength() + " )!");
+ }
+ return new KmerBytesWritable(bytes, kmerStartOffset);
+ }
+
+ /**
+ * return the edit distance required to transform kemr1 into kmer2 using substitutions, insertions, and deletions.
+ *
+ * This uses the classic dynamic programming algorithm and takes O(length_1 * length_2) time and space.
+ */
+ public static int editDistance(VKmerBytesWritable kmer1, VKmerBytesWritable kmer2) {
+ int rows = kmer1.getKmerLetterLength() + 1, columns = kmer2.getKmerLetterLength() + 1, r=0, c=0, match=0;
+ int[][] distMat = new int[rows][columns];
+
+ // initialize top row and left column
+ for (r = 0; r < rows; r++) {
+ distMat[r][0] = r;
+ }
+ for (c = 0; c < columns; c++) {
+ distMat[0][c] = c;
+ }
+
+ // fill out the matrix as the min of left+1, up+1, and diag+nomatch
+ for (r = 1; r < rows; r++) {
+ for (c = 1; c < columns; c++) {
+ match = kmer1.getGeneCodeAtPosition(r-1) == kmer2.getGeneCodeAtPosition(c-1) ? 0 : 1;
+ distMat[r][c] = min(distMat[r-1][c] + 1,
+ distMat[r][c-1] + 1,
+ distMat[r-1][c-1] + match);
+ }
+ }
+ return distMat[rows - 1][columns - 1];
+ }
+
+ private static int min(int a, int b, int c) {
+ return a <= b ? (a <= c ? a : c) : (b <= c ? b : c);
+ }
+ private static int min(int a, int b) {
+ return a <= b ? a : b;
+ }
+
+ public int editDistance(VKmerBytesWritable other) {
+ return editDistance(this, other);
+ }
+
+ /**
+ * return the fractional difference between the given kmers. This is the edit distance divided by the smaller length.
+ *
+ * Note: the fraction may be larger than 1 (when the edit distance is larger than the kmer)
+ */
+ public static float fracDissimilar(VKmerBytesWritable kmer1, VKmerBytesWritable kmer2) {
+ return editDistance(kmer1, kmer2) / (float) min(kmer1.getKmerLetterLength(), kmer2.getKmerLetterLength());
+ }
+
+ public float fracDissimilar(VKmerBytesWritable other) {
+ return fracDissimilar(this, other);
+ }
+
+ @Override
+ public int compareTo(BinaryComparable other) {
+ Comparator c = new Comparator();
+ if (other instanceof VKmerBytesWritable) {
+ VKmerBytesWritable otherVK = (VKmerBytesWritable) other;
+ return c.compare(getBlockBytes(), getBlockOffset(), getLength(), otherVK.getBlockBytes(), otherVK.getBlockOffset(), otherVK.getLength());
+ }
+ return c.compare(getBlockBytes(), getBlockOffset(), getLength(), other.getBytes(), 0, other.getLength());
+ }
+
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerListWritable.java
new file mode 100644
index 0000000..4856657
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerListWritable.java
@@ -0,0 +1,344 @@
+package edu.uci.ics.genomix.type;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.hadoop.io.Writable;
+
+import edu.uci.ics.genomix.data.KmerUtil;
+import edu.uci.ics.genomix.data.Marshal;
+
+/**
+ * A list of fixed-length kmers. The length of this list is stored internally.
+ */
+public class VKmerListWritable implements Writable, Iterable<VKmerBytesWritable>, Serializable {
+ private static final long serialVersionUID = 1L;
+ protected static final byte[] EMPTY_BYTES = { 0, 0, 0, 0 };
+ protected static final int HEADER_SIZE = 4;
+
+ protected byte[] storage;
+ protected int offset;
+ protected int valueCount;
+ protected int storageMaxSize; // since we may be a reference inside a larger datablock, we must track our maximum size
+
+ private VKmerBytesWritable posIter = new VKmerBytesWritable();
+
+ public VKmerListWritable() {
+ storage = EMPTY_BYTES;
+ valueCount = 0;
+ offset = 0;
+ storageMaxSize = storage.length;
+ }
+
+ public VKmerListWritable(byte[] data, int offset) {
+ setNewReference(data, offset);
+ }
+
+ public VKmerListWritable(List<VKmerBytesWritable> kmers) {
+ this();
+ for (VKmerBytesWritable kmer : kmers) {
+ append(kmer);
+ }
+ }
+
+ public void setNewReference(byte[] data, int offset) {
+ valueCount = Marshal.getInt(data, offset);
+ this.storage = data;
+ this.offset = offset;
+ this.storageMaxSize = getLength();
+ }
+
+ public void append(VKmerBytesWritable kmer) {
+ setSize(getLength() + kmer.getLength());
+ System.arraycopy(kmer.getBlockBytes(), kmer.kmerStartOffset - VKmerBytesWritable.HEADER_SIZE, storage, offset
+ + getLength(), kmer.getLength());
+ valueCount += 1;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ public void append(int k, KmerBytesWritable kmer) {
+ setSize(getLength() + HEADER_SIZE + kmer.getLength());
+ Marshal.putInt(k, storage, offset + getLength());
+ System.arraycopy(kmer.getBytes(), kmer.getOffset(), storage, offset + getLength() + HEADER_SIZE,
+ kmer.getLength());
+ valueCount += 1;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ public void append(KmerBytesWritable kmer) { // TODO optimize this into two separate containers...
+ setSize(getLength() + kmer.getLength() + VKmerBytesWritable.HEADER_SIZE);
+ int myLength = getLength();
+ Marshal.putInt(KmerBytesWritable.getKmerLength(), storage, offset + myLength); // write a new VKmer header
+ System.arraycopy(kmer.getBytes(), kmer.offset,
+ storage, offset + myLength + VKmerBytesWritable.HEADER_SIZE,
+ kmer.getLength());
+ valueCount += 1;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ /*
+ * Append the otherList to the end of myList
+ */
+ public void appendList(VKmerListWritable otherList) {
+ if (otherList.valueCount > 0) {
+ setSize(getLength() + otherList.getLength() - HEADER_SIZE); // one of the headers is redundant
+
+ // copy contents of otherList into the end of my storage
+ System.arraycopy(otherList.storage, otherList.offset + HEADER_SIZE, // skip other header
+ storage, offset + getLength(), // add to end
+ otherList.getLength() - HEADER_SIZE);
+ valueCount += otherList.valueCount;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+ }
+
+ /**
+ * Save the union of my list and otherList. Uses a temporary HashSet for
+ * uniquefication
+ */
+ public void unionUpdate(VKmerListWritable otherList) {
+ int newSize = valueCount + otherList.valueCount;
+ HashSet<VKmerBytesWritable> uniqueElements = new HashSet<VKmerBytesWritable>(newSize);
+ for (VKmerBytesWritable kmer : this) {
+ // have to make copies of my own kmers since I may overwrite them
+ uniqueElements.add(new VKmerBytesWritable(kmer));
+ }
+ for (VKmerBytesWritable kmer : otherList) {
+ uniqueElements.add(kmer); // references okay
+ }
+ setSize(getLength() + otherList.getLength()); // upper bound on memory usage
+ valueCount = 0;
+ for (VKmerBytesWritable kmer : uniqueElements) {
+ append(kmer);
+ }
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ protected void setSize(int size) {
+ if (size > getCapacity()) {
+ setCapacity((size * 3 / 2));
+ }
+ }
+
+ protected int getCapacity() {
+ return storageMaxSize - offset;
+ }
+
+ protected void setCapacity(int new_cap) {
+ if (new_cap > getCapacity()) {
+ byte[] new_data = new byte[new_cap];
+ if (valueCount > 0) {
+ System.arraycopy(storage, offset, new_data, 0, getLength());
+ }
+ storage = new_data;
+ offset = 0;
+ storageMaxSize = storage.length;
+ }
+ }
+
+ public void reset() {
+ valueCount = 0;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ public VKmerBytesWritable getPosition(int i) {
+ posIter.setAsReference(storage, getOffsetOfKmer(i));
+ return posIter;
+ }
+
+ /**
+ * Return the offset of the kmer at the i'th position
+ */
+ public int getOffsetOfKmer(int i) {
+ if (i >= valueCount) {
+ throw new ArrayIndexOutOfBoundsException("No such position " + i + " in list " + toString());
+ }
+ // seek to the given position
+ int posOffset = offset + HEADER_SIZE;
+ for (int curIndex = 0; curIndex < i; curIndex++) {
+ posOffset += KmerUtil.getByteNumFromK(Marshal.getInt(storage, posOffset)) + VKmerBytesWritable.HEADER_SIZE;
+ }
+ return posOffset;
+ }
+
+ public void setCopy(VKmerListWritable otherList) {
+ setCopy(otherList.storage, otherList.offset);
+ }
+
+ /**
+ * read a KmerListWritable from newData, which should include the header
+ */
+ public void setCopy(byte[] newData, int newOffset) {
+ int newValueCount = Marshal.getInt(newData, newOffset);
+ int newLength = getLength(newData, newOffset);
+ setSize(newLength);
+ if (newValueCount > 0) {
+ System.arraycopy(newData, newOffset + HEADER_SIZE, storage, this.offset + HEADER_SIZE, newLength
+ - HEADER_SIZE);
+ }
+ valueCount = newValueCount;
+ Marshal.putInt(valueCount, storage, this.offset);
+ }
+
+ @Override
+ public Iterator<VKmerBytesWritable> iterator() {
+ Iterator<VKmerBytesWritable> it = new Iterator<VKmerBytesWritable>() {
+
+ private int currentIndex = 0;
+ private int currentOffset = offset + HEADER_SIZE; // init as offset of first kmer
+
+ @Override
+ public boolean hasNext() {
+ return currentIndex < valueCount;
+ }
+
+ @Override
+ public VKmerBytesWritable next() {
+ posIter.setAsReference(storage, currentOffset);
+ currentOffset += KmerUtil.getByteNumFromK(Marshal.getInt(storage, currentOffset))
+ + VKmerBytesWritable.HEADER_SIZE;
+ currentIndex++;
+ return posIter;
+ }
+
+ @Override
+ public void remove() {
+ if (currentOffset <= 0) {
+ throw new IllegalStateException(
+ "You must advance the iterator using .next() before calling remove()!");
+ }
+ // we're removing the element at prevIndex
+ int prevIndex = currentIndex - 1;
+ int prevOffset = getOffsetOfKmer(prevIndex);
+
+ if (currentIndex < valueCount) { // if it's the last element, don't have to do any copying
+ System.arraycopy(storage, currentOffset, // from the "next" element
+ storage, prevOffset, // to the one just returned (overwriting it)
+ getLength() - currentOffset + offset); // remaining bytes except current element
+ }
+ valueCount--;
+ currentIndex--;
+ Marshal.putInt(valueCount, storage, offset);
+ currentOffset = prevOffset;
+ }
+ };
+ return it;
+ }
+
+ public boolean contains(VKmerListWritable kmer){
+ Iterator<VKmerBytesWritable> posIterator = this.iterator();
+ while (posIterator.hasNext()) {
+ if (kmer.equals(posIterator.next()))
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ * remove the first instance of `toRemove`. Uses a linear scan. Throws an
+ * exception if not in this list.
+ */
+ public void remove(VKmerBytesWritable toRemove, boolean ignoreMissing) {
+ Iterator<VKmerBytesWritable> posIterator = this.iterator();
+ while (posIterator.hasNext()) {
+ if (toRemove.equals(posIterator.next())) {
+ posIterator.remove();
+ return; // break as soon as the element is found
+ }
+ }
+ // element was not found
+ if (!ignoreMissing) {
+ throw new ArrayIndexOutOfBoundsException("the KmerBytesWritable `" + toRemove.toString()
+ + "` was not found in this list.");
+ }
+ }
+
+ public void remove(VKmerBytesWritable toRemove) {
+ remove(toRemove, false);
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ int newValueCount = in.readInt();
+ int curOffset = offset + HEADER_SIZE;
+ int elemBytes = 0;
+ int elemLetters = 0;
+ int curLength = getLength();
+ for (int i = 0; i < newValueCount; i++) {
+ elemLetters = in.readInt();
+ elemBytes = KmerUtil.getByteNumFromK(elemLetters) + VKmerBytesWritable.HEADER_SIZE;
+ setSize(curLength + elemBytes); // make sure we have room for the new element
+ Marshal.putInt(elemLetters, storage, curOffset); // write header
+ in.readFully(storage, curOffset + VKmerBytesWritable.HEADER_SIZE, elemBytes
+ - VKmerBytesWritable.HEADER_SIZE); // write kmer
+ curOffset += elemBytes;
+ curLength += elemBytes;
+ valueCount++;
+ }
+ valueCount = newValueCount;
+ Marshal.putInt(valueCount, storage, offset);
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ out.write(storage, offset, getLength());
+ }
+
+ public int getCountOfPosition() {
+ return valueCount;
+ }
+
+ public byte[] getByteArray() {
+ return storage;
+ }
+
+ public int getStartOffset() {
+ return offset;
+ }
+
+ public int getLength() {
+ int totalSize = HEADER_SIZE;
+ for (int curCount = 0; curCount < valueCount; curCount++) {
+ totalSize += KmerUtil.getByteNumFromK(Marshal.getInt(storage, offset + totalSize))
+ + VKmerBytesWritable.HEADER_SIZE;
+ }
+ return totalSize;
+ }
+
+ public static int getLength(byte[] listStorage, int listOffset) {
+ int totalSize = HEADER_SIZE;
+ int listValueCount = Marshal.getInt(listStorage, listOffset);
+ for (int curCount = 0; curCount < listValueCount; curCount++) {
+ totalSize += KmerUtil.getByteNumFromK(Marshal.getInt(listStorage, listOffset + totalSize))
+ + VKmerBytesWritable.HEADER_SIZE;
+ }
+ return totalSize;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sbuilder = new StringBuilder();
+ sbuilder.append('[');
+ for (int i = 0; i < valueCount; i++) {
+ sbuilder.append(getPosition(i).toString());
+ sbuilder.append(',');
+ }
+ if (valueCount > 0) {
+ sbuilder.setCharAt(sbuilder.length() - 1, ']');
+ } else {
+ sbuilder.append(']');
+ }
+ return sbuilder.toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Marshal.hashBytes(getByteArray(), getStartOffset(), getLength());
+ }
+}
diff --git a/genomix/genomix-data/src/main/resources/conf/cluster.properties b/genomix/genomix-data/src/main/resources/conf/cluster.properties
new file mode 100644
index 0000000..eabd81b
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/conf/cluster.properties
@@ -0,0 +1,40 @@
+#The CC port for Hyracks clients
+CC_CLIENTPORT=3099
+
+#The CC port for Hyracks cluster management
+CC_CLUSTERPORT=1099
+
+#The directory of hyracks binaries
+HYRACKS_HOME="../../../../hyracks"
+
+#The tmp directory for cc to install jars
+CCTMP_DIR=/tmp/t1
+
+#The tmp directory for nc to install jars
+NCTMP_DIR=/tmp/t2
+
+#The directory to put cc logs
+CCLOGS_DIR=$CCTMP_DIR/logs
+
+#The directory to put nc logs
+NCLOGS_DIR=$NCTMP_DIR/logs
+
+#Comma separated I/O directories for the spilling of external sort
+IO_DIRS="/tmp/t3,/tmp/t4"
+
+#The JAVA_HOME
+JAVA_HOME=$JAVA_HOME
+
+#HADOOP_HOME
+CLASSPATH="${HADOOP_HOME}:${CLASSPATH}:."
+
+#The frame size of the internal dataflow engine
+FRAME_SIZE=65536
+
+#CC JAVA_OPTS
+CCJAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=7001,server=y,suspend=n -Xmx1g -Djava.util.logging.config.file=logging.properties"
+# Yourkit option: -agentpath:/grid/0/dev/vborkar/tools/yjp-10.0.4/bin/linux-x86-64/libyjpagent.so=port=20001"
+
+#NC JAVA_OPTS
+NCJAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=7002,server=y,suspend=n -Xmx10g -Djava.util.logging.config.file=logging.properties"
+
diff --git a/genomix/genomix-data/src/main/resources/conf/debugnc.properties b/genomix/genomix-data/src/main/resources/conf/debugnc.properties
new file mode 100644
index 0000000..27afa26
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/conf/debugnc.properties
@@ -0,0 +1,12 @@
+#The tmp directory for nc to install jars
+NCTMP_DIR2=/tmp/t-1
+
+#The directory to put nc logs
+NCLOGS_DIR2=$NCTMP_DIR/logs
+
+#Comma separated I/O directories for the spilling of external sort
+IO_DIRS2="/tmp/t-2,/tmp/t-3"
+
+#NC JAVA_OPTS
+NCJAVA_OPTS2="-Xdebug -Xrunjdwp:transport=dt_socket,address=7003,server=y,suspend=n -Xmx1g -Djava.util.logging.config.file=logging.properties"
+
diff --git a/genomix/genomix-data/src/main/resources/conf/master b/genomix/genomix-data/src/main/resources/conf/master
new file mode 100644
index 0000000..2fbb50c
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/conf/master
@@ -0,0 +1 @@
+localhost
diff --git a/genomix/genomix-data/src/main/resources/conf/slaves b/genomix/genomix-data/src/main/resources/conf/slaves
new file mode 100644
index 0000000..2fbb50c
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/conf/slaves
@@ -0,0 +1 @@
+localhost
diff --git a/genomix/genomix-data/src/main/resources/scripts/genomix b/genomix/genomix-data/src/main/resources/scripts/genomix
new file mode 100644
index 0000000..bdd7f20
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/genomix
@@ -0,0 +1,113 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Copyright 2001-2006 The Apache Software Foundation.
+#
+# 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 at
+#
+# 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.
+# ----------------------------------------------------------------------------
+#
+# Copyright (c) 2001-2006 The Apache Software Foundation. All rights
+# reserved.
+
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [ -h "$PRG" ]; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`/"$link"
+ fi
+done
+
+PRGDIR=`dirname "$PRG"`
+BASEDIR=`cd "$PRGDIR/.." >/dev/null; pwd`
+
+
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ Darwin*) darwin=true
+ if [ -z "$JAVA_VERSION" ] ; then
+ JAVA_VERSION="CurrentJDK"
+ else
+ echo "Using Java version: $JAVA_VERSION"
+ fi
+ if [ -z "$JAVA_HOME" ] ; then
+ JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Home
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# If a specific java binary isn't specified search for the standard 'java' binary
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD=`which java`
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." 1>&2
+ echo " We cannot execute $JAVACMD" 1>&2
+ exit 1
+fi
+
+if [ -z "$REPO" ]
+then
+ REPO="$BASEDIR"/lib
+fi
+
+CLASSPATH=$CLASSPATH_PREFIX:"$BASEDIR"/etc:"$REPO"/hyracks-dataflow-std-0.2.3-SNAPSHOT.jar:"$REPO"/hyracks-api-0.2.3-SNAPSHOT.jar:"$REPO"/json-20090211.jar:"$REPO"/httpclient-4.1-alpha2.jar:"$REPO"/httpcore-4.1-beta1.jar:"$REPO"/commons-logging-1.1.1.jar:"$REPO"/commons-codec-1.4.jar:"$REPO"/args4j-2.0.12.jar:"$REPO"/commons-lang3-3.1.jar:"$REPO"/hyracks-dataflow-common-0.2.3-SNAPSHOT.jar:"$REPO"/hyracks-data-std-0.2.3-SNAPSHOT.jar:"$REPO"/hyracks-control-cc-0.2.3-SNAPSHOT.jar:"$REPO"/hyracks-control-common-0.2.3-SNAPSHOT.jar:"$REPO"/jetty-server-8.0.0.RC0.jar:"$REPO"/servlet-api-3.0.20100224.jar:"$REPO"/jetty-continuation-8.0.0.RC0.jar:"$REPO"/jetty-http-8.0.0.RC0.jar:"$REPO"/jetty-io-8.0.0.RC0.jar:"$REPO"/jetty-webapp-8.0.0.RC0.jar:"$REPO"/jetty-xml-8.0.0.RC0.jar:"$REPO"/jetty-util-8.0.0.RC0.jar:"$REPO"/jetty-servlet-8.0.0.RC0.jar:"$REPO"/jetty-security-8.0.0.RC0.jar:"$REPO"/wicket-core-1.5.2.jar:"$REPO"/wicket-util-1.5.2.jar:"$REPO"/wicket-request-1.5.2.jar:"$REPO"/slf4j-api-1.6.1.jar:"$REPO"/slf4j-jcl-1.6.3.jar:"$REPO"/hyracks-control-nc-0.2.3-SNAPSHOT.jar:"$REPO"/dcache-client-0.0.1.jar:"$REPO"/jetty-client-8.0.0.M0.jar:"$REPO"/hyracks-net-0.2.3-SNAPSHOT.jar:"$REPO"/commons-io-1.3.1.jar:"$REPO"/hyracks-ipc-0.2.3-SNAPSHOT.jar:"$REPO"/genomix-0.2.3-SNAPSHOT.pom
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$HOME" ] && HOME=`cygpath --path --windows "$HOME"`
+ [ -n "$BASEDIR" ] && BASEDIR=`cygpath --path --windows "$BASEDIR"`
+ [ -n "$REPO" ] && REPO=`cygpath --path --windows "$REPO"`
+fi
+
+exec "$JAVACMD" $JAVA_OPTS \
+ -classpath "$CLASSPATH" \
+ -Dapp.name="genomix" \
+ -Dapp.pid="$$" \
+ -Dapp.repo="$REPO" \
+ -Dapp.home="$BASEDIR" \
+ -Dbasedir="$BASEDIR" \
+ edu.uci.ics.genomix.driver.Driver \
+ "$@"
diff --git a/genomix/genomix-data/src/main/resources/scripts/genomix.bat b/genomix/genomix-data/src/main/resources/scripts/genomix.bat
new file mode 100644
index 0000000..1bd2098
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/genomix.bat
@@ -0,0 +1,108 @@
+@REM ----------------------------------------------------------------------------
+@REM Copyright 2001-2006 The Apache Software Foundation.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+@REM ----------------------------------------------------------------------------
+@REM
+@REM Copyright (c) 2001-2006 The Apache Software Foundation. All rights
+@REM reserved.
+
+@echo off
+
+set ERROR_CODE=0
+
+:init
+@REM Decide how to startup depending on the version of windows
+
+@REM -- Win98ME
+if NOT "%OS%"=="Windows_NT" goto Win9xArg
+
+@REM set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" @setlocal
+
+@REM -- 4NT shell
+if "%eval[2+2]" == "4" goto 4NTArgs
+
+@REM -- Regular WinNT shell
+set CMD_LINE_ARGS=%*
+goto WinNTGetScriptDir
+
+@REM The 4NT Shell from jp software
+:4NTArgs
+set CMD_LINE_ARGS=%$
+goto WinNTGetScriptDir
+
+:Win9xArg
+@REM Slurp the command line arguments. This loop allows for an unlimited number
+@REM of arguments (up to the command line limit, anyway).
+set CMD_LINE_ARGS=
+:Win9xApp
+if %1a==a goto Win9xGetScriptDir
+set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
+shift
+goto Win9xApp
+
+:Win9xGetScriptDir
+set SAVEDIR=%CD%
+%0\
+cd %0\..\..
+set BASEDIR=%CD%
+cd %SAVEDIR%
+set SAVE_DIR=
+goto repoSetup
+
+:WinNTGetScriptDir
+set BASEDIR=%~dp0\..
+
+:repoSetup
+
+
+if "%JAVACMD%"=="" set JAVACMD=java
+
+if "%REPO%"=="" set REPO=%BASEDIR%\lib
+
+set CLASSPATH="%BASEDIR%"\etc;"%REPO%"\hyracks-dataflow-std-0.2.3-SNAPSHOT.jar;"%REPO%"\hyracks-api-0.2.3-SNAPSHOT.jar;"%REPO%"\json-20090211.jar;"%REPO%"\httpclient-4.1-alpha2.jar;"%REPO%"\httpcore-4.1-beta1.jar;"%REPO%"\commons-logging-1.1.1.jar;"%REPO%"\commons-codec-1.4.jar;"%REPO%"\args4j-2.0.12.jar;"%REPO%"\commons-lang3-3.1.jar;"%REPO%"\hyracks-dataflow-common-0.2.3-SNAPSHOT.jar;"%REPO%"\hyracks-data-std-0.2.3-SNAPSHOT.jar;"%REPO%"\hyracks-control-cc-0.2.3-SNAPSHOT.jar;"%REPO%"\hyracks-control-common-0.2.3-SNAPSHOT.jar;"%REPO%"\jetty-server-8.0.0.RC0.jar;"%REPO%"\servlet-api-3.0.20100224.jar;"%REPO%"\jetty-continuation-8.0.0.RC0.jar;"%REPO%"\jetty-http-8.0.0.RC0.jar;"%REPO%"\jetty-io-8.0.0.RC0.jar;"%REPO%"\jetty-webapp-8.0.0.RC0.jar;"%REPO%"\jetty-xml-8.0.0.RC0.jar;"%REPO%"\jetty-util-8.0.0.RC0.jar;"%REPO%"\jetty-servlet-8.0.0.RC0.jar;"%REPO%"\jetty-security-8.0.0.RC0.jar;"%REPO%"\wicket-core-1.5.2.jar;"%REPO%"\wicket-util-1.5.2.jar;"%REPO%"\wicket-request-1.5.2.jar;"%REPO%"\slf4j-api-1.6.1.jar;"%REPO%"\slf4j-jcl-1.6.3.jar;"%REPO%"\hyracks-control-nc-0.2.3-SNAPSHOT.jar;"%REPO%"\dcache-client-0.0.1.jar;"%REPO%"\jetty-client-8.0.0.M0.jar;"%REPO%"\hyracks-net-0.2.3-SNAPSHOT.jar;"%REPO%"\commons-io-1.3.1.jar;"%REPO%"\hyracks-ipc-0.2.3-SNAPSHOT.jar;"%REPO%"\genomix-0.2.3-SNAPSHOT.pom
+goto endInit
+
+@REM Reaching here means variables are defined and arguments have been captured
+:endInit
+
+%JAVACMD% %JAVA_OPTS% -classpath %CLASSPATH_PREFIX%;%CLASSPATH% -Dapp.name="genomix" -Dapp.repo="%REPO%" -Dapp.home="%BASEDIR%" -Dbasedir="%BASEDIR%" edu.uci.ics.genomix.driver.Driver %CMD_LINE_ARGS%
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+if "%OS%"=="Windows_NT" @endlocal
+set ERROR_CODE=%ERRORLEVEL%
+
+:end
+@REM set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" goto endNT
+
+@REM For old DOS remove the set variables from ENV - we assume they were not set
+@REM before we started - at least we don't leave any baggage around
+set CMD_LINE_ARGS=
+goto postExec
+
+:endNT
+@REM If error code is set to 1 then the endlocal was done already in :error.
+if %ERROR_CODE% EQU 0 @endlocal
+
+
+:postExec
+
+if "%FORCE_EXIT_ON_ERROR%" == "on" (
+ if %ERROR_CODE% NEQ 0 exit %ERROR_CODE%
+)
+
+exit /B %ERROR_CODE%
diff --git a/genomix/genomix-data/src/main/resources/scripts/getip.sh b/genomix/genomix-data/src/main/resources/scripts/getip.sh
new file mode 100644
index 0000000..e0cdf73
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/getip.sh
@@ -0,0 +1,21 @@
+#get the OS
+OS_NAME=`uname -a|awk '{print $1}'`
+LINUX_OS='Linux'
+
+if [ $OS_NAME = $LINUX_OS ];
+then
+ #Get IP Address
+ IPADDR=`/sbin/ifconfig eth0 | grep "inet " | awk '{print $2}' | cut -f 2 -d ':'`
+ if [ "$IPADDR" = "" ]
+ then
+ IPADDR=`/sbin/ifconfig lo | grep "inet " | awk '{print $2}' | cut -f 2 -d ':'`
+ fi
+else
+ IPADDR=`/sbin/ifconfig en1 | grep "inet " | awk '{print $2}' | cut -f 2 -d ':'`
+ if [ "$IPADDR" = "" ]
+ then
+ IPADDR=`/sbin/ifconfig lo0 | grep "inet " | awk '{print $2}' | cut -f 2 -d ':'`
+ fi
+
+fi
+echo $IPADDR
diff --git a/genomix/genomix-data/src/main/resources/scripts/startAllNCs.sh b/genomix/genomix-data/src/main/resources/scripts/startAllNCs.sh
new file mode 100644
index 0000000..5e38c40
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/startAllNCs.sh
@@ -0,0 +1,6 @@
+GENOMIX_PATH=`pwd`
+
+for i in `cat conf/slaves`
+do
+ ssh $i "cd ${GENOMIX_PATH}; bin/startnc.sh"
+done
diff --git a/genomix/genomix-data/src/main/resources/scripts/startCluster.sh b/genomix/genomix-data/src/main/resources/scripts/startCluster.sh
new file mode 100755
index 0000000..4727764
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/startCluster.sh
@@ -0,0 +1,19 @@
+bin/startcc.sh
+sleep 5
+bin/startAllNCs.sh
+
+. conf/cluster.properties
+# do we need to specify the version somewhere?
+hyrackcmd=`ls ${HYRACKS_HOME}/hyracks-cli/target/hyracks-cli-*-binary-assembly/bin/hyrackscli`
+# find zip file
+appzip=`ls $PWD/../genomix-*-binary-assembly.zip`
+
+[ -f $hyrackcmd ] || { echo "Hyracks commandline is missing"; exit -1;}
+[ -f $appzip ] || { echo "Genomix binary-assembly.zip is missing"; exit -1;}
+
+CCHOST_NAME=`cat conf/master`
+
+IPADDR=`bin/getip.sh`
+echo "connect to \"${IPADDR}:${CC_CLIENTPORT}\"; create application genomix \"$appzip\";" | $hyrackcmd
+echo ""
+
diff --git a/genomix/genomix-data/src/main/resources/scripts/startDebugNc.sh b/genomix/genomix-data/src/main/resources/scripts/startDebugNc.sh
new file mode 100644
index 0000000..fe6cf27
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/startDebugNc.sh
@@ -0,0 +1,50 @@
+hostname
+
+#Get the IP address of the cc
+CCHOST_NAME=`cat conf/master`
+CURRENT_PATH=`pwd`
+CCHOST=`ssh ${CCHOST_NAME} "cd ${CURRENT_PATH}; bin/getip.sh"`
+
+#Import cluster properties
+. conf/cluster.properties
+. conf/debugnc.properties
+
+#Clean up temp dir
+
+rm -rf $NCTMP_DIR2
+mkdir $NCTMP_DIR2
+
+#Clean up log dir
+rm -rf $NCLOGS_DIR2
+mkdir $NCLOGS_DIR2
+
+
+#Clean up I/O working dir
+io_dirs=$(echo $IO_DIRS2 | tr "," "\n")
+for io_dir in $io_dirs
+do
+ rm -rf $io_dir
+ mkdir $io_dir
+done
+
+#Set JAVA_HOME
+export JAVA_HOME=$JAVA_HOME
+
+#Get OS
+IPADDR=`bin/getip.sh`
+
+#Get node ID
+NODEID=`hostname | cut -d '.' -f 1`
+NODEID=${NODEID}2
+
+#Set JAVA_OPTS
+export JAVA_OPTS=$NCJAVA_OPTS2
+
+cd $HYRACKS_HOME
+HYRACKS_HOME=`pwd`
+
+#Enter the temp dir
+cd $NCTMP_DIR2
+
+#Launch hyracks nc
+$HYRACKS_HOME/hyracks-server/target/appassembler/bin/hyracksnc -cc-host $CCHOST -cc-port $CC_CLUSTERPORT -cluster-net-ip-address $IPADDR -data-ip-address $IPADDR -node-id $NODEID -iodevices "${IO_DIRS2}" &> $NCLOGS_DIR2/$NODEID.log &
diff --git a/genomix/genomix-data/src/main/resources/scripts/startcc.sh b/genomix/genomix-data/src/main/resources/scripts/startcc.sh
new file mode 100644
index 0000000..fe2551d
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/startcc.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+hostname
+
+#Import cluster properties
+. conf/cluster.properties
+
+#Get the IP address of the cc
+CCHOST_NAME=`cat conf/master`
+CCHOST=`bin/getip.sh`
+
+#Remove the temp dir
+rm -rf $CCTMP_DIR
+mkdir $CCTMP_DIR
+
+#Remove the logs dir
+rm -rf $CCLOGS_DIR
+mkdir $CCLOGS_DIR
+
+#Export JAVA_HOME and JAVA_OPTS
+export JAVA_HOME=$JAVA_HOME
+export JAVA_OPTS=$CCJAVA_OPTS
+
+#Launch hyracks cc script
+chmod -R 755 $HYRACKS_HOME
+$HYRACKS_HOME/hyracks-server/target/appassembler/bin/hyrackscc -client-net-ip-address $CCHOST -cluster-net-ip-address $CCHOST -client-net-port $CC_CLIENTPORT -cluster-net-port $CC_CLUSTERPORT -max-heartbeat-lapse-periods 999999 -default-max-job-attempts 0 -job-history-size 3 &> $CCLOGS_DIR/cc.log &
diff --git a/genomix/genomix-data/src/main/resources/scripts/startnc.sh b/genomix/genomix-data/src/main/resources/scripts/startnc.sh
new file mode 100644
index 0000000..6e0f90e
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/startnc.sh
@@ -0,0 +1,49 @@
+hostname
+
+MY_NAME=`hostname`
+#Get the IP address of the cc
+CCHOST_NAME=`cat conf/master`
+CURRENT_PATH=`pwd`
+CCHOST=`ssh ${CCHOST_NAME} "cd ${CURRENT_PATH}; bin/getip.sh"`
+
+#Import cluster properties
+. conf/cluster.properties
+
+#Clean up temp dir
+
+rm -rf $NCTMP_DIR
+mkdir $NCTMP_DIR
+
+#Clean up log dir
+rm -rf $NCLOGS_DIR
+mkdir $NCLOGS_DIR
+
+
+#Clean up I/O working dir
+io_dirs=$(echo $IO_DIRS | tr "," "\n")
+for io_dir in $io_dirs
+do
+ rm -rf $io_dir
+ mkdir $io_dir
+done
+
+#Set JAVA_HOME
+export JAVA_HOME=$JAVA_HOME
+
+IPADDR=`bin/getip.sh`
+#echo $IPADDR
+
+#Get node ID
+NODEID=`hostname | cut -d '.' -f 1`
+
+#Set JAVA_OPTS
+export JAVA_OPTS=$NCJAVA_OPTS
+
+cd $HYRACKS_HOME
+HYRACKS_HOME=`pwd`
+
+#Enter the temp dir
+cd $NCTMP_DIR
+
+#Launch hyracks nc
+$HYRACKS_HOME/hyracks-server/target/appassembler/bin/hyracksnc -cc-host $CCHOST -cc-port $CC_CLUSTERPORT -cluster-net-ip-address $IPADDR -data-ip-address $IPADDR -node-id $NODEID -iodevices "${IO_DIRS}" &> $NCLOGS_DIR/$NODEID.log &
diff --git a/genomix/genomix-data/src/main/resources/scripts/stopAllNCs.sh b/genomix/genomix-data/src/main/resources/scripts/stopAllNCs.sh
new file mode 100644
index 0000000..66ed866
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/stopAllNCs.sh
@@ -0,0 +1,6 @@
+GENOMIX_PATH=`pwd`
+
+for i in `cat conf/slaves`
+do
+ ssh $i "cd ${GENOMIX_PATH}; bin/stopnc.sh"
+done
diff --git a/genomix/genomix-data/src/main/resources/scripts/stopCluster.sh b/genomix/genomix-data/src/main/resources/scripts/stopCluster.sh
new file mode 100644
index 0000000..4889934
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/stopCluster.sh
@@ -0,0 +1,3 @@
+bin/stopAllNCs.sh
+sleep 2
+bin/stopcc.sh
diff --git a/genomix/genomix-data/src/main/resources/scripts/stopcc.sh b/genomix/genomix-data/src/main/resources/scripts/stopcc.sh
new file mode 100644
index 0000000..1865054
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/stopcc.sh
@@ -0,0 +1,10 @@
+hostname
+. conf/cluster.properties
+
+#Kill process
+PID=`ps -ef|grep ${USER}|grep java|grep hyracks|awk '{print $2}'`
+echo $PID
+[ "$PID" != "" ] && kill -9 $PID
+
+#Clean up CC temp dir
+rm -rf $CCTMP_DIR/*
diff --git a/genomix/genomix-data/src/main/resources/scripts/stopnc.sh b/genomix/genomix-data/src/main/resources/scripts/stopnc.sh
new file mode 100644
index 0000000..3928bb7
--- /dev/null
+++ b/genomix/genomix-data/src/main/resources/scripts/stopnc.sh
@@ -0,0 +1,23 @@
+hostname
+. conf/cluster.properties
+
+#Kill process
+PID=`ps -ef|grep ${USER}|grep java|grep 'Dapp.name=hyracksnc'|awk '{print $2}'`
+
+if [ "$PID" == "" ]; then
+ USERID=`id | sed 's/^uid=//;s/(.*$//'`
+ PID=`ps -ef|grep ${USERID}|grep java|grep 'Dapp.name=hyracksnc'|awk '{print $2}'`
+fi
+
+echo $PID
+[ "$PID" != "" ] && kill -9 $PID
+
+#Clean up I/O working dir
+io_dirs=$(echo $IO_DIRS | tr "," "\n")
+for io_dir in $io_dirs
+do
+ rm -rf $io_dir/*
+done
+
+#Clean up NC temp dir
+rm -rf $NCTMP_DIR/*
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeWritableTest.java
new file mode 100644
index 0000000..509831d
--- /dev/null
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/EdgeWritableTest.java
@@ -0,0 +1,134 @@
+package edu.uci.ics.genomix.data.test;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import edu.uci.ics.genomix.type.EdgeListWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.PositionListWritable;
+import edu.uci.ics.genomix.type.PositionWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+public class EdgeWritableTest {
+
+ @Test
+ public void TestInitial() {
+ EdgeListWritable elist = new EdgeListWritable();
+ Assert.assertEquals(0, elist.getCountOfPosition());
+ Assert.assertEquals(4, elist.getLength());
+
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable("ACCGCTTAGATACC");
+ PositionListWritable plist1 = new PositionListWritable();
+ plist1.append((byte)1, (long)50, 20);
+ plist1.append((byte)0, (long)500, 200);
+ plist1.append((byte)1, (long)20, 10);
+ EdgeWritable e1 = new EdgeWritable(kmer1, plist1);
+
+ Assert.assertEquals(50, e1.getReadIDs().getPosition(0).getReadId());
+ Assert.assertEquals(0, e1.getReadIDs().getPosition(0).getPosId());
+ Assert.assertEquals(0, e1.getReadIDs().getPosition(0).getMateId());
+ Assert.assertEquals(500, e1.getReadIDs().getPosition(1).getReadId());
+ Assert.assertEquals(0, e1.getReadIDs().getPosition(1).getPosId());
+ Assert.assertEquals(0, e1.getReadIDs().getPosition(1).getMateId());
+ Assert.assertEquals(20, e1.getReadIDs().getPosition(2).getReadId());
+ Assert.assertEquals(0, e1.getReadIDs().getPosition(2).getPosId());
+ Assert.assertEquals(0, e1.getReadIDs().getPosition(2).getMateId());
+
+ Assert.assertEquals("ACCGCTTAGATACC", e1.getKey().toString());
+ Assert.assertEquals("{ACCGCTTAGATACC:[20,50,500]}", e1.toString()); // sorted order
+ }
+
+ @Test
+ public void TestLists() throws IOException {
+ byte mateId;
+ long readId;
+ int posId;
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable("ACCGCTTAGATACC");
+ VKmerBytesWritable kmer2 = new VKmerBytesWritable("TACGTACGTAGCTG");
+ PositionListWritable plist1 = new PositionListWritable();
+ PositionListWritable plist2 = new PositionListWritable();
+ EdgeWritable e1 = new EdgeWritable(kmer1, plist1);
+ EdgeWritable e2 = new EdgeWritable(kmer2, plist2);
+
+ for (int i = 0; i < 200; i++) {
+ mateId = (byte) (i % 2);
+ readId = (long)i + 5;
+ posId = i + 3;
+ e1.appendReadID(readId);
+ Assert.assertEquals(0, e1.getReadIDs().getPosition(i).getMateId());
+ Assert.assertEquals(readId, e1.getReadIDs().getPosition(i).getReadId());
+ Assert.assertEquals(0, e1.getReadIDs().getPosition(i).getPosId());
+ if (i % 2 == 0) {
+ e2.appendReadID(new PositionWritable(mateId, readId, posId));
+ Assert.assertEquals(0, e2.getReadIDs().getPosition(i / 2).getMateId());
+ Assert.assertEquals(readId, e2.getReadIDs().getPosition(i / 2).getReadId());
+ Assert.assertEquals(0, e2.getReadIDs().getPosition(i / 2).getPosId());
+ }
+ Assert.assertEquals(i + 1, e1.getReadIDs().getCountOfPosition());
+ Assert.assertEquals(i / 2 + 1, e2.getReadIDs().getCountOfPosition());
+ }
+ Assert.assertEquals("ACCGCTTAGATACC", e1.getKey().toString());
+ Assert.assertEquals("TACGTACGTAGCTG", e2.getKey().toString());
+
+ int i = 0;
+ for (PositionWritable p : e1.getReadIDs()) {
+ Assert.assertEquals((byte)0, p.getMateId());
+ Assert.assertEquals((long) i + 5, p.getReadId());
+ Assert.assertEquals(0, p.getPosId());
+ i++;
+ }
+
+ byte [] another1 = new byte [e1.getLength()*2];
+ int start = 20;
+ System.arraycopy(e1.marshalToByteArray(), 0, another1, start, e1.getLength());
+ EdgeWritable e3 = new EdgeWritable(another1, start); // reference
+ Assert.assertEquals(e1.getKey(), e3.getKey());
+ for( i = 0; i < plist2.getCountOfPosition(); i++){
+ Assert.assertEquals(e1.getReadIDs().getPosition(i), e3.getReadIDs().getPosition(i));
+ }
+
+ // overwrite previous, and make copies of the array
+ start = 40;
+ System.arraycopy(e2.marshalToByteArray(), 0, another1, start, e2.getLength());
+ EdgeWritable e4 = new EdgeWritable(new EdgeWritable(another1, start)); // reference
+ Assert.assertEquals(e2.getKey(), e4.getKey());
+ for( i = 0; i < plist2.getCountOfPosition(); i++){
+ Assert.assertEquals(e2.getReadIDs().getPosition(i), e4.getReadIDs().getPosition(i));
+ }
+ }
+
+ @Test
+ public void TestIterator() {
+ EdgeListWritable elist = new EdgeListWritable();
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable("ACCGCTTAGATACC");
+ PositionListWritable plist1 = new PositionListWritable();
+ plist1.append((byte)1, (long)50, 20);
+ plist1.append((byte)0, (long)500, 200);
+ plist1.append((byte)1, (long)20, 10);
+ EdgeWritable e1 = new EdgeWritable(kmer1, plist1);
+ elist.add(e1);
+ VKmerBytesWritable kmer2 = new VKmerBytesWritable("ATAGCTGAC");
+ elist.add(new EdgeWritable(kmer2, plist1));
+
+ Iterator<VKmerBytesWritable> keyIter = elist.getKeys();
+ Assert.assertTrue(keyIter.hasNext());
+ Assert.assertEquals(kmer1, keyIter.next());
+ Assert.assertEquals(kmer2, keyIter.next());
+ Assert.assertFalse(keyIter.hasNext());
+ keyIter.remove();
+
+ long[] expected = {50, 500, 20}, readIDs = elist.get(0).readIDArray();
+ Iterator<Long> it = elist.get(0).readIDIter();
+ for (int i=0; i < expected.length; i++) {
+ Assert.assertEquals(expected[i], readIDs[i]);
+ Assert.assertTrue(it.hasNext());
+ long actual = it.next();
+ Assert.assertEquals(expected[i], actual);
+ }
+ Assert.assertFalse(it.hasNext());
+ }
+}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java
new file mode 100644
index 0000000..36115d3
--- /dev/null
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright 2009-2012 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.data.test;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import edu.uci.ics.genomix.type.GeneCode;
+import edu.uci.ics.genomix.type.KmerBytesWritableFactory;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+public class KmerBytesWritableFactoryTest {
+ static byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G', 'T' };
+
+ KmerBytesWritableFactory kmerFactory = new KmerBytesWritableFactory(8);
+
+ @Test
+ public void TestGetLastKmer() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ kmer.setByRead(9, array, 0);
+ Assert.assertEquals("AGCTGACCG", kmer.toString());
+ VKmerBytesWritable lastKmer;
+ for (int i = 8; i > 0; i--) {
+ lastKmer = kmerFactory.getLastKmerFromChain(i, kmer);
+ Assert.assertEquals("AGCTGACCG".substring(9 - i), lastKmer.toString());
+ lastKmer = kmerFactory.getSubKmerFromChain(9 - i, i, kmer);
+ Assert.assertEquals("AGCTGACCG".substring(9 - i), lastKmer.toString());
+ }
+ VKmerBytesWritable vlastKmer;
+ for (int i = 8; i > 0; i--) {
+ vlastKmer = kmerFactory.getLastKmerFromChain(i, kmer);
+ Assert.assertEquals("AGCTGACCG".substring(9 - i), vlastKmer.toString());
+ vlastKmer = kmerFactory.getSubKmerFromChain(9 - i, i, kmer);
+ Assert.assertEquals("AGCTGACCG".substring(9 - i), vlastKmer.toString());
+ }
+ }
+
+ @Test
+ public void TestGetFirstKmer() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ kmer.setByRead(9, array, 0);
+ Assert.assertEquals("AGCTGACCG", kmer.toString());
+ VKmerBytesWritable firstKmer;
+ for (int i = 8; i > 0; i--) {
+ firstKmer = kmerFactory.getFirstKmerFromChain(i, kmer);
+ Assert.assertEquals("AGCTGACCG".substring(0, i), firstKmer.toString());
+ firstKmer = kmerFactory.getSubKmerFromChain(0, i, kmer);
+ Assert.assertEquals("AGCTGACCG".substring(0, i), firstKmer.toString());
+ }
+ VKmerBytesWritable vfirstKmer;
+ for (int i = 8; i > 0; i--) {
+ vfirstKmer = kmerFactory.getFirstKmerFromChain(i, kmer);
+ Assert.assertEquals("AGCTGACCG".substring(0, i), vfirstKmer.toString());
+ vfirstKmer = kmerFactory.getSubKmerFromChain(0, i, kmer);
+ Assert.assertEquals("AGCTGACCG".substring(0, i), vfirstKmer.toString());
+ }
+ }
+
+ @Test
+ public void TestGetSubKmer() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ kmer.setByRead(9, array, 0);
+ Assert.assertEquals("AGCTGACCG", kmer.toString());
+ VKmerBytesWritable subKmer;
+ for (int istart = 0; istart < kmer.getKmerLetterLength() - 1; istart++) {
+ for (int isize = 1; isize + istart <= kmer.getKmerLetterLength(); isize++) {
+ subKmer = kmerFactory.getSubKmerFromChain(istart, isize, kmer);
+ Assert.assertEquals("AGCTGACCG".substring(istart, istart + isize), subKmer.toString());
+ }
+ }
+ }
+
+ @Test
+ public void TestMergeNext() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ kmer.setByRead(9, array, 0);
+ Assert.assertEquals("AGCTGACCG", kmer.toString());
+
+ String text = "AGCTGACCG";
+ for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
+ VKmerBytesWritable newkmer = kmerFactory.mergeKmerWithNextCode(kmer, x);
+ text = text + (char) GeneCode.GENE_SYMBOL[x];
+ Assert.assertEquals(text, newkmer.toString());
+ kmer = new VKmerBytesWritable(newkmer);
+ }
+ for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
+ VKmerBytesWritable newkmer = kmerFactory.mergeKmerWithNextCode(kmer, x);
+ text = text + (char) GeneCode.GENE_SYMBOL[x];
+ Assert.assertEquals(text, newkmer.toString());
+ kmer = new VKmerBytesWritable(newkmer);
+ }
+ }
+
+ @Test
+ public void TestMergePre() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ kmer.setByRead(9, array, 0);
+ Assert.assertEquals("AGCTGACCG", kmer.toString());
+ String text = "AGCTGACCG";
+ for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
+ VKmerBytesWritable newkmer = kmerFactory.mergeKmerWithPreCode(kmer, x);
+ text = (char) GeneCode.GENE_SYMBOL[x] + text;
+ Assert.assertEquals(text, newkmer.toString());
+ kmer = new VKmerBytesWritable(newkmer);
+ }
+ for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
+ VKmerBytesWritable newkmer = kmerFactory.mergeKmerWithPreCode(kmer, x);
+ text = (char) GeneCode.GENE_SYMBOL[x] + text;
+ Assert.assertEquals(text, newkmer.toString());
+ kmer = new VKmerBytesWritable(newkmer);
+ }
+ }
+
+ @Test
+ public void TestMergeTwoKmer() {
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable();
+ kmer1.setByRead(9, array, 0);
+ String text1 = "AGCTGACCG";
+ VKmerBytesWritable kmer2 = new VKmerBytesWritable();
+ kmer2.setByRead(9, array, 1);
+ String text2 = "GCTGACCGT";
+ Assert.assertEquals(text1, kmer1.toString());
+ Assert.assertEquals(text2, kmer2.toString());
+
+ VKmerBytesWritable merged = kmerFactory.mergeTwoKmer(kmer1, kmer2);
+ Assert.assertEquals(text1 + text2, merged.toString());
+
+ VKmerBytesWritable kmer3 = new VKmerBytesWritable();
+ kmer3.setByRead(3, array, 1);
+ String text3 = "GCT";
+ Assert.assertEquals(text3, kmer3.toString());
+
+ merged = kmerFactory.mergeTwoKmer(kmer1, kmer3);
+ Assert.assertEquals(text1 + text3, merged.toString());
+ merged = kmerFactory.mergeTwoKmer(kmer3, kmer1);
+ Assert.assertEquals(text3 + text1, merged.toString());
+
+ VKmerBytesWritable kmer4 = new VKmerBytesWritable();
+ kmer4.setByRead(8, array, 0);
+ String text4 = "AGCTGACC";
+ Assert.assertEquals(text4, kmer4.toString());
+ merged = kmerFactory.mergeTwoKmer(kmer4, kmer3);
+ Assert.assertEquals(text4 + text3, merged.toString());
+
+ VKmerBytesWritable kmer5 = new VKmerBytesWritable();
+ kmer5.setByRead(7, array, 0);
+ String text5 = "AGCTGAC";
+ VKmerBytesWritable kmer6 = new VKmerBytesWritable();
+ kmer6.setByRead(9, array, 1);
+ String text6 = "GCTGACCGT";
+ merged = kmerFactory.mergeTwoKmer(kmer5, kmer6);
+ Assert.assertEquals(text5 + text6, merged.toString());
+
+ kmer6.setByRead(6, array, 1);
+ String text7 = "GCTGAC";
+ merged = kmerFactory.mergeTwoKmer(kmer5, kmer6);
+ Assert.assertEquals(text5 + text7, merged.toString());
+
+ kmer6.setByRead(4, array, 1);
+ String text8 = "GCTG";
+ merged = kmerFactory.mergeTwoKmer(kmer5, kmer6);
+ Assert.assertEquals(text5 + text8, merged.toString());
+ }
+
+ @Test
+ public void TestShift() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable(kmerFactory.getKmerByRead(9, array, 0));
+ String text = "AGCTGACCG";
+ Assert.assertEquals(text, kmer.toString());
+
+ VKmerBytesWritable kmerForward = kmerFactory.shiftKmerWithNextCode(kmer, GeneCode.A);
+ Assert.assertEquals(text, kmer.toString());
+ Assert.assertEquals("GCTGACCGA", kmerForward.toString());
+ VKmerBytesWritable kmerBackward = kmerFactory.shiftKmerWithPreCode(kmer, GeneCode.C);
+ Assert.assertEquals(text, kmer.toString());
+ Assert.assertEquals("CAGCTGACC", kmerBackward.toString());
+
+ }
+
+ @Test
+ public void TestReverseKmer() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ kmer.setByRead(7, array, 0);
+ Assert.assertEquals(kmer.toString(), "AGCTGAC");
+ VKmerBytesWritable reversed = kmerFactory.reverse(kmer);
+ Assert.assertEquals(reversed.toString(), "CAGTCGA");
+
+ kmer.setByRead(8, ("AATAGAAC").getBytes(), 0);
+ Assert.assertEquals(kmer.toString(), "AATAGAAC");
+ reversed.reset(8);
+ reversed = kmerFactory.reverse(kmer);
+ Assert.assertEquals(reversed.toString(), "CAAGATAA");
+ }
+}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
new file mode 100644
index 0000000..4f7b90e
--- /dev/null
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2009-2012 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.data.test;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import edu.uci.ics.genomix.type.GeneCode;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+
+public class KmerBytesWritableTest {
+ static byte[] array = { 'A', 'A', 'T', 'A', 'G', 'A', 'A', 'G' };
+ static int k = 7;
+
+ @Test
+ public void TestCompressKmer() {
+ KmerBytesWritable.setGlobalKmerLength(k);
+ KmerBytesWritable kmer = new KmerBytesWritable();
+ kmer.setByRead(array, 0);
+ Assert.assertEquals(kmer.toString(), "AATAGAA");
+
+ kmer.setByRead(array, 1);
+ Assert.assertEquals(kmer.toString(), "ATAGAAG");
+ }
+
+ @Test
+ public void TestMoveKmer() {
+ KmerBytesWritable.setGlobalKmerLength(k);
+ KmerBytesWritable kmer = new KmerBytesWritable();
+ kmer.setByRead(array, 0);
+ Assert.assertEquals(kmer.toString(), "AATAGAA");
+
+ for (int i = k; i < array.length - 1; i++) {
+ kmer.shiftKmerWithNextCode(array[i]);
+ Assert.assertTrue(false);
+ }
+
+ byte out = kmer.shiftKmerWithNextChar(array[array.length - 1]);
+ Assert.assertEquals(out, GeneCode.getCodeFromSymbol((byte) 'A'));
+ Assert.assertEquals(kmer.toString(), "ATAGAAG");
+ }
+
+ @Test
+ public void TestCompressKmerReverse() {
+ KmerBytesWritable.setGlobalKmerLength(k);
+ KmerBytesWritable kmer = new KmerBytesWritable();
+ kmer.setByRead(array, 0);
+ Assert.assertEquals(kmer.toString(), "AATAGAA");
+
+ kmer.setByReadReverse(array, 1);
+ Assert.assertEquals(kmer.toString(), "CTTCTAT");
+ }
+
+ @Test
+ public void TestMoveKmerReverse() {
+ KmerBytesWritable.setGlobalKmerLength(k);
+ KmerBytesWritable kmer = new KmerBytesWritable();
+ kmer.setByRead(array, 0);
+ Assert.assertEquals(kmer.toString(), "AATAGAA");
+
+ for (int i = k; i < array.length - 1; i++) {
+ kmer.shiftKmerWithPreChar(array[i]);
+ Assert.assertTrue(false);
+ }
+
+ byte out = kmer.shiftKmerWithPreChar(array[array.length - 1]);
+ Assert.assertEquals(out, GeneCode.getCodeFromSymbol((byte) 'A'));
+ Assert.assertEquals(kmer.toString(), "GAATAGA");
+ }
+
+ @Test
+ public void TestGetGene() {
+ KmerBytesWritable.setGlobalKmerLength(9);
+ KmerBytesWritable kmer = new KmerBytesWritable();
+ String text = "AGCTGACCG";
+ byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G' };
+ kmer.setByRead(array, 0);
+
+ for (int i = 0; i < 9; i++) {
+ Assert.assertEquals(text.charAt(i), (char) (GeneCode.getSymbolFromCode(kmer.getGeneCodeAtPosition(i))));
+ }
+ }
+
+ @Test
+ public void TestGetOneByteFromKmer() {
+ byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G', 'T' };
+ String string = "AGCTGACCGT";
+ for (int k = 3; k <= 10; k++) {
+ KmerBytesWritable.setGlobalKmerLength(k);
+ KmerBytesWritable kmer = new KmerBytesWritable();
+ KmerBytesWritable kmerAppend = new KmerBytesWritable();
+ kmer.setByRead(array, 0);
+ Assert.assertEquals(string.substring(0, k), kmer.toString());
+ for (int b = 0; b < k; b++) {
+ byte byteActual = KmerBytesWritable.getOneByteFromKmerAtPosition(b, kmer.getBytes(), kmer.getOffset(),
+ kmer.getLength());
+ byte byteExpect = GeneCode.getCodeFromSymbol(array[b]);
+ for (int i = 1; i < 4 && b + i < k; i++) {
+ byteExpect += GeneCode.getCodeFromSymbol(array[b + i]) << (i * 2);
+ }
+ Assert.assertEquals(byteActual, byteExpect);
+ KmerBytesWritable.appendOneByteAtPosition(b, byteActual, kmerAppend.getBytes(), kmerAppend.getOffset(),
+ kmerAppend.getLength());
+ }
+ Assert.assertEquals(kmer.toString(), kmerAppend.toString());
+ }
+ }
+}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
new file mode 100644
index 0000000..06ba6bd
--- /dev/null
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
@@ -0,0 +1,131 @@
+package edu.uci.ics.genomix.data.test;
+
+import java.util.Iterator;
+import java.util.Random;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerListWritable;
+
+public class KmerListWritableTest {
+
+ @Test
+ public void TestInitial() {
+ VKmerListWritable kmerList = new VKmerListWritable();
+ Assert.assertEquals(kmerList.getCountOfPosition(), 0);
+
+ //one kmer in list and reset each time
+ VKmerBytesWritable kmer;
+ for (int i = 1; i < 200; i++) {
+ kmer = new VKmerBytesWritable(i);
+ String randomString = generaterRandomString(i);
+ byte[] array = randomString.getBytes();
+ kmer.setByRead(i, array, 0);
+ kmerList.reset();
+ kmerList.append(kmer);
+ Assert.assertEquals(randomString, kmerList.getPosition(0).toString());
+ Assert.assertEquals(1, kmerList.getCountOfPosition());
+ }
+
+ kmerList.reset();
+ //add one more kmer each time and fix kmerSize
+ for (int i = 0; i < 200; i++) {
+ kmer = new VKmerBytesWritable(5);
+ String randomString = generaterRandomString(5);
+ byte[] array = randomString.getBytes();
+ kmer.setByRead(5, array, 0);
+ kmerList.append(kmer);
+ Assert.assertEquals(kmerList.getPosition(i).toString(), randomString);
+ Assert.assertEquals(i + 1, kmerList.getCountOfPosition());
+ }
+
+ byte [] another = new byte [kmerList.getLength()*2];
+ int start = 20;
+ System.arraycopy(kmerList.getByteArray(), kmerList.getStartOffset(), another, start, kmerList.getLength());
+ VKmerListWritable plist2 = new VKmerListWritable(another, start);
+ for(int i = 0; i < plist2.getCountOfPosition(); i++){
+ Assert.assertEquals(kmerList.getPosition(i).toString(), plist2.getPosition(i).toString());
+ }
+ }
+
+ @Test
+ public void TestRemove() {
+ VKmerListWritable kmerList = new VKmerListWritable();
+ Assert.assertEquals(kmerList.getCountOfPosition(), 0);
+
+ int i;
+ VKmerBytesWritable kmer;
+ for (i = 0; i < 200; i++) {
+ kmer = new VKmerBytesWritable(5);
+ String randomString = generaterRandomString(5);
+ byte[] array = randomString.getBytes();
+ kmer.setByRead(5, array, 0);
+ kmerList.append(kmer);
+ Assert.assertEquals(randomString, kmerList.getPosition(i).toString());
+ Assert.assertEquals(i + 1, kmerList.getCountOfPosition());
+ }
+
+ //delete one element each time
+ VKmerBytesWritable tmpKmer = new VKmerBytesWritable(5);
+ i = 0;
+ VKmerListWritable copyList = new VKmerListWritable();
+ copyList.setCopy(kmerList);
+ Iterator<VKmerBytesWritable> iterator;
+ for(int j = 0; j < 5; j++){
+ iterator = copyList.iterator();
+ byte[] array = kmerList.getPosition(j).toString().getBytes();
+ VKmerBytesWritable deletePos = new VKmerBytesWritable(5);
+ deletePos.setByRead(5, array, 0);
+ boolean removed = false;
+ while(iterator.hasNext()){
+ tmpKmer = iterator.next();
+ if(tmpKmer.equals(deletePos)){
+ iterator.remove();
+ removed = true;
+ break;
+ }
+ }
+ Assert.assertTrue(removed);
+ Assert.assertEquals(200 - 1 - j, copyList.getCountOfPosition());
+ while(iterator.hasNext()){
+ tmpKmer = iterator.next();
+ Assert.assertTrue(!tmpKmer.getBlockBytes().equals(deletePos.getBlockBytes()));
+ i++;
+ }
+ }
+
+ //delete all the elements
+ i = 0;
+ iterator = kmerList.iterator();
+ while(iterator.hasNext()){
+ tmpKmer = iterator.next();
+ iterator.remove();
+ }
+
+ Assert.assertEquals(0, kmerList.getCountOfPosition());
+
+ VKmerListWritable edgeList = new VKmerListWritable();
+ VKmerBytesWritable k = new VKmerBytesWritable(3);
+ k.setByRead(3, ("AAA").getBytes(), 0);
+ edgeList.append(k);
+ k.setByRead(3, ("CCC").getBytes(), 0);
+ edgeList.append(k);
+ for(VKmerBytesWritable edge : edgeList){
+ System.out.println(edge.toString());
+ }
+ }
+
+ public String generaterRandomString(int n){
+ char[] chars = "ACGT".toCharArray();
+ StringBuilder sb = new StringBuilder();
+ Random random = new Random();
+ for (int i = 0; i < n; i++) {
+ char c = chars[random.nextInt(chars.length)];
+ sb.append(c);
+ }
+ return sb.toString();
+ }
+}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/NodeWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/NodeWritableTest.java
new file mode 100644
index 0000000..538a1fe
--- /dev/null
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/NodeWritableTest.java
@@ -0,0 +1,201 @@
+package edu.uci.ics.genomix.data.test;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Iterator;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import edu.uci.ics.genomix.data.KmerUtil;
+import edu.uci.ics.genomix.type.EdgeListWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.PositionListWritable;
+import edu.uci.ics.genomix.type.PositionWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+public class NodeWritableTest {
+
+ @Test
+ public void TestMergeRF_FF() throws IOException {
+ KmerBytesWritable.setGlobalKmerLength(5);
+ String test1 = "TAGAT"; // rc = ATCTA
+ String test2 = "TCTAG"; // rc = CTAGA
+ String test3 = "CTAGC"; // rc = GCTAG
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ k1.setByRead(5, test1.getBytes(), 0);
+ k2.setByRead(5, test2.getBytes(), 0);
+ k3.setByRead(5, test3.getBytes(), 0);
+ // k2.mergeWithRFKmer(5, k1);
+ // Assert.assertEquals("ATCTAG", k2.toString());
+ // k2.mergeWithFFKmer(5, k3);
+ // Assert.assertEquals("ATCTAGC", k2.toString());
+
+ PositionWritable read1 = new PositionWritable((byte) 1, 50, 0);
+ PositionWritable read2 = new PositionWritable((byte) 1, 75, 0);
+ PositionWritable read3 = new PositionWritable((byte) 0, 100, 0);
+ PositionListWritable plist1 = new PositionListWritable(Arrays.asList(read1));
+ PositionListWritable plist2 = new PositionListWritable();
+ PositionListWritable plist3 = new PositionListWritable(Arrays.asList(read3));
+
+ // k1 {r50} --RF-> k2 {r75} --FF-> k3 {~r100}
+
+ NodeWritable n1 = new NodeWritable();
+ n1.setInternalKmer(k1);
+ n1.setAvgCoverage(10);
+ n1.getStartReads().append(read1);
+ n1.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k2, plist1));
+ Assert.assertEquals("(50-0_0)", n1.getEdgeList(DirectionFlag.DIR_RF).get(0).getReadIDs().getPosition(0)
+ .toString());
+ Assert.assertEquals(10f, n1.getAvgCoverage());
+
+ NodeWritable n2 = new NodeWritable();
+ n2.setInternalKmer(k2);
+ n2.setAvgCoverage(20);
+ n2.getStartReads().append(read2);
+ Assert.assertEquals(1, n2.getStartReads().getCountOfPosition());
+ n2.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k1, plist1));
+ n2.getEdgeList(DirectionFlag.DIR_FF).add(new EdgeWritable(k3, plist3));
+ Assert.assertEquals(20f, n2.getAvgCoverage());
+
+ NodeWritable n3 = new NodeWritable();
+ n3.setInternalKmer(k3);
+ n3.setAvgCoverage(30);
+ n3.getEndReads().append(read3);
+ n3.getEdgeList(DirectionFlag.DIR_RR).add(new EdgeWritable(k2, plist3));
+ Assert.assertEquals("(100-0_0)", n3.getEdgeList(DirectionFlag.DIR_RR).get(0).getReadIDs().getPosition(0)
+ .toString());
+ Assert.assertEquals(30f, n3.getAvgCoverage());
+
+ // dump and recover each
+ byte[] block = new byte[2000];
+ int offset = 50;
+ System.arraycopy(n1.marshalToByteArray(), 0, block, offset, n1.getSerializedLength());
+ NodeWritable copy = new NodeWritable(block, offset);
+ Assert.assertEquals(n1, copy);
+ offset += copy.getSerializedLength();
+
+ System.arraycopy(n2.marshalToByteArray(), 0, block, offset, n2.getSerializedLength());
+ copy = new NodeWritable(block, offset);
+ Assert.assertEquals(n2, copy);
+ offset += copy.getSerializedLength();
+
+ System.arraycopy(n3.marshalToByteArray(), 0, block, offset, n3.getSerializedLength());
+ copy = new NodeWritable(block, offset);
+ Assert.assertEquals(n3, copy);
+ offset += copy.getSerializedLength();
+
+ // merge k1 with k2, then k1k2 with k3
+ // k2.mergeWithRFKmer(5, k1);
+ // Assert.assertEquals("ATCTAG", k2.toString());
+ // k2.mergeWithFFKmer(5, k3);
+ // Assert.assertEquals("ATCTAGC", k2.toString());
+ n2.mergeWithNode(DirectionFlag.DIR_RF, n1);
+ Assert.assertEquals("ATCTAG", n2.getInternalKmer().toString());
+ Assert.assertEquals(15f, n2.getAvgCoverage());
+ Assert.assertEquals(1, n2.getEndReads().getCountOfPosition());
+ Assert.assertEquals("(50-0_1)", n2.getEndReads().getPosition(0).toString());
+ Assert.assertEquals(1, n2.getStartReads().getCountOfPosition());
+ Assert.assertEquals("(75-1_1)", n2.getStartReads().getPosition(0).toString());
+ Assert.assertEquals(0, n2.inDegree());
+ Assert.assertEquals(1, n2.outDegree());
+ Assert.assertEquals(k3, n2.getEdgeList(DirectionFlag.DIR_FF).get(0).getKey());
+
+ n2.mergeWithNode(DirectionFlag.DIR_FF, n3);
+ Assert.assertEquals("ATCTAGC", n2.getInternalKmer().toString());
+ Assert.assertEquals(20f, n2.getAvgCoverage());
+ Assert.assertEquals(2, n2.getEndReads().getCountOfPosition());
+ Assert.assertEquals("(50-0_1)", n2.getEndReads().getPosition(0).toString());
+ Assert.assertEquals("(100-2_0)", n2.getEndReads().getPosition(1).toString());
+ Assert.assertEquals(1, n2.getStartReads().getCountOfPosition());
+ Assert.assertEquals("(75-1_1)", n2.getStartReads().getPosition(0).toString());
+ Assert.assertEquals(0, n2.inDegree());
+ Assert.assertEquals(0, n2.outDegree());
+ }
+
+ @Test
+ public void TestGraphBuildNodes() throws IOException {
+ KmerBytesWritable.setGlobalKmerLength(5);
+ String test1 = "TAGAT"; // rc = ATCTA
+ String test2 = "TCTAG"; // rc = CTAGA
+ String test3 = "CTAGC"; // rc = GCTAG
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ k1.setByRead(5, test1.getBytes(), 0);
+ k2.setByRead(5, test2.getBytes(), 0);
+ k3.setByRead(5, test3.getBytes(), 0);
+ // k2.mergeWithRFKmer(5, k1);
+ // Assert.assertEquals("ATCTAG", k2.toString());
+ // k2.mergeWithFFKmer(5, k3);
+ // Assert.assertEquals("ATCTAGC", k2.toString());
+
+ PositionWritable read1 = new PositionWritable((byte) 1, 50, 0);
+ PositionWritable read2 = new PositionWritable((byte) 1, 75, 0);
+ PositionWritable read3 = new PositionWritable((byte) 0, 100, 0);
+ PositionListWritable plist1 = new PositionListWritable(Arrays.asList(read1, read2));
+ PositionListWritable plist2 = new PositionListWritable(Arrays.asList(read2, read3));
+ PositionListWritable plist3 = new PositionListWritable(Arrays.asList(read3));
+
+ // k1 {r50} --RF-> k2 {r75} --FF-> k3 {~r100}
+
+ // graphbuilding-like merge of n1 and n2
+ NodeWritable n1 = new NodeWritable();
+ n1.setInternalKmer(k1);
+ n1.setAvgCoverage(10);
+ n1.getStartReads().append(read1);
+ n1.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k2, plist1));
+ NodeWritable n1_2 = new NodeWritable(); // duplicate node which should end up union'ed in
+ n1_2.setInternalKmer(k1);
+ n1_2.setAvgCoverage(10);
+ n1_2.getStartReads().append(read1);
+ n1_2.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k3, plist3));
+ n1_2.getEdgeList(DirectionFlag.DIR_RF).add(new EdgeWritable(k2, plist2));
+
+ // take the union of the edges (a la graphbuilding)
+ n1.getEdgeList(DirectionFlag.DIR_RF).unionUpdate(n1_2.getEdgeList(DirectionFlag.DIR_RF));
+
+ // the union-update may change the ordering of the original list (what a pain!)
+ Iterator<EdgeWritable> rf_edges = n1.getEdgeList(DirectionFlag.DIR_RF).iterator();
+ int k2_index = 0, k3_index = 0;
+ for (int i=0; i < n1.getEdgeList(DirectionFlag.DIR_RF).getCountOfPosition(); i++) {
+ VKmerBytesWritable curKmer = rf_edges.next().getKey();
+ if (curKmer.equals(k2))
+ k2_index = i;
+ if (curKmer.equals(k3))
+ k3_index = i;
+ }
+
+ Assert.assertEquals(2, n1.getEdgeList(DirectionFlag.DIR_RF).getCountOfPosition()); // only k2 and k3 in list
+ Assert.assertEquals(k2, n1.getEdgeList(DirectionFlag.DIR_RF).get(k2_index).getKey());
+ Assert.assertEquals(k3, n1.getEdgeList(DirectionFlag.DIR_RF).get(k3_index).getKey());
+ Assert.assertEquals(3, n1.getEdgeList(DirectionFlag.DIR_RF).get(k2_index).getReadIDs().getCountOfPosition()); // k2 has r1,r2,r3
+ Assert.assertEquals(1, n1.getEdgeList(DirectionFlag.DIR_RF).get(k3_index).getReadIDs().getCountOfPosition()); // k3 has r3
+
+ long[] k2_readids = n1.getEdgeList(DirectionFlag.DIR_RF).get(k2_index).readIDArray();
+ Assert.assertEquals(3, k2_readids.length);
+ long[] k3_readids = n1.getEdgeList(DirectionFlag.DIR_RF).get(k3_index).readIDArray();
+ Assert.assertEquals(1, k3_readids.length);
+
+ boolean[] found = {false, false, false};
+ for (int i=0; i < k2_readids.length; i++) { // the readid list itself may also be out of order
+ if (k2_readids[i] == read1.getReadId())
+ found[0] = true;
+ else if (k2_readids[i] == read2.getReadId())
+ found[1] = true;
+ else if (k2_readids[i] == read3.getReadId())
+ found[2] = true;
+ }
+ Assert.assertTrue(found[0]);
+ Assert.assertTrue(found[1]);
+ Assert.assertTrue(found[2]);
+
+ Assert.assertEquals(read3.getReadId(), k3_readids[0]);
+ }
+}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java
new file mode 100644
index 0000000..ac7322e
--- /dev/null
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionListWritableTest.java
@@ -0,0 +1,117 @@
+package edu.uci.ics.genomix.data.test;
+
+import java.util.Iterator;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import edu.uci.ics.genomix.type.PositionListWritable;
+import edu.uci.ics.genomix.type.PositionWritable;
+
+public class PositionListWritableTest {
+
+ @Test
+ public void TestInitial() {
+ PositionListWritable plist = new PositionListWritable();
+ Assert.assertEquals(plist.getCountOfPosition(), 0);
+
+ byte mateId;
+ long readId;
+ int posId;
+ for (int i = 0; i < 200; i++) {
+ mateId = (byte)1;
+ readId = (long)i;
+ posId = i;
+ plist.append(mateId, readId, posId);
+ Assert.assertEquals(plist.getPosition(i).getMateId(), mateId);
+ Assert.assertEquals(plist.getPosition(i).getReadId(), readId);
+ Assert.assertEquals(plist.getPosition(i).getPosId(), posId);
+ Assert.assertEquals(i + 1, plist.getCountOfPosition());
+ }
+
+ int i = 0;
+ for (PositionWritable pos : plist) {
+ Assert.assertEquals((byte)1, pos.getMateId());
+ Assert.assertEquals((long) i, pos.getReadId());
+ Assert.assertEquals(i, pos.getPosId());
+ i++;
+ }
+
+ byte [] another = new byte [plist.getLength()*2];
+ int start = 20;
+ System.arraycopy(plist.getByteArray(), 0, another, start, plist.getLength());
+ PositionListWritable plist2 = new PositionListWritable(another,start);
+ for( i = 0; i < plist2.getCountOfPosition(); i++){
+ Assert.assertEquals(plist.getPosition(i), plist2.getPosition(i));
+ }
+ }
+
+ @Test
+ public void TestRemove() {
+ PositionListWritable plist = new PositionListWritable();
+ Assert.assertEquals(plist.getCountOfPosition(), 0);
+
+ byte mateId;
+ long readId;
+ int posId;
+ for (int i = 0; i < 5; i++) {
+ mateId = (byte)1;
+ readId = (long)i;
+ posId = i;
+ plist.append(mateId, readId, posId);
+ Assert.assertEquals(plist.getPosition(i).getMateId(), mateId);
+ Assert.assertEquals(plist.getPosition(i).getReadId(), readId);
+ Assert.assertEquals(plist.getPosition(i).getPosId(), posId);
+ Assert.assertEquals(i + 1, plist.getCountOfPosition());
+ }
+
+ int i = 0;
+ for (PositionWritable pos : plist) {
+ Assert.assertEquals((byte)1, pos.getMateId());
+ Assert.assertEquals((long) i, pos.getReadId());
+ Assert.assertEquals(i, pos.getPosId());
+ i++;
+ }
+
+ //delete one element each time
+ i = 0;
+ PositionListWritable copyList = new PositionListWritable();
+ copyList.set(plist);
+ PositionWritable pos = new PositionWritable();
+ Iterator<PositionWritable> iterator;
+ for(int j = 0; j < 5; j++){
+ iterator = copyList.iterator();
+ PositionWritable deletePos = new PositionWritable();
+ deletePos.set((byte)1, (long)j, j);
+ boolean removed = false;
+ while(iterator.hasNext()){
+ pos = iterator.next();
+ if(pos.equals(deletePos)){
+ iterator.remove();
+ removed = true;
+ break;
+ }
+ }
+ Assert.assertTrue(removed);
+ Assert.assertEquals(5 - 1 - j, copyList.getCountOfPosition());
+ while(iterator.hasNext()){
+ pos = iterator.next();
+ Assert.assertTrue(! (pos.getUUID() == deletePos.getUUID() &&
+ pos.getReadId() == deletePos.getReadId() &&
+ pos.getPosId() == deletePos.getPosId()));
+ i++;
+ }
+ }
+
+ //delete all the elements
+ i = 0;
+ iterator = plist.iterator();
+ while(iterator.hasNext()){
+ pos = iterator.next();
+ iterator.remove();
+ }
+
+ Assert.assertEquals(0, plist.getCountOfPosition());
+ }
+}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
new file mode 100644
index 0000000..003406d
--- /dev/null
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
@@ -0,0 +1,47 @@
+package edu.uci.ics.genomix.data.test;
+
+import java.util.Random;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import edu.uci.ics.genomix.data.Marshal;
+import edu.uci.ics.genomix.type.PositionWritable;
+
+public class PositionWritableTest {
+
+ @Test
+ public void TestInitial() {
+ PositionWritable pos = new PositionWritable();
+ PositionWritable pos1 = new PositionWritable();
+ byte mateId;
+ long readId;
+ int posId;
+ Random gen = new Random();
+ byte[] start = new byte[15];
+ for (long i = 0; i < (1 << 47); i++) {
+ mateId = (byte) (gen.nextBoolean() ? 1 : 0);
+ readId = i;
+ posId = (int) (i % (1 << 16));
+ pos = new PositionWritable(mateId, readId, posId);
+ Assert.assertEquals(pos.getMateId(), mateId);
+ Assert.assertEquals(pos.getReadId(), readId);
+ Assert.assertEquals(pos.getPosId(), posId);
+
+ long uuid = ((readId + 1) << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
+ Marshal.putLong(uuid, start, 0);
+ pos1 = new PositionWritable(start, 0);
+ Assert.assertEquals(pos1.getMateId(), mateId);
+ Assert.assertEquals(pos1.getReadId(), readId + 1);
+ Assert.assertEquals(pos1.getPosId(), posId);
+
+ pos.setNewReference(start, 0);
+ Assert.assertEquals(pos.getMateId(), mateId);
+ Assert.assertEquals(pos.getReadId(), readId + 1);
+ Assert.assertEquals(pos.getPosId(), posId);
+
+ Assert.assertEquals(pos1.toString(), pos.toString());
+ }
+ }
+}
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java
new file mode 100644
index 0000000..53853aa
--- /dev/null
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java
@@ -0,0 +1,588 @@
+/*
+ * Copyright 2009-2012 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.data.test;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+import edu.uci.ics.genomix.type.GeneCode;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerListWritable;
+
+
+public class VKmerBytesWritableTest {
+ static byte[] array = { 'A', 'A', 'T', 'A', 'G', 'A', 'A', 'G' };
+ static int k = 7;
+
+ @Test
+ public void TestCompressKmer() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable(k);
+ kmer.setByRead(k, array, 0);
+ Assert.assertEquals(kmer.toString(), "AATAGAA");
+
+ kmer.setByRead(k, array, 1);
+ Assert.assertEquals(kmer.toString(), "ATAGAAG");
+ }
+
+ @Test
+ public void TestConstructorFromRead() {
+ String kmerStr = "ACTAGCTAGCTAGTCGATCGACTAGCTGATCGATCGATCGTAGCTAGC";
+ VKmerBytesWritable kmer = new VKmerBytesWritable(kmerStr);
+ Assert.assertEquals(kmerStr.length(), kmer.getKmerLetterLength());
+ Assert.assertEquals(kmerStr.toString(), kmer.toString());
+ }
+
+ @Test
+ public void TestMoveKmer() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable(k);
+ kmer.setByRead(k, array, 0);
+ Assert.assertEquals(kmer.toString(), "AATAGAA");
+
+ for (int i = k; i < array.length - 1; i++) {
+ kmer.shiftKmerWithNextCode(array[i]);
+ Assert.assertTrue(false);
+ }
+
+ byte out = kmer.shiftKmerWithNextChar(array[array.length - 1]);
+ Assert.assertEquals(out, GeneCode.getCodeFromSymbol((byte) 'A'));
+ Assert.assertEquals(kmer.toString(), "ATAGAAG");
+ }
+
+ @Test
+ public void TestCompressKmerReverse() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ kmer.setByRead(k, array, 0);
+ Assert.assertEquals(kmer.toString(), "AATAGAA");
+
+ kmer.setByReadReverse(k, array, 1);
+ Assert.assertEquals(kmer.toString(), "CTTCTAT");
+ }
+
+ @Test
+ public void TestMoveKmerReverse() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ kmer.setByRead(k, array, 0);
+ Assert.assertEquals(kmer.toString(), "AATAGAA");
+
+ for (int i = k; i < array.length - 1; i++) {
+ kmer.shiftKmerWithPreChar(array[i]);
+ Assert.assertTrue(false);
+ }
+
+ byte out = kmer.shiftKmerWithPreChar(array[array.length - 1]);
+ Assert.assertEquals(out, GeneCode.getCodeFromSymbol((byte) 'A'));
+ Assert.assertEquals(kmer.toString(), "GAATAGA");
+ }
+
+ @Test
+ public void TestGetGene() {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ String text = "AGCTGACCG";
+ byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G' };
+ kmer.setByRead(9, array, 0);
+
+ for (int i = 0; i < 9; i++) {
+ Assert.assertEquals(text.charAt(i), (char) (GeneCode.getSymbolFromCode(kmer.getGeneCodeAtPosition(i))));
+ }
+ }
+
+ @Test
+ public void TestGetOneByteFromKmer() {
+ byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G', 'T' };
+ String string = "AGCTGACCGT";
+ for (int k = 3; k <= 10; k++) {
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ VKmerBytesWritable kmerAppend = new VKmerBytesWritable(k);
+ kmer.setByRead(k, array, 0);
+ Assert.assertEquals(string.substring(0, k), kmer.toString());
+ for (int b = 0; b < k; b++) {
+ byte byteActual = KmerBytesWritable.getOneByteFromKmerAtPosition(b, kmer.getBlockBytes(),
+ kmer.getKmerOffset(), kmer.getKmerByteLength());
+ byte byteExpect = GeneCode.getCodeFromSymbol(array[b]);
+ for (int i = 1; i < 4 && b + i < k; i++) {
+ byteExpect += GeneCode.getCodeFromSymbol(array[b + i]) << (i * 2);
+ }
+ Assert.assertEquals(byteActual, byteExpect);
+ KmerBytesWritable.appendOneByteAtPosition(b, byteActual, kmerAppend.getBlockBytes(),
+ kmerAppend.getKmerOffset(), kmerAppend.getKmerByteLength());
+ }
+ Assert.assertEquals(kmer.toString(), kmerAppend.toString());
+ }
+ }
+
+ @Test
+ public void TestMergeFFKmer() {
+ byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G', 'T' };
+ String text = "AGCTGACCGT";
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable();
+ kmer1.setByRead(8, array, 0);
+ String text1 = "AGCTGACC";
+ Assert.assertEquals(text1, kmer1.toString());
+
+ VKmerBytesWritable kmer2 = new VKmerBytesWritable();
+ kmer2.setByRead(8, array, 1);
+ String text2 = "GCTGACCG";
+ Assert.assertEquals(text2, kmer2.toString());
+
+ VKmerBytesWritable merge = new VKmerBytesWritable(kmer1);
+ int kmerSize = 8;
+ merge.mergeWithFFKmer(kmerSize, kmer2);
+ Assert.assertEquals(text1 + text2.substring(kmerSize - 1), merge.toString());
+
+ for (int i = 1; i < 8; i++) {
+ merge.setAsCopy(kmer1);
+ merge.mergeWithFFKmer(i, kmer2);
+ Assert.assertEquals(text1 + text2.substring(i - 1), merge.toString());
+ }
+
+ for (int ik = 1; ik <= 10; ik++) {
+ for (int jk = 1; jk <= 10; jk++) {
+ kmer1 = new VKmerBytesWritable(ik);
+ kmer2 = new VKmerBytesWritable(jk);
+ kmer1.setByRead(ik, array, 0);
+ kmer2.setByRead(jk, array, 0);
+ text1 = text.substring(0, ik);
+ text2 = text.substring(0, jk);
+ Assert.assertEquals(text1, kmer1.toString());
+ Assert.assertEquals(text2, kmer2.toString());
+ for (int x = 1; x < (jk < ik ? jk : ik); x++) {
+ merge.setAsCopy(kmer1);
+ merge.mergeWithFFKmer(x, kmer2);
+ Assert.assertEquals(text1 + text2.substring(x - 1), merge.toString());
+ }
+ }
+ }
+ }
+
+ @Test
+ public void TestMergeFRKmer() {
+ int kmerSize = 3;
+ String result = "AAGCTAACAACC";
+ byte[] resultArray = result.getBytes();
+
+ String text1 = "AAGCTAA";
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable();
+ kmer1.setByRead(text1.length(), resultArray, 0);
+ Assert.assertEquals(text1, kmer1.toString());
+
+ // kmer2 is the rc of the end of the read
+ String text2 = "GGTTGTT";
+ VKmerBytesWritable kmer2 = new VKmerBytesWritable();
+ kmer2.setByReadReverse(text2.length(), resultArray, result.length() - text2.length());
+ Assert.assertEquals(text2, kmer2.toString());
+
+ VKmerBytesWritable merge = new VKmerBytesWritable();
+ merge.setAsCopy(kmer1);
+ merge.mergeWithFRKmer(kmerSize, kmer2);
+ Assert.assertEquals(result, merge.toString());
+
+ int i = 1;
+ merge.setAsCopy(kmer1);
+ merge.mergeWithFRKmer(i, kmer2);
+ Assert.assertEquals("AAGCTAAAACAACC", merge.toString());
+
+ i = 2;
+ merge.setAsCopy(kmer1);
+ merge.mergeWithFRKmer(i, kmer2);
+ Assert.assertEquals("AAGCTAAACAACC", merge.toString());
+
+ i = 3;
+ merge.setAsCopy(kmer1);
+ merge.mergeWithFRKmer(i, kmer2);
+ Assert.assertEquals("AAGCTAACAACC", merge.toString());
+ }
+
+ @Test
+ public void TestMergeRFKmer() {
+ int kmerSize = 3;
+ String result = "GGCACAACAACCC";
+ byte[] resultArray = result.getBytes();
+
+ String text1 = "AACAACCC";
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable();
+ kmer1.setByRead(text1.length(), resultArray, 5);
+ Assert.assertEquals(text1, kmer1.toString());
+
+ // kmer2 is the rc of the end of the read
+ String text2 = "TTGTGCC";
+ VKmerBytesWritable kmer2 = new VKmerBytesWritable();
+ kmer2.setByReadReverse(text2.length(), resultArray, 0);
+ Assert.assertEquals(text2, kmer2.toString());
+
+ VKmerBytesWritable merge = new VKmerBytesWritable();
+ merge.setAsCopy(kmer1);
+ merge.mergeWithRFKmer(kmerSize, kmer2);
+ Assert.assertEquals(result, merge.toString());
+
+ int i = 1;
+ merge.setAsCopy(kmer1);
+ merge.mergeWithRFKmer(i, kmer2);
+ Assert.assertEquals("GGCACAAAACAACCC", merge.toString());
+
+ i = 2;
+ merge.setAsCopy(kmer1);
+ merge.mergeWithRFKmer(i, kmer2);
+ Assert.assertEquals("GGCACAAACAACCC", merge.toString());
+
+ i = 3;
+ merge.setAsCopy(kmer1);
+ merge.mergeWithRFKmer(i, kmer2);
+ Assert.assertEquals("GGCACAACAACCC", merge.toString());
+
+ // String test1 = "CTTAT";
+ // String test2 = "AGACC"; // rc = GGTCT
+ // VKmerBytesWritable k1 = new VKmerBytesWritable(5);
+ // VKmerBytesWritable k2 = new VKmerBytesWritable(5);
+ // k1.setByRead(test1.getBytes(), 0);
+ // k2.setByRead(test2.getBytes(), 0);
+ // k1.mergeWithRFKmer(3, k2);
+ // Assert.assertEquals("GGTCTTAT", k1.toString()); //GGTCGTCT ->
+ // AGACGACC ??
+
+ String test3 = "CTA";
+ String test4 = "AGA"; // rc = TCT
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ VKmerBytesWritable k4 = new VKmerBytesWritable();
+ k3.setByRead(3, test3.getBytes(), 0);
+ k4.setByRead(3, test4.getBytes(), 0);
+ k3.mergeWithRFKmer(3, k4);
+ Assert.assertEquals("TCTA", k3.toString());
+ // Assert.assertEquals("CTAT", k3); // this is an incorrect test case--
+ // the merge always flips the passed-in kmer
+
+ String test1;
+ String test2;
+ test1 = "CTA";
+ test2 = "AGA";
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ k1.setByRead(3, test1.getBytes(), 0);
+ k2.setByRead(3, test2.getBytes(), 0);
+ k1.mergeWithRFKmer(3, k2);
+ Assert.assertEquals("TCTA", k1.toString());
+
+
+
+ test1 = "CTA";
+ test2 = "ATA"; //TAT
+ k1 = new VKmerBytesWritable();
+ k2 = new VKmerBytesWritable();
+ k1.setByRead(3, test1.getBytes(), 0);
+ k2.setByRead(3, test2.getBytes(), 0);
+ k1.mergeWithFRKmer(3, k2);
+ Assert.assertEquals("CTAT", k1.toString());
+
+ test1 = "ATA";
+ test2 = "CTA"; //TAT
+ k1 = new VKmerBytesWritable();
+ k2 = new VKmerBytesWritable();
+ k1.setByRead(3, test1.getBytes(), 0);
+ k2.setByRead(3, test2.getBytes(), 0);
+ k1.mergeWithFRKmer(3, k2);
+ Assert.assertEquals("ATAG", k1.toString());
+
+ test1 = "TCTAT";
+ test2 = "GAAC";
+ k1 = new VKmerBytesWritable();
+ k2 = new VKmerBytesWritable();
+ k1.setByRead(5, test1.getBytes(), 0);
+ k2.setByRead(4, test2.getBytes(), 0);
+ k1.mergeWithRFKmer(3, k2);
+ Assert.assertEquals("GTTCTAT", k1.toString());
+ }
+
+ @Test
+ public void TestMergeRRKmer() {
+ byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G', 'T' };
+ String text = "AGCTGACCGT";
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable();
+ kmer1.setByRead(8, array, 0);
+ String text1 = "AGCTGACC";
+ VKmerBytesWritable kmer2 = new VKmerBytesWritable();
+ kmer2.setByRead(8, array, 1);
+ String text2 = "GCTGACCG";
+ Assert.assertEquals(text2, kmer2.toString());
+ VKmerBytesWritable merge = new VKmerBytesWritable(kmer2);
+ int kmerSize = 8;
+ merge.mergeWithRRKmer(kmerSize, kmer1);
+ Assert.assertEquals(text1 + text2.substring(kmerSize - 1), merge.toString());
+
+ for (int i = 1; i < 8; i++) {
+ merge.setAsCopy(kmer2);
+ merge.mergeWithRRKmer(i, kmer1);
+ Assert.assertEquals(text1.substring(0, text1.length() - i + 1) + text2, merge.toString());
+ }
+
+ for (int ik = 1; ik <= 10; ik++) {
+ for (int jk = 1; jk <= 10; jk++) {
+ kmer1 = new VKmerBytesWritable();
+ kmer2 = new VKmerBytesWritable();
+ kmer1.setByRead(ik, array, 0);
+ kmer2.setByRead(jk, array, 0);
+ text1 = text.substring(0, ik);
+ text2 = text.substring(0, jk);
+ Assert.assertEquals(text1, kmer1.toString());
+ Assert.assertEquals(text2, kmer2.toString());
+ for (int x = 1; x < (ik < jk ? ik : jk); x++) {
+ merge.setAsCopy(kmer2);
+ merge.mergeWithRRKmer(x, kmer1);
+ Assert.assertEquals(text1.substring(0, text1.length() - x + 1) + text2, merge.toString());
+ }
+ }
+ }
+ }
+
+ @Test
+ public void TestMergeRFAndRRKmer() {
+ String test1 = "TAGAT";
+ String test2 = "TCTAG"; // rc = CTAGA
+ String test3 = "GCTAG";
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ k1.setByRead(5, test1.getBytes(), 0);
+ k2.setByRead(5, test2.getBytes(), 0);
+ k3.setByRead(5, test3.getBytes(), 0);
+ k1.mergeWithRFKmer(5, k2);
+ Assert.assertEquals("CTAGAT", k1.toString());
+ k1.mergeWithRRKmer(5, k3);
+ Assert.assertEquals("GCTAGAT", k1.toString());
+ }
+
+ @Test
+ public void TestMergeRFAndRFKmer() {
+ String test1 = "TAGAT";
+ String test2 = "TCTAG"; // rc = CTAGA
+ String test3 = "CTAGC"; // rc = GCTAG
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ k1.setByRead(5, test1.getBytes(), 0);
+ k2.setByRead(5, test2.getBytes(), 0);
+ k3.setByRead(5, test3.getBytes(), 0);
+ k1.mergeWithRFKmer(5, k2);
+ Assert.assertEquals("CTAGAT", k1.toString());
+ k1.mergeWithRFKmer(5, k3);
+ Assert.assertEquals("GCTAGAT", k1.toString());
+ }
+
+ @Test
+ public void TestMergeRFAndFRKmer() {
+ String test1 = "TAGAT"; // rc = ATCTA
+ String test2 = "TCTAG"; // rc = CTAGA
+ String test3 = "GCTAG"; // rc = CTAGC
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ k1.setByRead(5, test1.getBytes(), 0);
+ k2.setByRead(5, test2.getBytes(), 0);
+ k3.setByRead(5, test3.getBytes(), 0);
+ k2.mergeWithRFKmer(5, k1);
+ Assert.assertEquals("ATCTAG", k2.toString());
+ k2.mergeWithFRKmer(5, k3);
+ Assert.assertEquals("ATCTAGC", k2.toString());
+ }
+
+ @Test
+ public void TestMergeRFAndFFKmer() {
+ String test1 = "TAGAT"; // rc = ATCTA
+ String test2 = "TCTAG"; // rc = CTAGA
+ String test3 = "CTAGC"; // rc = GCTAG
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ k1.setByRead(5, test1.getBytes(), 0);
+ k2.setByRead(5, test2.getBytes(), 0);
+ k3.setByRead(5, test3.getBytes(), 0);
+ k2.mergeWithRFKmer(5, k1);
+ Assert.assertEquals("ATCTAG", k2.toString());
+ k2.mergeWithFFKmer(5, k3);
+ Assert.assertEquals("ATCTAGC", k2.toString());
+ }
+
+ @Test
+ public void TestMergeThreeVKmersRF_FF() {
+ String test1 = "TAGAT"; // rc = ATCTA
+ String test2 = "TCTAG"; // rc = CTAGA
+ String test3 = "CTAGC"; // rc = GCTAG
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ k1.setByRead(5, test1.getBytes(), 0);
+ k2.setByRead(5, test2.getBytes(), 0);
+ k3.setByRead(5, test3.getBytes(), 0);
+ k2.mergeWithRFKmer(5, k1);
+ Assert.assertEquals("ATCTAG", k2.toString());
+ k2.mergeWithFFKmer(5, k3);
+ Assert.assertEquals("ATCTAGC", k2.toString());
+ }
+
+ @Test
+ public void TestMergeThreeVKmerRF_RF() {
+ String test1 = "TAGAT";
+ String test2 = "TCTAG"; // rc = CTAGA
+ String test3 = "CTAGC"; // rc = GCTAG
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ k1.setByRead(5, test1.getBytes(), 0);
+ k2.setByRead(5, test2.getBytes(), 0);
+ k3.setByRead(5, test3.getBytes(), 0);
+ k1.mergeWithRFKmer(5, k2);
+ Assert.assertEquals("CTAGAT", k1.toString());
+ k1.mergeWithRFKmer(5, k3);
+ Assert.assertEquals("GCTAGAT", k1.toString());
+ }
+
+ @Test
+ public void TestFinalMerge() {
+ String selfString;
+ String match;
+ String msgString;
+ int index;
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ int kmerSize = 3;
+
+ String F1 = "AATAG";
+ String F2 = "TAGAA";
+ String R1 = "CTATT";
+ String R2 = "TTCTA";
+
+ //FF test
+ selfString = F1;
+ match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
+ msgString = F2;
+ index = msgString.indexOf(match);
+ // does this test belong in VKmer so it can have variable-length kmers?
+// kmer.reset(msgString.length() - index);
+ kmer.setByRead(kmerSize, msgString.substring(index).getBytes(), 0);
+ System.out.println(kmer.toString());
+
+ //FR test
+ selfString = F1;
+ match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
+ msgString = GeneCode.reverseComplement(R2);
+ index = msgString.indexOf(match);
+ kmer.reset(msgString.length() - index);
+ kmer.setByRead(kmerSize, msgString.substring(index).getBytes(), 0);
+ System.out.println(kmer.toString());
+
+ //RF test
+ selfString = R1;
+ match = selfString.substring(0,kmerSize - 1);
+ msgString = GeneCode.reverseComplement(F2);
+ index = msgString.lastIndexOf(match) + kmerSize - 2;
+ kmer.reset(index + 1);
+ kmer.setByReadReverse(kmerSize, msgString.substring(0, index + 1).getBytes(), 0);
+ System.out.println(kmer.toString());
+
+ //RR test
+ selfString = R1;
+ match = selfString.substring(0,kmerSize - 1);
+ msgString = R2;
+ index = msgString.lastIndexOf(match) + kmerSize - 2;
+ kmer.reset(index + 1);
+ kmer.setByRead(kmerSize, msgString.substring(0, index + 1).getBytes(), 0);
+ System.out.println(kmer.toString());
+
+ String[][] connectedTable = new String[][]{
+ {"FF", "RF"},
+ {"FF", "RR"},
+ {"FR", "RF"},
+ {"FR", "RR"}
+ };
+ System.out.println(connectedTable[0][1]);
+
+ Set<Long> s1 = new HashSet<Long>();
+ Set<Long> s2 = new HashSet<Long>();
+ s1.add((long) 1);
+ s1.add((long) 2);
+ s2.add((long) 2);
+ s2.add((long) 3);
+ Set<Long> intersection = new HashSet<Long>();
+ intersection.addAll(s1);
+ intersection.retainAll(s2);
+ System.out.println(intersection.toString());
+ Set<Long> difference = new HashSet<Long>();
+ difference.addAll(s1);
+ difference.removeAll(s2);
+ System.out.println(difference.toString());
+
+ Map<VKmerBytesWritable, Set<Long>> map = new HashMap<VKmerBytesWritable, Set<Long>>();
+ VKmerBytesWritable k1 = new VKmerBytesWritable();
+ Set<Long> set1 = new HashSet<Long>();
+ k1.setByRead(3, ("CTA").getBytes(), 0);
+ set1.add((long)1);
+ map.put(k1, set1);
+ VKmerBytesWritable k2 = new VKmerBytesWritable();
+ k2.setByRead(3, ("GTA").getBytes(), 0);
+ Set<Long> set2 = new HashSet<Long>();
+ set2.add((long) 2);
+ map.put(k2, set2);
+ VKmerBytesWritable k3 = new VKmerBytesWritable();
+ k3.setByRead(3, ("ATG").getBytes(), 0);
+ Set<Long> set3 = new HashSet<Long>();
+ set3.add((long) 2);
+ map.put(k3, set3);
+ VKmerBytesWritable k4 = new VKmerBytesWritable();
+ k4.setByRead(3, ("AAT").getBytes(), 0);
+ Set<Long> set4 = new HashSet<Long>();
+ set4.add((long) 1);
+ map.put(k4, set4);
+ VKmerListWritable kmerList = new VKmerListWritable();
+ kmerList.append(k1);
+ kmerList.append(k2);
+ System.out.println("CTA = " + map.get(k1).toString());
+ System.out.println("GTA = " + map.get(k2).toString());
+ System.out.println("ATG = " + map.get(k3).toString());
+ System.out.println("AAT = " + map.get(k4).toString());
+ System.out.println(k1.compareTo(k2));
+ System.out.println(k2.compareTo(k1));
+
+ System.out.println("CTA = " + kmerList.getPosition(0).toString());
+ System.out.println("GTA = " + kmerList.getPosition(1).toString());
+ System.out.println("CTA = " + map.get(kmerList.getPosition(0)).toString());
+ System.out.println("GTA = " + map.get(kmerList.getPosition(1)).toString());
+ }
+
+ @Test
+ public void TestEditDistance() {
+ VKmerBytesWritable kmer1 = new VKmerBytesWritable("ACGT");
+ VKmerBytesWritable kmer2 = new VKmerBytesWritable("AAAACGT");
+
+ Assert.assertEquals(kmer1.editDistance(kmer2), 3);
+ Assert.assertEquals(kmer1.editDistance(kmer2), kmer2.editDistance(kmer1));
+ Assert.assertEquals(kmer1.fracDissimilar(kmer2), .75f);
+
+ kmer1.setAsCopy("");
+ Assert.assertEquals(kmer1.editDistance(kmer2), kmer2.getKmerLetterLength());
+ Assert.assertEquals(kmer1.editDistance(kmer2), kmer2.editDistance(kmer1));
+
+ kmer2.setAsCopy("");
+ Assert.assertEquals(kmer1.editDistance(kmer2), kmer2.getKmerLetterLength());
+ Assert.assertEquals(kmer1.editDistance(kmer2), kmer2.editDistance(kmer1));
+
+
+ }
+
+}
diff --git a/genomix/genomix-data/src/test/resources/data/0/text.txt b/genomix/genomix-data/src/test/resources/data/0/text.txt
new file mode 100755
index 0000000..f63a141
--- /dev/null
+++ b/genomix/genomix-data/src/test/resources/data/0/text.txt
@@ -0,0 +1,4 @@
+@625E1AAXX100810:1:100:10000:10271/1
+AATAGAAG
++
+EDBDB?BEEEDGGEGGGDGGGA>DG@GGD;GD@DG@F?<B<BFFD?
diff --git a/genomix/genomix-data/src/test/resources/data/webmap/text.txt b/genomix/genomix-data/src/test/resources/data/webmap/text.txt
new file mode 100755
index 0000000..f63a141
--- /dev/null
+++ b/genomix/genomix-data/src/test/resources/data/webmap/text.txt
@@ -0,0 +1,4 @@
+@625E1AAXX100810:1:100:10000:10271/1
+AATAGAAG
++
+EDBDB?BEEEDGGEGGGDGGGA>DG@GGD;GD@DG@F?<B<BFFD?
diff --git a/genomix/genomix-data/src/test/resources/expected/result2 b/genomix/genomix-data/src/test/resources/expected/result2
new file mode 100755
index 0000000..5e76458
--- /dev/null
+++ b/genomix/genomix-data/src/test/resources/expected/result2
@@ -0,0 +1,4 @@
+AATAG |A 1
+AGAAG T| 1
+ATAGA A|A 1
+TAGAA A|G 1
diff --git a/genomix/genomix-data/src/test/resources/hadoop/conf/core-site.xml b/genomix/genomix-data/src/test/resources/hadoop/conf/core-site.xml
new file mode 100644
index 0000000..3e5bacb
--- /dev/null
+++ b/genomix/genomix-data/src/test/resources/hadoop/conf/core-site.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>fs.default.name</name>
+ <value>hdfs://127.0.0.1:31888</value>
+ </property>
+ <property>
+ <name>hadoop.tmp.dir</name>
+ <value>/tmp/hadoop</value>
+ </property>
+
+
+</configuration>
diff --git a/genomix/genomix-data/src/test/resources/hadoop/conf/hdfs-site.xml b/genomix/genomix-data/src/test/resources/hadoop/conf/hdfs-site.xml
new file mode 100644
index 0000000..b1b1902
--- /dev/null
+++ b/genomix/genomix-data/src/test/resources/hadoop/conf/hdfs-site.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>dfs.replication</name>
+ <value>1</value>
+ </property>
+
+ <property>
+ <name>dfs.block.size</name>
+ <value>65536</value>
+ </property>
+
+</configuration>
diff --git a/genomix/genomix-data/src/test/resources/hadoop/conf/log4j.properties b/genomix/genomix-data/src/test/resources/hadoop/conf/log4j.properties
new file mode 100755
index 0000000..d5e6004
--- /dev/null
+++ b/genomix/genomix-data/src/test/resources/hadoop/conf/log4j.properties
@@ -0,0 +1,94 @@
+# Define some default values that can be overridden by system properties
+hadoop.root.logger=FATAL,console
+hadoop.log.dir=.
+hadoop.log.file=hadoop.log
+
+# Define the root logger to the system property "hadoop.root.logger".
+log4j.rootLogger=${hadoop.root.logger}, EventCounter
+
+# Logging Threshold
+log4j.threshhold=FATAL
+
+#
+# Daily Rolling File Appender
+#
+
+log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Rollver at midnight
+log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
+
+# 30-day backup
+#log4j.appender.DRFA.MaxBackupIndex=30
+log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
+
+# Pattern format: Date LogLevel LoggerName LogMessage
+log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+# Debugging Pattern format
+#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+
+#
+# console
+# Add "console" to rootlogger above if you want to use this
+#
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.err
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
+
+#
+# TaskLog Appender
+#
+
+#Default values
+hadoop.tasklog.taskid=null
+hadoop.tasklog.noKeepSplits=4
+hadoop.tasklog.totalLogFileSize=100
+hadoop.tasklog.purgeLogSplits=true
+hadoop.tasklog.logsRetainHours=12
+
+log4j.appender.TLA=org.apache.hadoop.mapred.TaskLogAppender
+log4j.appender.TLA.taskId=${hadoop.tasklog.taskid}
+log4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}
+
+log4j.appender.TLA.layout=org.apache.log4j.PatternLayout
+log4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+
+#
+# Rolling File Appender
+#
+
+#log4j.appender.RFA=org.apache.log4j.RollingFileAppender
+#log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Logfile size and and 30-day backups
+#log4j.appender.RFA.MaxFileSize=1MB
+#log4j.appender.RFA.MaxBackupIndex=30
+
+#log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+#
+# FSNamesystem Audit logging
+# All audit events are logged at INFO level
+#
+log4j.logger.org.apache.hadoop.fs.FSNamesystem.audit=WARN
+
+# Custom Logging levels
+
+#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG
+#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG
+#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG
+
+# Jets3t library
+log4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR
+
+#
+# Event Counter Appender
+# Sends counts of logging messages at different severity levels to Hadoop Metrics.
+#
+log4j.appender.EventCounter=org.apache.hadoop.metrics.jvm.EventCounter
diff --git a/genomix/genomix-data/src/test/resources/hadoop/conf/mapred-site.xml b/genomix/genomix-data/src/test/resources/hadoop/conf/mapred-site.xml
new file mode 100644
index 0000000..525e7d5
--- /dev/null
+++ b/genomix/genomix-data/src/test/resources/hadoop/conf/mapred-site.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>mapred.job.tracker</name>
+ <value>localhost:29007</value>
+ </property>
+ <property>
+ <name>mapred.tasktracker.map.tasks.maximum</name>
+ <value>20</value>
+ </property>
+ <property>
+ <name>mapred.tasktracker.reduce.tasks.maximum</name>
+ <value>20</value>
+ </property>
+ <property>
+ <name>mapred.max.split.size</name>
+ <value>2048</value>
+ </property>
+
+</configuration>
diff --git a/genomix/genomix-hadoop/data/webmap/BFS_TestSet/3/3 b/genomix/genomix-hadoop/data/webmap/BFS_TestSet/3/3
new file mode 100644
index 0000000..b90246c
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/BFS_TestSet/3/3
@@ -0,0 +1 @@
+1 AATAG
diff --git a/genomix/genomix-hadoop/data/webmap/BFS_TestSet/4/4 b/genomix/genomix-hadoop/data/webmap/BFS_TestSet/4/4
new file mode 100644
index 0000000..3f1cd5c
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/BFS_TestSet/4/4
@@ -0,0 +1 @@
+1 AATAGA
diff --git a/genomix/genomix-hadoop/data/webmap/BFS_TestSet/OddandEven/OddandEven b/genomix/genomix-hadoop/data/webmap/BFS_TestSet/OddandEven/OddandEven
new file mode 100644
index 0000000..b90246c
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/BFS_TestSet/OddandEven/OddandEven
@@ -0,0 +1 @@
+1 AATAG
diff --git a/genomix/genomix-hadoop/data/webmap/BridgeAdd_TestSet/TwoLines/TwoLines_bridgeadd.txt b/genomix/genomix-hadoop/data/webmap/BridgeAdd_TestSet/TwoLines/TwoLines_bridgeadd.txt
new file mode 100644
index 0000000..472a7dc
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/BridgeAdd_TestSet/TwoLines/TwoLines_bridgeadd.txt
@@ -0,0 +1,2 @@
+1 AATAG
+2 CACGC
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/2/2 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/2/2
new file mode 100644
index 0000000..0f501fe
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/2/2
@@ -0,0 +1 @@
+1 AATA
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/3/3 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/3/3
new file mode 100644
index 0000000..b90246c
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/3/3
@@ -0,0 +1 @@
+1 AATAG
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/4/4 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/4/4
new file mode 100644
index 0000000..3f1cd5c
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/4/4
@@ -0,0 +1 @@
+1 AATAGA
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/5/5 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/5/5
new file mode 100644
index 0000000..a720dc4
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/5/5
@@ -0,0 +1 @@
+1 AATAGAA
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/6/6 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/6/6
new file mode 100644
index 0000000..7a95b7c
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/6/6
@@ -0,0 +1 @@
+1 AATAGAAC
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/7/7 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/7/7
new file mode 100644
index 0000000..ce4b8a8
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/7/7
@@ -0,0 +1 @@
+1 AATAGAACT
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/8/8 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/8/8
new file mode 100644
index 0000000..3959d4d
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/8/8
@@ -0,0 +1 @@
+1 AATAGAACTT
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/9/9 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/9/9
new file mode 100644
index 0000000..89ead1e
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/9/9
@@ -0,0 +1 @@
+1 AATAGAACTTA
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/BridgePathWithTandemRepeat/BridgePath b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/BridgePathWithTandemRepeat/BridgePath
new file mode 100644
index 0000000..a7b4eaa
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/BridgePathWithTandemRepeat/BridgePath
@@ -0,0 +1,2 @@
+1 AAATCGAAC
+2 AAATCTAAC
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/ComplexTandemRepeat/Complex b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/ComplexTandemRepeat/Complex
new file mode 100644
index 0000000..8f321a1
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/ComplexTandemRepeat/Complex
@@ -0,0 +1,3 @@
+1 AATCGAA
+2 ATCA
+3 GGAAA
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/ComplexTreePath/TreePath b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/ComplexTreePath/TreePath
new file mode 100644
index 0000000..2a0d13c
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/ComplexTreePath/TreePath
@@ -0,0 +1,3 @@
+1 CGTTACCCATGG
+2 CGTTAAGCACGGCCTGT
+3 CGTTAAGCACTAGTGAC
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/CyclePath/CyclePath b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/CyclePath/CyclePath
new file mode 100644
index 0000000..734590e
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/CyclePath/CyclePath
@@ -0,0 +1 @@
+1 TCTGGGCTCTG
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/FR/FR b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/FR/FR
new file mode 100644
index 0000000..2891207
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/FR/FR
@@ -0,0 +1 @@
+1 ATAG
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/LeftAdj/leftAdj b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/LeftAdj/leftAdj
new file mode 100644
index 0000000..cb2d036
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/LeftAdj/leftAdj
@@ -0,0 +1,3 @@
+1 CAAACC
+2 GAAACC
+3 TAACC
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndFastqTest/2_1.fastq b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndFastqTest/2_1.fastq
new file mode 100644
index 0000000..b6c8bf5
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndFastqTest/2_1.fastq
@@ -0,0 +1,8 @@
+@SOLEXA3_0120:6:100:10000:9829#0/1
+TCACACGGGGCTGTTCCGCCACATCTGGGTCGAACAGCCGAACCACTACCCGCAGGGCGCGTTCTGGGCGCGCGGCAA
++SOLEXA3_0120:6:100:10000:9829#0/1
+hhhhfhghghhhghhghghhchacdhghgghhhghhfhhhghhgdheefhhdgd^aadddeadaa_abdad`daabVa
+@SOLEXA3_0120:6:100:10001:19867#0/1
+TTATGAGCCACGCGCGGCCCGAGACGCTCACCGCGGCGAAGTTCTCGACGCCGTACGTCCTCGCCCGCTGGGGCGCGG
++SOLEXA3_0120:6:100:10001:19867#0/1
+hgfhhhhhhhhhhehhfhhhccddffe_cdffahdddaaaa_abbedWabddaZ^Z`Y^\J\Y^`_V^BBBBBBBBBB
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndFastqTest/2_2.fq b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndFastqTest/2_2.fq
new file mode 100644
index 0000000..f97b505
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndFastqTest/2_2.fq
@@ -0,0 +1,8 @@
+@SOLEXA3_0120:6:100:10000:9829#0/2
+TCGTAGGCGAACATGAGCGTCCCCGACGATTCGAGCGGCGTGTGCGGGTCGTCGACGAGGTTGTGCCAGAAACCGCTA
++SOLEXA3_0120:6:100:10000:9829#0/2
+hhhhhhhhhhhghhghhhhhhhhhhhhheehhhggggfggddddgdgdcffdcd\dc_aa_aa_dbd]a\abcaaa\V
+@SOLEXA3_0120:6:100:10001:19867#0/2
+TGGTACTCGCGCTCGCCGACGTAGCGGCTCCCGTCGCGGGCGGGCACTTCGACGCGCGCGCCCCGCGGGGCGGGGGGG
++SOLEXA3_0120:6:100:10001:19867#0/2
+hhghffdhffdcchchffWffaacccc]Wad`ZO[W\T[YU\UDUJYW_RYM^^^BBBBBBBBBBBBBBBBBBBBBBB
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndTest/2_1 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndTest/2_1
new file mode 100644
index 0000000..dcb20d5
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndTest/2_1
@@ -0,0 +1 @@
+1 TAAAT
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndTest/2_2 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndTest/2_2
new file mode 100644
index 0000000..0d0d4ad
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/PairedEndTest/2_2
@@ -0,0 +1 @@
+1 GCTAT
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/RF/RF b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/RF/RF
new file mode 100644
index 0000000..e7dbd0b
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/RF/RF
@@ -0,0 +1 @@
+1 TAGA
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/RightAdj/rightAdj b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/RightAdj/rightAdj
new file mode 100644
index 0000000..21c66ff
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/RightAdj/rightAdj
@@ -0,0 +1,3 @@
+1 GAAACG
+2 GAAACC
+3 GAAAT
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/RingPath/RingPath b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/RingPath/RingPath
new file mode 100644
index 0000000..0ccdc06
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/RingPath/RingPath
@@ -0,0 +1,2 @@
+1 TCTGGGCTCTG
+2 CTGGGCTCTT
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SelfTandemRepeat/SelfPath.txt b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SelfTandemRepeat/SelfPath.txt
new file mode 100644
index 0000000..f78abbb
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SelfTandemRepeat/SelfPath.txt
@@ -0,0 +1 @@
+1 GGCC
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SimpleBridgePath/bridgepath2 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SimpleBridgePath/bridgepath2
new file mode 100644
index 0000000..f2aeec7
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SimpleBridgePath/bridgepath2
@@ -0,0 +1,2 @@
+1 AATAGAACTT
+2 AATAGCCCTT
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SimplePath/SimplePath b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SimplePath/SimplePath
new file mode 100644
index 0000000..5144dcd
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SimplePath/SimplePath
@@ -0,0 +1,3 @@
+1 CCGCATGAG
+2 TCTCAAATC
+3 TAACGGGAC
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SimpleTreePath/tree b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SimpleTreePath/tree
new file mode 100644
index 0000000..9f52537
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/SimpleTreePath/tree
@@ -0,0 +1,3 @@
+1 GAAACCTTGA
+2 GAAACCTGGG
+3 GAAATCT
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/TandemRepeatWithMergeEdge/MergeEdge b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/TandemRepeatWithMergeEdge/MergeEdge
new file mode 100644
index 0000000..f6da661
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/TandemRepeatWithMergeEdge/MergeEdge
@@ -0,0 +1 @@
+1 AAGGCCCA
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/TandemRepeatWithUnmergeEdge/UnmergeEdge b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/TandemRepeatWithUnmergeEdge/UnmergeEdge
new file mode 100644
index 0000000..ada0dab
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/TandemRepeatWithUnmergeEdge/UnmergeEdge
@@ -0,0 +1 @@
+1 AGGCCC
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/ThreeDuplicate/ThreeDuplicate.txt b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/ThreeDuplicate/ThreeDuplicate.txt
new file mode 100644
index 0000000..99db39c
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/ThreeDuplicate/ThreeDuplicate.txt
@@ -0,0 +1,3 @@
+1 AAATCGAAC
+2 AAATCGAAC
+3 AAATCGAAC
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_6/6 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_6/6
new file mode 100644
index 0000000..be614fb
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_6/6
@@ -0,0 +1,2 @@
+1 AATAGAAC
+2 CATAGAAG
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_7/7 b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_7/7
new file mode 100644
index 0000000..6e72ddd
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_7/7
@@ -0,0 +1,2 @@
+1 AAATAGAACC
+2 CCATAGAAGG
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_FR/head_FR b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_FR/head_FR
new file mode 100644
index 0000000..aa1c7a9
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_FR/head_FR
@@ -0,0 +1,2 @@
+1 AATAG
+2 CATAG
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_RF/head_RF b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_RF/head_RF
new file mode 100644
index 0000000..3c622d6
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_RF/head_RF
@@ -0,0 +1,2 @@
+1 ATAGA
+2 GTAGA
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_RF/head_RF~ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_RF/head_RF~
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/head_RF/head_RF~
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/twohead_FR/TwoHead_FR b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/twohead_FR/TwoHead_FR
new file mode 100644
index 0000000..55c3609
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/twohead_FR/TwoHead_FR
@@ -0,0 +1,2 @@
+1 AATAGA
+2 CATAGG
diff --git a/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/twohead_RF/TwoHead_RF b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/twohead_RF/TwoHead_RF
new file mode 100644
index 0000000..0e4506f
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/PathMerge_TestSet/twohead_RF/TwoHead_RF
@@ -0,0 +1,2 @@
+1 ATAGAA
+2 GTAGAC
diff --git a/genomix/genomix-hadoop/data/webmap/Scaffolding_TestSet/PairedEnd/2_1 b/genomix/genomix-hadoop/data/webmap/Scaffolding_TestSet/PairedEnd/2_1
new file mode 100644
index 0000000..a720dc4
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/Scaffolding_TestSet/PairedEnd/2_1
@@ -0,0 +1 @@
+1 AATAGAA
diff --git a/genomix/genomix-hadoop/data/webmap/Scaffolding_TestSet/PairedEnd/2_2 b/genomix/genomix-hadoop/data/webmap/Scaffolding_TestSet/PairedEnd/2_2
new file mode 100644
index 0000000..1af7a05
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/Scaffolding_TestSet/PairedEnd/2_2
@@ -0,0 +1 @@
+1 TAAGTTC
diff --git a/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/2to1/2to1 b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/2to1/2to1
new file mode 100644
index 0000000..82542e2
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/2to1/2to1
@@ -0,0 +1,2 @@
+1 TAAAT
+2 GAAAT
diff --git a/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/AdjSplitRepeat/AdjSplitRepeat.txt b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/AdjSplitRepeat/AdjSplitRepeat.txt
new file mode 100644
index 0000000..f2e3942
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/AdjSplitRepeat/AdjSplitRepeat.txt
@@ -0,0 +1,3 @@
+1 AATAG
+2 GCATA
+3 ATAGC
diff --git a/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/ComplexSplitManyTimes/ComplexMany b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/ComplexSplitManyTimes/ComplexMany
new file mode 100644
index 0000000..015c73d
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/ComplexSplitManyTimes/ComplexMany
@@ -0,0 +1,7 @@
+1 TAAAT
+2 GAAAG
+3 CAAAC
+4 TAAAG
+5 GAAAC
+6 CAAAT
+7 TAAAC
diff --git a/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/SimpleSplitManyTimes/simpleMany b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/SimpleSplitManyTimes/simpleMany
new file mode 100644
index 0000000..519e098
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/SimpleSplitManyTimes/simpleMany
@@ -0,0 +1,3 @@
+1 TAAAT
+2 GAAAG
+3 CAAAC
diff --git a/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/SplitOnce/SplitOnce.txt b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/SplitOnce/SplitOnce.txt
new file mode 100644
index 0000000..d8e2b7e
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/SplitOnce/SplitOnce.txt
@@ -0,0 +1,2 @@
+1 AATAG
+2 GCATA
diff --git a/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/SplitTwice/SplitTwice.txt b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/SplitTwice/SplitTwice.txt
new file mode 100644
index 0000000..bb03d70
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/SplitRepeat_TestSet/SplitTwice/SplitTwice.txt
@@ -0,0 +1,2 @@
+1 AATAG
+2 CATAC
diff --git a/genomix/genomix-hadoop/data/webmap/lastesttest/HighSplitRepeat/HighSplitRepeat.txt b/genomix/genomix-hadoop/data/webmap/lastesttest/HighSplitRepeat/HighSplitRepeat.txt
new file mode 100644
index 0000000..eca0a13
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/lastesttest/HighSplitRepeat/HighSplitRepeat.txt
@@ -0,0 +1,3 @@
+1 AGCCACA
+2 GCACTTT
+3 CGCCGTC
diff --git a/genomix/genomix-hadoop/data/webmap/lastesttest/LowSplitRepeat/LowSplitRepeat.txt b/genomix/genomix-hadoop/data/webmap/lastesttest/LowSplitRepeat/LowSplitRepeat.txt
new file mode 100644
index 0000000..259fd80
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/lastesttest/LowSplitRepeat/LowSplitRepeat.txt
@@ -0,0 +1,3 @@
+1 AGCCA
+2 AGCCG
+3 GCCTT
diff --git a/genomix/genomix-hadoop/data/webmap/lastesttest/MidSplitRepeat/MidSplitRepeat.txt b/genomix/genomix-hadoop/data/webmap/lastesttest/MidSplitRepeat/MidSplitRepeat.txt
new file mode 100644
index 0000000..e934e54
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/lastesttest/MidSplitRepeat/MidSplitRepeat.txt
@@ -0,0 +1,3 @@
+1 AGCCA
+2 CGCCT
+3 GCCGG
diff --git a/genomix/genomix-hadoop/data/webmap/lastesttest/Tips1/Tips1.txt b/genomix/genomix-hadoop/data/webmap/lastesttest/Tips1/Tips1.txt
new file mode 100644
index 0000000..1e16d68
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/lastesttest/Tips1/Tips1.txt
@@ -0,0 +1,2 @@
+1 CAGCCA
+2 GCCGTA
diff --git a/genomix/genomix-hadoop/data/webmap/lastesttest/Tips2/Tips2.txt b/genomix/genomix-hadoop/data/webmap/lastesttest/Tips2/Tips2.txt
new file mode 100644
index 0000000..8109730
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/lastesttest/Tips2/Tips2.txt
@@ -0,0 +1,2 @@
+1 ACAGCG
+2 GGCGAA
diff --git a/genomix/genomix-hadoop/data/webmap/lastesttest/Tips3/Tips3.txt b/genomix/genomix-hadoop/data/webmap/lastesttest/Tips3/Tips3.txt
new file mode 100644
index 0000000..a672034
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/lastesttest/Tips3/Tips3.txt
@@ -0,0 +1,2 @@
+1 CAGCCT
+2 CAGCCA
diff --git a/genomix/genomix-hadoop/data/webmap/lastesttest/Tips4/Tips4.txt b/genomix/genomix-hadoop/data/webmap/lastesttest/Tips4/Tips4.txt
new file mode 100644
index 0000000..499e8e6
--- /dev/null
+++ b/genomix/genomix-hadoop/data/webmap/lastesttest/Tips4/Tips4.txt
@@ -0,0 +1,2 @@
+1 CAGGCA
+2 CAGGCC
diff --git a/genomix/genomix-hadoop/pom.xml b/genomix/genomix-hadoop/pom.xml
new file mode 100755
index 0000000..f084203
--- /dev/null
+++ b/genomix/genomix-hadoop/pom.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>genomix-hadoop</artifactId>
+ <name>genomix-hadoop</name>
+ <parent>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>genomix</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ </parent>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.7</source>
+ <target>1.7</target>
+ <fork>true</fork>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-my-jar-with-dependencies</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>appassembler-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <configuration>
+ <programs>
+ <program>
+ <mainClass>edu.uci.ics.maxclique.Driver</mainClass>
+ <name>maxclique</name>
+ </program>
+ </programs>
+ <repositoryLayout>flat</repositoryLayout>
+ <repositoryName>lib</repositoryName>
+ </configuration>
+ <phase>package</phase>
+ <goals>
+ <goal>assemble</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.7.2</version>
+ <configuration>
+ <forkMode>pertest</forkMode>
+ <argLine>-enableassertions -Xmx512m -XX:MaxPermSize=300m
+ -Dfile.encoding=UTF-8
+ -Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
+ <includes>
+ <include>**/*TestSuite.java</include>
+ <include>**/*Test.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>.</directory>
+ <includes>
+ <include>teststore*</include>
+ <include>edu*</include>
+ <include>build*</include>
+ <include>log*</include>
+ <include>ClusterController*</include>
+ </includes>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-core</artifactId>
+ <version>0.20.2</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-test</artifactId>
+ <version>0.20.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.kenai.nbpwr</groupId>
+ <artifactId>org-apache-commons-io</artifactId>
+ <version>1.3.1-201002241208</version>
+ <type>nbm</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jcl</artifactId>
+ <version>1.6.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.6.3</version>
+ </dependency>
+ <dependency>
+ <groupId>args4j</groupId>
+ <artifactId>args4j</artifactId>
+ <version>2.0.16</version>
+ </dependency>
+ <dependency>
+ <groupId>com.kenai.nbpwr</groupId>
+ <artifactId>org-apache-commons-io</artifactId>
+ <version>1.3.1-201002241208</version>
+ <type>nbm</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>genomix-data</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>genomix-hyracks</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-hdfs-core</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <scope>compile</scope>
+ <type>jar</type>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-hdfs-core</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.mrunit</groupId>
+ <artifactId>mrunit</artifactId>
+ <version>1.0.0</version>
+ <classifier>hadoop1</classifier>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java
new file mode 100644
index 0000000..05a69ab
--- /dev/null
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixDriver.java
@@ -0,0 +1,85 @@
+package edu.uci.ics.genomix.hadoop.contrailgraphbuilding;
+
+import java.io.IOException;
+
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.mapred.FileInputFormat;
+import org.apache.hadoop.mapred.FileOutputFormat;
+import org.apache.hadoop.mapred.JobClient;
+import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.SequenceFileOutputFormat;
+import org.apache.hadoop.mapred.TextInputFormat;
+import org.apache.hadoop.mapred.TextOutputFormat;
+import org.apache.hadoop.mapred.lib.NLineInputFormat;
+import org.kohsuke.args4j.CmdLineParser;
+import org.kohsuke.args4j.Option;
+
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+
+@SuppressWarnings("deprecation")
+public class GenomixDriver {
+
+ private static class Options {
+ @Option(name = "-inputpath", usage = "the input path", required = true)
+ public String inputPath;
+
+ @Option(name = "-outputpath", usage = "the output path", required = true)
+ public String outputPath;
+
+ @Option(name = "-num-reducers", usage = "the number of reducers", required = true)
+ public int numReducers;
+
+ @Option(name = "-kmer-size", usage = "the size of kmer", required = true)
+ public int sizeKmer;
+
+// @Option(name = "-read-length", usage = "the length of read", required = true)
+// public int readLength;
+ }
+
+ public void run(String inputPath, String outputPath, int numReducers, int sizeKmer,
+ boolean seqOutput, String defaultConfPath) throws IOException{
+ JobConf conf = new JobConf(GenomixDriver.class);
+ conf.setInt("sizeKmer", sizeKmer);
+ if (defaultConfPath != null) {
+ conf.addResource(new Path(defaultConfPath));
+ }
+
+ conf.setJobName("Genomix Graph Building");
+ conf.setMapperClass(GenomixMapper.class);
+ conf.setReducerClass(GenomixReducer.class);
+
+ conf.setMapOutputKeyClass(VKmerBytesWritable.class);
+ conf.setMapOutputValueClass(NodeWritable.class);
+
+ //InputFormat and OutputFormat for Reducer
+ conf.setInputFormat(NLineInputFormat.class);
+ conf.setInt("mapred.line.input.format.linespermap", 4 * 10);
+ if (seqOutput == true)
+ conf.setOutputFormat(SequenceFileOutputFormat.class);
+ else
+ conf.setOutputFormat(TextOutputFormat.class);
+
+ //Output Key/Value Class
+ conf.setOutputKeyClass(VKmerBytesWritable.class);
+ conf.setOutputValueClass(NodeWritable.class);
+
+ FileInputFormat.setInputPaths(conf, new Path(inputPath));
+ FileOutputFormat.setOutputPath(conf, new Path(outputPath));
+ conf.setNumReduceTasks(numReducers);
+
+ FileSystem dfs = FileSystem.get(conf);
+ dfs.delete(new Path(outputPath), true);
+ JobClient.runJob(conf);
+ }
+
+ public static void main(String[] args) throws Exception {
+ Options options = new Options();
+ CmdLineParser parser = new CmdLineParser(options);
+ parser.parseArgument(args);
+ GenomixDriver driver = new GenomixDriver();
+ driver.run(options.inputPath, options.outputPath, options.numReducers, options.sizeKmer, true, null);
+ }
+}
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
new file mode 100644
index 0000000..849f8cf
--- /dev/null
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
@@ -0,0 +1,319 @@
+package edu.uci.ics.genomix.hadoop.contrailgraphbuilding;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.mapred.InputFormat;
+import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.MapReduceBase;
+import org.apache.hadoop.mapred.Mapper;
+import org.apache.hadoop.mapred.OutputCollector;
+import org.apache.hadoop.mapred.Reporter;
+import org.apache.hadoop.mapred.lib.NLineInputFormat;
+
+import edu.uci.ics.genomix.type.EdgeListWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.PositionListWritable;
+import edu.uci.ics.genomix.type.PositionWritable;
+
+@SuppressWarnings("deprecation")
+public class GenomixMapper extends MapReduceBase implements
+ Mapper<LongWritable, Text, VKmerBytesWritable, NodeWritable>{
+
+ public static enum KmerDir{
+ FORWARD,
+ REVERSE,
+ }
+
+ public static int KMER_SIZE;
+ private VKmerBytesWritable preForwardKmer;
+ private VKmerBytesWritable preReverseKmer;
+ private VKmerBytesWritable curForwardKmer;
+ private VKmerBytesWritable curReverseKmer;
+ private VKmerBytesWritable nextForwardKmer;
+ private VKmerBytesWritable nextReverseKmer;
+ private PositionWritable nodeId;
+ private PositionListWritable nodeIdList;
+ private EdgeWritable edgeForPreKmer;
+ private EdgeWritable edgeForNextKmer;
+ private EdgeListWritable edgeListForPreKmer;
+ private EdgeListWritable edgeListForNextKmer;
+ private NodeWritable outputNode;
+
+ private KmerDir preKmerDir;
+ private KmerDir curKmerDir;
+ private KmerDir nextKmerDir;
+
+ byte mateId = (byte)0;
+ boolean fastqFormat = false;
+ int lineCount = 0;
+
+ @Override
+ public void configure(JobConf job) {
+ KMER_SIZE = Integer.parseInt(job.get("sizeKmer"));
+ KmerBytesWritable.setGlobalKmerLength(KMER_SIZE);
+ preForwardKmer = new VKmerBytesWritable();
+ preReverseKmer = new VKmerBytesWritable();
+ curForwardKmer = new VKmerBytesWritable();
+ curReverseKmer = new VKmerBytesWritable();
+ nextForwardKmer = new VKmerBytesWritable();
+ nextReverseKmer = new VKmerBytesWritable();
+ nodeId = new PositionWritable();
+ nodeIdList = new PositionListWritable();
+ edgeForPreKmer = new EdgeWritable();
+ edgeForNextKmer = new EdgeWritable();
+ edgeListForPreKmer = new EdgeListWritable();
+ edgeListForNextKmer = new EdgeListWritable();
+ outputNode = new NodeWritable();
+ preKmerDir = KmerDir.FORWARD;
+ curKmerDir = KmerDir.FORWARD;
+ nextKmerDir = KmerDir.FORWARD;
+ lineCount = 0;
+
+ // paired-end reads should be named something like dsm3757.01-31-2011.ln6_1.fastq
+ // when we have a proper driver, we will set a config field instead of reading in the filename
+ String filename = job.get("map.input.file");
+ String[] tokens = filename.split("\\.(?=[^\\.]+$)"); // split on the last "." to get the basename and the extension
+ if (tokens.length > 2)
+ throw new IllegalStateException("Parse error trying to parse filename... split extension tokens are: " + tokens.toString());
+ String basename = tokens[0];
+ String extension = tokens.length == 2 ? tokens[1] : "";
+
+ if (basename.endsWith("_2")) {
+ mateId = (byte) 1;
+ } else {
+ mateId = (byte) 0;
+ }
+
+ if (extension.equals("fastq") || extension.equals("fq")) {
+ if (! (job.getInputFormat() instanceof NLineInputFormat)) {
+ throw new IllegalStateException("Fastq files require the NLineInputFormat (was " + job.getInputFormat() + " ).");
+ }
+ if (job.getInt("mapred.line.input.format.linespermap", -1) % 4 != 0) {
+ throw new IllegalStateException("Fastq files require the `mapred.line.input.format.linespermap` option to be divisible by 4 (was " + job.get("mapred.line.input.format.linespermap") + ").");
+ }
+ fastqFormat = true;
+ }
+ }
+
+ @Override
+ public void map(LongWritable key, Text value, OutputCollector<VKmerBytesWritable, NodeWritable> output,
+ Reporter reporter) throws IOException {
+ lineCount++;
+ long readID = 0;
+ String geneLine;
+
+ if (fastqFormat) {
+ if ((lineCount - 1) % 4 == 1) {
+ readID = key.get(); // this is actually the offset into the file... will it be the same across all files?? //TODO test this
+ geneLine = value.toString().trim();
+ } else {
+ return; //skip all other lines
+ }
+ } else {
+ String[] rawLine = value.toString().split("\\t"); // Read the Real Gene Line
+ if (rawLine.length != 2) {
+ throw new IOException("invalid data");
+ }
+ readID = Long.parseLong(rawLine[0]);
+ geneLine = rawLine[1];
+ }
+
+ Pattern genePattern = Pattern.compile("[AGCT]+");
+ Matcher geneMatcher = genePattern.matcher(geneLine);
+ boolean isValid = geneMatcher.matches();
+ if (isValid == true) {
+ byte[] array = geneLine.getBytes();
+ if (KMER_SIZE >= array.length) {
+ throw new IOException("short read");
+ }
+ /** first kmer **/
+ outputNode.reset();
+ curForwardKmer.setByRead(KMER_SIZE, array, 0);
+ curReverseKmer.setByReadReverse(KMER_SIZE, array, 0);
+ curKmerDir = curForwardKmer.compareTo(curReverseKmer) <= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
+ setNextKmer(array[KMER_SIZE]);
+ //set nodeId
+ setNodeId(mateId, readID, 0);
+ //set value.edgeList and value.threads/readId
+ setEdgeListForNextKmer();
+ //set value.coverage = 1
+ outputNode.setAvgCoverage(1);
+ //set value.startReads because this is the first kmer in read
+ if(curKmerDir == KmerDir.FORWARD)
+ outputNode.setStartReads(nodeIdList);
+ else
+ outputNode.setEndReads(nodeIdList);
+ //output mapper result
+ setMapperOutput(output);
+
+ /** middle kmer **/
+ for (int i = KMER_SIZE + 1; i < array.length; i++) {
+ outputNode.reset();
+ setPreKmerByOldCurKmer();
+ setCurKmerByOldNextKmer();
+ setNextKmer(array[i]);
+ //set nodeId
+ setNodeId(mateId, readID, i - KMER_SIZE + 1);
+ //set value.edgeList and value.threads/readId
+ setEdgeListForPreKmer();
+ setEdgeListForNextKmer();
+ //set coverage = 1
+ outputNode.setAvgCoverage(1);
+ //output mapper result
+ setMapperOutput(output);
+ }
+
+ /** last kmer **/
+ outputNode.reset();
+ setPreKmerByOldCurKmer();
+ setCurKmerByOldNextKmer();
+ //set nodeId
+ setNodeId(mateId, readID, array.length - KMER_SIZE + 1);
+ //set value.edgeList and value.threads/readId
+ setEdgeListForPreKmer();
+ //set coverage = 1
+ outputNode.setAvgCoverage(1);
+ //output mapper result
+ setMapperOutput(output);
+ }
+ }
+
+ public void setNodeId(byte mateId, long readID, int posId){
+ nodeId.set(mateId, readID, posId);
+ nodeIdList.reset();
+ nodeIdList.append(nodeId);
+ }
+
+ public void setEdgeListForPreKmer(){
+ switch(curKmerDir){
+ case FORWARD:
+ switch(preKmerDir){
+ case FORWARD:
+ edgeListForPreKmer.reset();
+ edgeForPreKmer.setKey(preForwardKmer);
+ edgeForPreKmer.setReadIDs(nodeIdList);
+ edgeListForPreKmer.add(edgeForPreKmer);
+ outputNode.setEdgeList(DirectionFlag.DIR_RR, edgeListForPreKmer);
+ break;
+ case REVERSE:
+ edgeListForPreKmer.reset();
+ edgeForPreKmer.setKey(preReverseKmer);
+ edgeForPreKmer.setReadIDs(nodeIdList);
+ edgeListForPreKmer.add(edgeForPreKmer);
+ outputNode.setEdgeList(DirectionFlag.DIR_RF, edgeListForPreKmer);
+ break;
+ }
+ break;
+ case REVERSE:
+ switch(preKmerDir){
+ case FORWARD:
+ edgeListForPreKmer.reset();
+ edgeForPreKmer.setKey(preForwardKmer);
+ edgeForPreKmer.setReadIDs(nodeIdList);
+ edgeListForPreKmer.add(edgeForPreKmer);
+ outputNode.setEdgeList(DirectionFlag.DIR_FR, edgeListForPreKmer);
+ break;
+ case REVERSE:
+ edgeListForPreKmer.reset();
+ edgeForPreKmer.setKey(preReverseKmer);
+ edgeForPreKmer.setReadIDs(nodeIdList);
+ edgeListForPreKmer.add(edgeForPreKmer);
+ outputNode.setEdgeList(DirectionFlag.DIR_FF, edgeListForPreKmer);
+ break;
+ }
+ break;
+ }
+ }
+
+ public void setEdgeListForNextKmer(){
+ switch(curKmerDir){
+ case FORWARD:
+ switch(nextKmerDir){
+ case FORWARD:
+ edgeListForNextKmer.reset();
+ edgeForNextKmer.setKey(nextForwardKmer);
+ edgeForNextKmer.setReadIDs(nodeIdList);
+ edgeListForNextKmer.add(edgeForNextKmer);
+ outputNode.setEdgeList(DirectionFlag.DIR_FF, edgeListForNextKmer);
+ break;
+ case REVERSE:
+ edgeListForNextKmer.reset();
+ edgeForNextKmer.setKey(nextReverseKmer);
+ edgeForNextKmer.setReadIDs(nodeIdList);
+ edgeListForNextKmer.add(edgeForNextKmer);
+ outputNode.setEdgeList(DirectionFlag.DIR_FR, edgeListForNextKmer);
+ break;
+ }
+ break;
+ case REVERSE:
+ switch(nextKmerDir){
+ case FORWARD:
+ edgeListForNextKmer.reset();
+ edgeForNextKmer.setKey(nextForwardKmer);
+ edgeForNextKmer.setReadIDs(nodeIdList);
+ edgeListForNextKmer.add(edgeForNextKmer);
+ new EdgeListWritable(Arrays.asList(new EdgeWritable(nextForwardKmer, nodeIdList)));
+ outputNode.setEdgeList(DirectionFlag.DIR_RF, edgeListForNextKmer);
+ break;
+ case REVERSE:
+ edgeListForNextKmer.reset();
+ edgeForNextKmer.setKey(nextReverseKmer);
+ edgeForNextKmer.setReadIDs(nodeIdList);
+ edgeListForNextKmer.add(edgeForNextKmer);
+ outputNode.setEdgeList(DirectionFlag.DIR_RR, edgeListForNextKmer);
+ break;
+ }
+ break;
+ }
+ }
+
+ //set preKmer by shifting curKmer with preChar
+ public void setPreKmer(byte preChar){
+ preForwardKmer.setAsCopy(curForwardKmer);
+ preForwardKmer.shiftKmerWithPreChar(preChar);
+ preReverseKmer.setByReadReverse(KMER_SIZE, preForwardKmer.toString().getBytes(), preForwardKmer.getBlockOffset());
+ preKmerDir = preForwardKmer.compareTo(preReverseKmer) <= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
+ }
+
+ //set nextKmer by shifting curKmer with nextChar
+ public void setNextKmer(byte nextChar){
+ nextForwardKmer.setAsCopy(curForwardKmer);
+ nextForwardKmer.shiftKmerWithNextChar(nextChar);
+ nextReverseKmer.setByReadReverse(KMER_SIZE, nextForwardKmer.toString().getBytes(), nextForwardKmer.getBlockOffset());
+ nextKmerDir = nextForwardKmer.compareTo(nextReverseKmer) <= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
+ }
+
+ //old curKmer becomes current preKmer
+ public void setPreKmerByOldCurKmer(){
+ preKmerDir = curKmerDir;
+ preForwardKmer.setAsCopy(curForwardKmer);
+ preReverseKmer.setAsCopy(curReverseKmer);
+ }
+
+ //old nextKmer becomes current curKmer
+ public void setCurKmerByOldNextKmer(){
+ curKmerDir = nextKmerDir;
+ curForwardKmer.setAsCopy(nextForwardKmer);
+ curReverseKmer.setAsCopy(nextReverseKmer);
+ }
+
+ public void setMapperOutput(OutputCollector<VKmerBytesWritable, NodeWritable> output) throws IOException{
+ switch(curKmerDir){
+ case FORWARD:
+ output.collect(curForwardKmer, outputNode);
+ break;
+ case REVERSE:
+ output.collect(curReverseKmer, outputNode);
+ break;
+ }
+ }
+}
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
new file mode 100644
index 0000000..6bc4549
--- /dev/null
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
@@ -0,0 +1,52 @@
+package edu.uci.ics.genomix.hadoop.contrailgraphbuilding;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.MapReduceBase;
+import org.apache.hadoop.mapred.OutputCollector;
+import org.apache.hadoop.mapred.Reducer;
+import org.apache.hadoop.mapred.Reporter;
+
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+@SuppressWarnings("deprecation")
+public class GenomixReducer extends MapReduceBase implements
+ Reducer<VKmerBytesWritable, NodeWritable, VKmerBytesWritable, NodeWritable>{
+
+ public static int KMER_SIZE;
+ private NodeWritable outputNode;
+ private NodeWritable tmpNode;
+ private float averageCoverage;
+
+ @Override
+ public void configure(JobConf job) {
+ KMER_SIZE = GenomixMapper.KMER_SIZE;
+ outputNode = new NodeWritable();
+ tmpNode = new NodeWritable();
+ }
+
+ @Override
+ public void reduce(VKmerBytesWritable key, Iterator<NodeWritable> values,
+ OutputCollector<VKmerBytesWritable, NodeWritable> output,
+ Reporter reporter) throws IOException {
+ outputNode.reset();
+ averageCoverage = 0;
+
+ while (values.hasNext()) {
+ tmpNode.setAsCopy(values.next());
+ for (byte d: DirectionFlag.values) {
+ outputNode.getEdgeList(d).unionUpdate(tmpNode.getEdgeList(d));
+ }
+ outputNode.getStartReads().unionUpdate(tmpNode.getStartReads());
+ outputNode.getEndReads().unionUpdate(tmpNode.getEndReads());
+ averageCoverage += tmpNode.getAvgCoverage();
+ }
+ outputNode.setAvgCoverage(averageCoverage);
+ output.collect(key,outputNode);
+ }
+
+}
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
new file mode 100644
index 0000000..84a5361
--- /dev/null
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
@@ -0,0 +1,106 @@
+package edu.uci.ics.genomix.hadoop.graph;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.Iterator;
+
+import org.apache.commons.io.filefilter.WildcardFileFilter;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.io.SequenceFile;
+
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+
+public class GenerateGraphViz {
+
+ /**
+ * Construct a DOT graph in memory, convert it
+ * to image and store the image in the file system.
+ */
+ public static void convertGraphBuildingOutputToGraphViz(String srcDir, String destDir) throws Exception {
+ GraphViz gv = new GraphViz();
+ gv.addln(gv.start_graph());
+
+ Configuration conf = new Configuration();
+ FileSystem fileSys = FileSystem.getLocal(conf);
+ File srcPath = new File(srcDir);
+
+ String outputNode = "";
+ String outputEdge = "";
+ for (File f : srcPath.listFiles((FilenameFilter) (new WildcardFileFilter("part*")))) {
+ SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, new Path(f.getAbsolutePath()), conf);
+ VKmerBytesWritable key = new VKmerBytesWritable();
+ NodeWritable value = new NodeWritable();
+
+ gv.addln("rankdir=LR\n");
+
+ while (reader.next(key, value)) {
+ outputNode = "";
+ outputEdge = "";
+ if (key == null) {
+ break;
+ }
+ outputNode += key.toString();
+ /** convert edge to graph **/
+ outputEdge = convertEdgeToGraph(outputNode, value);
+ gv.addln(outputEdge);
+ /** add readIdSet **/
+ String fillColor = "";
+ if(value.isStartReadOrEndRead())
+ fillColor = "fillcolor=\"grey\", style=\"filled\",";
+ outputNode += " [shape=record, " + fillColor + " label = \"<f0> " + key.toString()
+ + "|<f1> " + value.getStartReads().printStartReadIdSet()
+ + "|<f2> " + value.getEndReads().printEndReadIdSet()
+ + "|<f3> " + value.getAvgCoverage() + "\"]\n";
+ gv.addln(outputNode);
+ }
+ reader.close();
+ }
+
+ gv.addln(gv.end_graph());
+ System.out.println(gv.getDotSource());
+
+ String type = "ps";
+ File folder = new File(destDir);
+ folder.mkdirs();
+ File out = new File(destDir + "/result." + type); // Linux
+ gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
+ }
+
+ public static String convertEdgeToGraph(String outputNode, NodeWritable value) {
+ String outputEdge = "";
+ Iterator<EdgeWritable> edgeIterator;
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"black\" label =\"FF: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"blue\" label =\"FR: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"green\" label =\"RF: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"red\" label =\"RR: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ //TODO should output actualKmer instead of kmer
+ if (outputEdge == "")
+ outputEdge += outputNode;
+ return outputEdge;
+ }
+}
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GraphViz.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GraphViz.java
new file mode 100644
index 0000000..ec22f80
--- /dev/null
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GraphViz.java
@@ -0,0 +1,297 @@
+package edu.uci.ics.genomix.hadoop.graph;
+
+// GraphViz.java - a simple API to call dot from Java programs
+
+/*$Id$*/
+/*
+ ******************************************************************************
+ * *
+ * (c) Copyright 2003 Laszlo Szathmary *
+ * *
+ * This program is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as published by *
+ * the Free Software Foundation; either version 2.1 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public *
+ * License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public License *
+ * along with this program; if not, write to the Free Software Foundation, *
+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
+ * *
+ ******************************************************************************
+ */
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+
+/**
+ * <dl>
+ * <dt>Purpose: GraphViz Java API
+ * <dd>
+ * <dt>Description:
+ * <dd>With this Java class you can simply call dot from your Java programs
+ * <dt>Example usage:
+ * <dd>
+ *
+ * <pre>
+ * GraphViz gv = new GraphViz();
+ * gv.addln(gv.start_graph());
+ * gv.addln("A -> B;");
+ * gv.addln("A -> C;");
+ * gv.addln(gv.end_graph());
+ * System.out.println(gv.getDotSource());
+ *
+ * String type = "gif";
+ * File out = new File("out." + type); // out.gif in this example
+ * gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
+ * </pre>
+ *
+ * </dd>
+ * </dl>
+ *
+ * @version v0.4, 2011/02/05 (February) -- Patch of Keheliya Gallaba is added. Now you
+ * can specify the type of the output file: gif, dot, fig, pdf, ps, svg, png, etc.
+ * @version v0.3, 2010/11/29 (November) -- Windows support + ability
+ * to read the graph from a text file
+ * @version v0.2, 2010/07/22 (July) -- bug fix
+ * @version v0.1, 2003/12/04 (December) -- first release
+ * @author Laszlo Szathmary (<a href="jabba.laci@gmail.com">jabba.laci@gmail.com</a>)
+ */
+public class GraphViz {
+ /**
+ * The dir. where temporary files will be created.
+ */
+ private static String TEMP_DIR = "/tmp"; // Linux
+ // private static String TEMP_DIR = "c:/temp"; // Windows
+
+ /**
+ * Where is your dot program located? It will be called externally.
+ */
+ private static String DOT = "/usr/bin/dot"; // Linux
+ // private static String DOT = "c:/Program Files/Graphviz2.26.3/bin/dot.exe"; // Windows
+
+ /**
+ * The source of the graph written in dot language.
+ */
+ private StringBuilder graph = new StringBuilder();
+
+ /**
+ * Constructor: creates a new GraphViz object that will contain
+ * a graph.
+ */
+ public GraphViz() {
+ }
+
+ /**
+ * Returns the graph's source description in dot language.
+ *
+ * @return Source of the graph in dot language.
+ */
+ public String getDotSource() {
+ return graph.toString();
+ }
+
+ /**
+ * Adds a string to the graph's source (without newline).
+ */
+ public void add(String line) {
+ graph.append(line);
+ }
+
+ /**
+ * Adds a string to the graph's source (with newline).
+ */
+ public void addln(String line) {
+ graph.append(line + "\n");
+ }
+
+ /**
+ * Adds a newline to the graph's source.
+ */
+ public void addln() {
+ graph.append('\n');
+ }
+
+ /**
+ * Returns the graph as an image in binary format.
+ *
+ * @param dot_source
+ * Source of the graph to be drawn.
+ * @param type
+ * Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
+ * @return A byte array containing the image of the graph.
+ */
+ public byte[] getGraph(String dot_source, String type) {
+ File dot;
+ byte[] img_stream = null;
+
+ try {
+ dot = writeDotSourceToFile(dot_source);
+ if (dot != null) {
+ img_stream = get_img_stream(dot, type);
+ if (dot.delete() == false)
+ System.err.println("Warning: " + dot.getAbsolutePath() + " could not be deleted!");
+ return img_stream;
+ }
+ return null;
+ } catch (java.io.IOException ioe) {
+ return null;
+ }
+ }
+
+ /**
+ * Writes the graph's image in a file.
+ *
+ * @param img
+ * A byte array containing the image of the graph.
+ * @param file
+ * Name of the file to where we want to write.
+ * @return Success: 1, Failure: -1
+ */
+ public int writeGraphToFile(byte[] img, String file) {
+ File to = new File(file);
+ return writeGraphToFile(img, to);
+ }
+
+ /**
+ * Writes the graph's image in a file.
+ *
+ * @param img
+ * A byte array containing the image of the graph.
+ * @param to
+ * A File object to where we want to write.
+ * @return Success: 1, Failure: -1
+ */
+ public int writeGraphToFile(byte[] img, File to) {
+ try {
+ FileOutputStream fos = new FileOutputStream(to);
+ fos.write(img);
+ fos.close();
+ } catch (java.io.IOException ioe) {
+ return -1;
+ }
+ return 1;
+ }
+
+ /**
+ * It will call the external dot program, and return the image in
+ * binary format.
+ *
+ * @param dot
+ * Source of the graph (in dot language).
+ * @param type
+ * Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
+ * @return The image of the graph in .gif format.
+ */
+ private byte[] get_img_stream(File dot, String type) {
+ File img;
+ byte[] img_stream = null;
+
+ try {
+ img = File.createTempFile("graph_", "." + type, new File(GraphViz.TEMP_DIR));
+ Runtime rt = Runtime.getRuntime();
+
+ // patch by Mike Chenault
+ String[] args = { DOT, "-T" + type, dot.getAbsolutePath(), "-o", img.getAbsolutePath() };
+ Process p = rt.exec(args);
+
+ p.waitFor();
+
+ FileInputStream in = new FileInputStream(img.getAbsolutePath());
+ img_stream = new byte[in.available()];
+ in.read(img_stream);
+ // Close it if we need to
+ if (in != null)
+ in.close();
+
+ if (img.delete() == false)
+ System.err.println("Warning: " + img.getAbsolutePath() + " could not be deleted!");
+ } catch (java.io.IOException ioe) {
+ System.err.println("Error: in I/O processing of tempfile in dir " + GraphViz.TEMP_DIR + "\n");
+ System.err.println(" or in calling external command");
+ ioe.printStackTrace();
+ } catch (java.lang.InterruptedException ie) {
+ System.err.println("Error: the execution of the external program was interrupted");
+ ie.printStackTrace();
+ }
+
+ return img_stream;
+ }
+
+ /**
+ * Writes the source of the graph in a file, and returns the written file
+ * as a File object.
+ *
+ * @param str
+ * Source of the graph (in dot language).
+ * @return The file (as a File object) that contains the source of the graph.
+ */
+ private File writeDotSourceToFile(String str) throws java.io.IOException {
+ File temp;
+ try {
+ temp = File.createTempFile("graph_", ".dot.tmp", new File(GraphViz.TEMP_DIR));
+ FileWriter fout = new FileWriter(temp);
+ fout.write(str);
+ fout.close();
+ } catch (Exception e) {
+ System.err.println("Error: I/O error while writing the dot source to temp file!");
+ return null;
+ }
+ return temp;
+ }
+
+ /**
+ * Returns a string that is used to start a graph.
+ *
+ * @return A string to open a graph.
+ */
+ public String start_graph() {
+ return "digraph G {";
+ }
+
+ /**
+ * Returns a string that is used to end a graph.
+ *
+ * @return A string to close a graph.
+ */
+ public String end_graph() {
+ return "}";
+ }
+
+ /**
+ * Read a DOT graph from a text file.
+ *
+ * @param input
+ * Input text file containing the DOT graph
+ * source.
+ */
+ public void readSource(String input) {
+ StringBuilder sb = new StringBuilder();
+
+ try {
+ FileInputStream fis = new FileInputStream(input);
+ DataInputStream dis = new DataInputStream(fis);
+ BufferedReader br = new BufferedReader(new InputStreamReader(dis));
+ String line;
+ while ((line = br.readLine()) != null) {
+ sb.append(line);
+ }
+ dis.close();
+ } catch (Exception e) {
+ System.err.println("Error: " + e.getMessage());
+ }
+
+ this.graph = sb;
+ }
+
+} // end of class GraphViz
+
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestCase.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestCase.java
new file mode 100644
index 0000000..5d60c6e
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestCase.java
@@ -0,0 +1,70 @@
+package edu.uci.ics.genomix.hadoop.contrailgraphbuilding;
+
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.mapred.JobConf;
+import org.junit.Before;
+import org.junit.Test;
+
+import edu.uci.ics.genomix.hadoop.graph.GenerateGraphViz;
+import edu.uci.ics.genomix.hadoop.pmcommon.HadoopMiniClusterTest;
+
+
+@SuppressWarnings({ "deprecation", "unused" })
+public class GraphBuildingTestCase extends TestCase{
+
+ private final String RESULT_PATH;
+ private final String HADOOP_CONF_PATH;
+ private final String HDFS_INPUTPATH;
+ private FileSystem dfs;
+ private JobConf conf;
+
+ private static final int COUNT_REDUCER = 1;
+ private final int SIZE_KMER;
+
+ public GraphBuildingTestCase(String resultFileDir, String hadoopConfPath,
+ String hdfsInputPath, int kmerSize, FileSystem dfs, JobConf conf){
+ super("test");
+ this.RESULT_PATH = resultFileDir;
+ this.HADOOP_CONF_PATH = hadoopConfPath;
+ this.HDFS_INPUTPATH = hdfsInputPath;
+ this.SIZE_KMER = kmerSize;
+ this.dfs = dfs;
+ this.conf = conf;
+ }
+
+ private void waitawhile() throws InterruptedException {
+ synchronized (this) {
+ this.wait(20);
+ }
+ }
+
+ @Test
+ public void test() throws Exception {
+ setUp();
+ TestMapKmerToNode();
+ tearDown();
+ waitawhile();
+ }
+
+ public void TestMapKmerToNode() throws Exception {
+ GenomixDriver driver = new GenomixDriver();
+ driver.run(HDFS_INPUTPATH, RESULT_PATH, COUNT_REDUCER, SIZE_KMER, true, HADOOP_CONF_PATH);
+ dumpResult();
+ }
+
+
+ private void dumpResult() throws Exception {
+// Path src = new Path(RESULT_PATH);
+// Path dest = new Path(RESULT_PATH);
+// dfs.copyToLocalFile(src, dest);
+ HadoopMiniClusterTest.copyResultsToLocal(RESULT_PATH, RESULT_PATH + "/", false, conf, true, dfs);
+ GenerateGraphViz.convertGraphBuildingOutputToGraphViz(RESULT_PATH + "/bin", RESULT_PATH + "/graphviz");
+ }
+}
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestSuite.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestSuite.java
new file mode 100644
index 0000000..74de1a8
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestSuite.java
@@ -0,0 +1,148 @@
+package edu.uci.ics.genomix.hadoop.contrailgraphbuilding;
+
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+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 org.apache.hadoop.mapred.MiniMRCluster;
+
+
+@SuppressWarnings("deprecation")
+public class GraphBuildingTestSuite extends TestSuite{
+
+ private static int SIZE_KMER = 3;
+ public static final String PreFix = "data/webmap/SplitRepeat_TestSet";
+ public static final String[] TestDir = { PreFix + File.separator
+// + "LeftAdj", PreFix + File.separator
+ + "2to1"};
+// + "SimpleSplitManyTimes", PreFix + File.separator
+// + "ComplexSplitManyTimes"};
+// + "TandemRepeatWithMergeEdge", PreFix + File.separator
+// + "TandemRepeatWithUnmergeEdge"};
+// + "FR", PreFix + File.separator
+// + "RF", PreFix + File.separator
+// + "head_FR", PreFix + File.separator
+// + "head_RF", PreFix + File.separator
+// + "twohead_FR", PreFix + File.separator
+// + "twohead_RF"};
+// + "2", PreFix + File.separator
+// + "3", PreFix + File.separator
+// + "4", PreFix + File.separator
+// + "5", PreFix + File.separator
+// + "6", PreFix + File.separator
+// + "7", PreFix + File.separator
+// + "8", PreFix + File.separator
+// + "9", PreFix + File.separator
+// + "SimplePath", PreFix + File.separator
+// + "BridgePath", PreFix + File.separator
+// + "TreePath", PreFix + File.separator
+// + "CyclePath", PreFix + File.separator
+// + "ThreeDuplicate", PreFix + File.separator
+// + "SelfPath", PreFix + File.separator
+// + "PairedEndTest" };//, PreFix + File.separator};
+// + "HighSplitRepeat", PreFix + File.separator
+// + "LowSplitRepeat", PreFix + File.separator
+// + "MidSplitRepeat", PreFix + File.separator
+// + "Tips1", PreFix + File.separator
+// + "Tips2", PreFix + File.separator
+// + "Tips3", PreFix + File.separator
+// + "Tips4"};
+
+ private static JobConf conf = new JobConf();
+ private static final String ACTUAL_RESULT_DIR = "actual";
+ private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
+ private static final String HDFS_INPUTPATH = "/webmap";
+
+ private MiniDFSCluster dfsCluster;
+ private MiniMRCluster mrCluster;
+ private static FileSystem dfs;
+
+ public void setUp() throws Exception{
+ FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
+ FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
+ startHadoop();
+ }
+
+ private void startHadoop() throws IOException {
+ FileSystem lfs = FileSystem.getLocal(new Configuration());
+ lfs.delete(new Path("build"), true);
+ System.setProperty("hadoop.log.dir", "logs");
+ dfsCluster = new MiniDFSCluster(conf, 1, true, null);
+ dfs = dfsCluster.getFileSystem();
+ mrCluster = new MiniMRCluster(1, dfs.getUri().toString(), 1);
+
+ for (String testDir : TestDir) {
+ File src = new File(testDir);
+ Path dest = new Path(HDFS_INPUTPATH + File.separator + src.getName());
+ dfs.mkdirs(dest);
+ for (File f : src.listFiles()) {
+ dfs.copyFromLocalFile(new Path(f.getAbsolutePath()), dest);
+ }
+ }
+//
+// Path src = new Path(DATA_PATH);
+// Path dest = new Path(HDFS_PATH + "/");
+// dfs.mkdirs(dest);
+// dfs.copyFromLocalFile(src, dest);
+
+ DataOutputStream confOutput = new DataOutputStream(new FileOutputStream(new File(HADOOP_CONF_PATH)));
+ conf.writeXml(confOutput);
+ confOutput.flush();
+ confOutput.close();
+ }
+
+ public void tearDown() throws Exception {
+ cleanupHadoop();
+ }
+
+ private void cleanupHadoop() throws IOException {
+ mrCluster.shutdown();
+ dfsCluster.shutdown();
+ }
+
+ public static Test suite() throws Exception {
+ GraphBuildingTestSuite testSuite = new GraphBuildingTestSuite();
+ testSuite.setUp();
+// FileSystem dfs = FileSystem.get(testSuite.conf);
+ for (String testPathStr : TestDir) {
+ File testDir = new File(testPathStr);
+ String resultFileName = ACTUAL_RESULT_DIR + File.separator +
+ "bin" + File.separator + testDir.getName();
+ testSuite.addTest(new GraphBuildingTestCase(resultFileName, HADOOP_CONF_PATH,
+ HDFS_INPUTPATH + File.separator + testDir.getName(), SIZE_KMER, dfs, conf));
+ }
+ 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);
+ }
+ }
+
+}
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/SingleGraphBuildingTest.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/SingleGraphBuildingTest.java
new file mode 100644
index 0000000..5ee5593
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/SingleGraphBuildingTest.java
@@ -0,0 +1,81 @@
+package edu.uci.ics.genomix.hadoop.contrailgraphbuilding;
+
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+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 org.apache.hadoop.mapred.MiniMRCluster;
+import org.junit.Test;
+
+import edu.uci.ics.genomix.hadoop.pmcommon.HadoopMiniClusterTest;
+
+@SuppressWarnings("deprecation")
+public class SingleGraphBuildingTest {
+
+ private JobConf conf = new JobConf();
+ private static final String ACTUAL_RESULT_DIR = "actual";
+ private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
+ private static final String DATA_PATH = "data/webmap/RemoveBridge.txt";
+ private static final String HDFS_PATH = "/webmap";
+ private static final String RESULT_PATH = "/result";
+
+ private static final int COUNT_REDUCER = 1;
+ private static final int SIZE_KMER = 3;
+
+ private MiniDFSCluster dfsCluster;
+ private MiniMRCluster mrCluster;
+ private FileSystem dfs;
+
+ @Test
+ public void test() throws Exception {
+ FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
+ FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
+ startHadoop();
+ TestMapKmerToNode();
+ cleanupHadoop();
+ }
+
+ public void TestMapKmerToNode() throws Exception {
+ GenomixDriver driver = new GenomixDriver();
+ driver.run(HDFS_PATH, RESULT_PATH, COUNT_REDUCER, SIZE_KMER, true, HADOOP_CONF_PATH);
+ dumpResult();
+ }
+
+ private void startHadoop() throws IOException {
+ FileSystem lfs = FileSystem.getLocal(new Configuration());
+ lfs.delete(new Path("build"), true);
+ System.setProperty("hadoop.log.dir", "logs");
+ dfsCluster = new MiniDFSCluster(conf, 1, true, null);
+ dfs = dfsCluster.getFileSystem();
+ mrCluster = new MiniMRCluster(1, dfs.getUri().toString(), 1);
+
+ Path src = new Path(DATA_PATH);
+ Path dest = new Path(HDFS_PATH + "/");
+ dfs.mkdirs(dest);
+ dfs.copyFromLocalFile(src, dest);
+
+ DataOutputStream confOutput = new DataOutputStream(new FileOutputStream(new File(HADOOP_CONF_PATH)));
+ conf.writeXml(confOutput);
+ confOutput.flush();
+ confOutput.close();
+ }
+
+ private void cleanupHadoop() throws IOException {
+ mrCluster.shutdown();
+ dfsCluster.shutdown();
+ }
+
+ private void dumpResult() throws IOException {
+ Path src = new Path(RESULT_PATH);
+ Path dest = new Path(ACTUAL_RESULT_DIR);
+ dfs.copyToLocalFile(src, dest);
+ HadoopMiniClusterTest.copyResultsToLocal(RESULT_PATH, "actual/test.txt", false, conf, true, dfs);
+ }
+}
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/pmcommon/HadoopMiniClusterTest.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/pmcommon/HadoopMiniClusterTest.java
new file mode 100644
index 0000000..df4f889
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/pmcommon/HadoopMiniClusterTest.java
@@ -0,0 +1,242 @@
+package edu.uci.ics.genomix.hadoop.pmcommon;
+
+import java.io.BufferedWriter;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.FileUtil;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hdfs.MiniDFSCluster;
+import org.apache.hadoop.io.SequenceFile;
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.MiniMRCluster;
+import org.apache.hadoop.util.ReflectionUtils;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+//import edu.uci.ics.genomix.hadoop.velvetgraphbuilding.GraphBuildingDriver;
+//import edu.uci.ics.genomix.hyracks.newgraph.test.TestUtils;
+
+/*
+ * A base class providing most of the boilerplate for Hadoop-based tests
+ */
+@SuppressWarnings("deprecation")
+public class HadoopMiniClusterTest {
+ protected int KMER_LENGTH = 5;
+ protected int READ_LENGTH = 8;
+
+ // subclass should modify this to include the HDFS directories that should be cleaned up
+ protected ArrayList<String> HDFS_PATHS = new ArrayList<String>();
+
+ protected static final String EXPECTED_ROOT = "src/test/resources/expected/";
+ protected static final String ACTUAL_ROOT = "src/test/resources/actual/";
+ protected static final String INPUT_ROOT = "src/test/resources/input/";
+
+ protected static String HADOOP_CONF_ROOT = "src/test/resources/hadoop/conf/";
+ protected static String HADOOP_CONF = HADOOP_CONF_ROOT + "conf.xml";
+
+ protected static MiniDFSCluster dfsCluster;
+ protected static MiniMRCluster mrCluster;
+ protected static FileSystem dfs;
+ protected static JobConf conf = new JobConf();
+ protected static int numberOfNC = 1;
+ protected static int numPartitionPerMachine = 1;
+
+ @BeforeClass
+ public static void setUpMiniCluster() throws Exception {
+ cleanupStores();
+ startHDFS();
+ FileUtils.forceMkdir(new File(ACTUAL_ROOT));
+ FileUtils.cleanDirectory(new File(ACTUAL_ROOT));
+ }
+
+ protected static void copyResultsToLocal(String hdfsSrcDir, String localDestFile, boolean resultsAreText,
+ Configuration conf) throws IOException {
+ copyResultsToLocal(hdfsSrcDir, localDestFile, resultsAreText, conf, true);
+ }
+
+ public static void copyResultsToLocal(String hdfsSrcDir, String localDestFile, boolean resultsAreText,
+ Configuration conf, boolean ignoreZeroOutputs) throws IOException {
+ copyResultsToLocal(hdfsSrcDir, localDestFile, resultsAreText,
+ conf, ignoreZeroOutputs, dfs);
+ }
+
+ /*
+ * Merge and copy a DFS directory to a local destination, converting to text if necessary.
+ * Also locally store the binary-formatted result if available.
+ */
+ public static void copyResultsToLocal(String hdfsSrcDir, String localDestFile, boolean resultsAreText,
+ Configuration conf, boolean ignoreZeroOutputs, FileSystem dfs) throws IOException {
+ if (resultsAreText) {
+ // for text files, just concatenate them together
+ FileUtil.copyMerge(FileSystem.get(conf), new Path(hdfsSrcDir), FileSystem.getLocal(new Configuration()),
+ new Path(localDestFile), false, conf, null);
+ } else {
+ // file is binary
+ // save the entire binary output dir
+ FileUtil.copy(FileSystem.get(conf), new Path(hdfsSrcDir), FileSystem.getLocal(new Configuration()),
+ new Path(localDestFile + "bin"), false, conf); //bindir
+
+ // chomp through output files
+ FileStatus[] files = ArrayUtils.addAll(dfs.globStatus(new Path(hdfsSrcDir + "*")), dfs.globStatus(new Path(hdfsSrcDir + "*/*")));
+ FileStatus validFile = null;
+ for (FileStatus f : files) {
+ if (f.getLen() != 0) {
+ validFile = f;
+ break;
+ }
+ }
+ if (validFile == null) {
+ if (ignoreZeroOutputs) {
+ // just make a dummy output dir
+ FileSystem lfs = FileSystem.getLocal(new Configuration());
+ lfs.mkdirs(new Path(localDestFile).getParent());
+ return;
+ }
+ else {
+ throw new IOException("No non-zero outputs in source directory " + hdfsSrcDir);
+ }
+ }
+
+ // also load the Nodes and write them out as text locally.
+ FileSystem lfs = FileSystem.getLocal(new Configuration());
+ lfs.mkdirs(new Path(localDestFile).getParent());
+ File filePathTo = new File(localDestFile);
+ if (filePathTo.exists() && filePathTo.isDirectory()) {
+ filePathTo = new File(localDestFile + "/data");
+ }
+ BufferedWriter bw = new BufferedWriter(new FileWriter(filePathTo));
+ SequenceFile.Reader reader = new SequenceFile.Reader(dfs, validFile.getPath(), conf);
+ SequenceFile.Writer writer = new SequenceFile.Writer(lfs, new JobConf(), new Path(localDestFile
+ + ".binmerge"), reader.getKeyClass(), reader.getValueClass());
+
+ Writable key = (Writable) ReflectionUtils.newInstance(reader.getKeyClass(), conf);
+ Writable value = (Writable) ReflectionUtils.newInstance(reader.getValueClass(), conf);
+
+ for (FileStatus f : files) {
+ if (f.getLen() == 0) {
+ continue;
+ }
+ reader = new SequenceFile.Reader(dfs, f.getPath(), conf);
+ while (reader.next(key, value)) {
+ if (key == null || value == null) {
+ break;
+ }
+ bw.write(key.toString() + "\t" + value.toString());
+ System.out.println(key.toString() + "\t" + value.toString());
+ bw.newLine();
+ writer.append(key, value);
+
+ }
+ reader.close();
+ }
+ writer.close();
+ bw.close();
+ }
+
+ }
+
+ protected static boolean checkResults(String expectedPath, String actualPath, int[] poslistField) throws Exception {
+ if (poslistField != null) {
+// TestUtils.compareWithUnSortedPosition(new File(expectedPath), dumped, poslistField);
+ } else {
+// TestUtils.compareWithSortedResult(new File(expectedPath), dumped);
+ }
+ return true;
+ }
+
+ protected static void cleanupStores() throws IOException {
+ FileUtils.forceMkdir(new File("teststore"));
+ FileUtils.forceMkdir(new File("build"));
+ FileUtils.cleanDirectory(new File("teststore"));
+ FileUtils.cleanDirectory(new File("build"));
+ }
+
+ protected static void startHDFS() throws IOException {
+// conf.addResource(new Path(HADOOP_CONF_ROOT + "core-site.xml"));
+ // conf.addResource(new Path(HADOOP_CONF_ROOT + "mapred-site.xml"));
+// conf.addResource(new Path(HADOOP_CONF_ROOT + "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);
+ dfs = dfsCluster.getFileSystem();
+ mrCluster = new MiniMRCluster(4, dfs.getUri().toString(), 2);
+ System.out.println(dfs.getUri().toString());
+
+ DataOutputStream confOutput = new DataOutputStream(
+ new FileOutputStream(new File(HADOOP_CONF)));
+ conf.writeXml(confOutput);
+ confOutput.close();
+ }
+
+ protected static void copyLocalToDFS(String localSrc, String hdfsDest) throws IOException {
+ Path dest = new Path(hdfsDest);
+ dfs.mkdirs(dest);
+ System.out.println("copying from " + localSrc + " to " + dest);
+ for (File f : new File(localSrc).listFiles()) {
+ dfs.copyFromLocalFile(new Path(f.getAbsolutePath()), dest);
+ }
+ }
+
+ /*
+ * Remove the local "actual" folder and any hdfs folders in use by this test
+ */
+ public void cleanUpOutput() throws IOException {
+ // local cleanup
+ FileSystem lfs = FileSystem.getLocal(new Configuration());
+ if (lfs.exists(new Path(ACTUAL_ROOT))) {
+ lfs.delete(new Path(ACTUAL_ROOT), true);
+ }
+ // dfs cleanup
+ for (String path : HDFS_PATHS) {
+ if (dfs.exists(new Path(path))) {
+ dfs.delete(new Path(path), true);
+ }
+ }
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ cleanupHDFS();
+ }
+
+ protected static void cleanupHDFS() throws Exception {
+ dfsCluster.shutdown();
+ mrCluster.shutdown();
+ }
+
+// public void buildGraph() throws IOException {
+// JobConf buildConf = new JobConf(conf); // use a separate conf so we don't interfere with other jobs
+// FileInputFormat.setInputPaths(buildConf, SEQUENCE);
+// FileOutputFormat.setOutputPath(buildConf, new Path(INPUT_GRAPH));
+//
+// GraphBuildingDriver tldriver = new GraphBuildingDriver();
+// tldriver.run(SEQUENCE, INPUT_GRAPH, 2, kmerByteSize, READ_LENGTH, false, true, HADOOP_CONF_ROOT + "conf.xml");
+//
+// boolean resultsAreText = true;
+// copyResultsToLocal(INPUT_GRAPH, ACTUAL_ROOT + INPUT_GRAPH, resultsAreText, buildConf);
+// }
+//
+// private void prepareGraph() throws IOException {
+// if (regenerateGraph) {
+// copyLocalToDFS(LOCAL_SEQUENCE_FILE, SEQUENCE);
+// buildGraph();
+// copyLocalToDFS(ACTUAL_ROOT + INPUT_GRAPH + readsFile + ".binmerge", INPUT_GRAPH);
+// } else {
+// copyLocalToDFS(EXPECTED_ROOT + INPUT_GRAPH + readsFile + ".binmerge", INPUT_GRAPH);
+// }
+// }
+
+}
diff --git a/genomix/genomix-hadoop/src/test/python/convert_graphviz.py b/genomix/genomix-hadoop/src/test/python/convert_graphviz.py
new file mode 100755
index 0000000..39ca660
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/python/convert_graphviz.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python
+"""
+Convert a graph to graphviz format and run `dot` on it.
+
+Kmer sequences are included
+"""
+
+__author__ = "Jacob Biesinger"
+__copyright__ = "Copyright 2009-2013, The Regents of the University of California"
+__license__ = "Apache"
+
+
+import sys
+import os
+import re
+import string
+import argparse
+
+import pydot
+
+
+element_re = re.compile(r"\d+,\d+|\w+")
+#edge_colors = dict(FF='black', FR='red', RF='blue', RR='gray')
+edge_colors = dict(FF='#DD1E2F', FR='#EBB035', RF='#06A2CB', RR='#218559')
+
+
+def reverse_complement(kmer, _table=string.maketrans('ACGT', 'TGCA')):
+ return string.translate(kmer, _table)[::-1]
+
+
+def add_legend(graph):
+ legend = pydot.Subgraph('cluster_legend', splines='line', rankdir='LR', label='legend', rank='min')
+ for i, (edgetype, edgecolor) in enumerate(sorted(edge_colors.items())):
+ legend.add_node(pydot.Node('legend_0_' + str(i), label='', shape='point'))
+ legend.add_node(pydot.Node('legend_1_' + str(i), label='', shape='point'))
+ legend.add_edge(pydot.Edge('legend_0_' + str(i), 'legend_1_' + str(i), label=edgetype, color=edgecolor))
+ graph.add_subgraph(legend)
+ return graph
+
+
+def graph_from_file(filename, legend=True, kmers=True, flag=True):
+ graph_name = os.path.split(filename)[1].replace('.', '_')
+ graph = pydot.Dot(graph_name, graph_type='digraph', rankdir='LR', splines='ortho', weight='2')
+ if legend:
+ add_legend(graph)
+
+ # annoyingly, order matters. add nodes before any edges or else properties aren't set right
+ nodes = {}
+ edges = []
+ for line in open(filename):
+ nodeid, ff, fr, rf, rr, kmer, flag = map(element_re.findall, line.strip().split('\t'))
+ nodeid, kmer, flag = nodeid[0], kmer[0], flag[0]
+ readid = nodeid.split(',')[0]
+ flag = '--%s' % flag if flag else ''
+ FF_kmer = '<TR><TD BGCOLOR="%s">%s</TD></TR>' % (edge_colors['FF'], kmer) if kmers else ''
+ RR_kmer = '<TR><TD BGCOLOR="%s">%s</TD></TR>' % (edge_colors['RR'], reverse_complement(kmer)) if kmers else ''
+ node_label = r'''<<FONT POINT-SIZE="10"><TABLE ALIGN="CENTER" BORDER="0" CELLBORDER="0" CELLSPACING="0">
+ <TR><TD>{nodeid}{flag}</TD></TR>
+ {FF_kmer}
+ {RR_kmer}
+ </TABLE></FONT>>'''.format(**locals())
+ node = pydot.Node(nodeid, rank=readid, group=readid, label=node_label)
+ nodes.setdefault(readid, []).append(node)
+ for edgename, edgelist in [('FF', ff), ('FR', fr), ('RF', rf), ('RR', rr)]:
+ for e in edgelist:
+ edges.append(pydot.Edge(nodeid, e, color=edge_colors[edgename]))
+
+ for readid, subnodes in nodes.items():
+ subg = pydot.Subgraph('cluster_' + readid, fillcolor='lightgray')
+ for node in subnodes:
+ subg.add_node(node)
+ graph.add_subgraph(subg)
+
+ for e in edges:
+ graph.add_edge(e)
+
+ return graph
+
+def recursive_plot(topdir, suffix='.txt', **kwargs):
+ "Recursively plot any files matching `suffix`"
+ out_type = kwargs.get('out_type', 'svg')
+ for root, dirnames, filenames in os.walk(topdir):
+ for filename in filenames:
+ f = os.path.join(root, filename)
+ if not os.path.isfile(f) or not f.endswith(suffix):
+ continue
+ try:
+ graph = graph_from_file(f, **kwargs)
+ except Exception:
+ pass
+ else:
+ print 'plotting', f +'.' + out_type
+ graph.write(f + '.' + out_type, format=out_type)
+
+
+def get_parser():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--no-legend', action='store_true')
+ parser.add_argument('--no-kmers', action='store_true')
+ parser.add_argument('--no-flag', action='store_true')
+
+ parser.add_argument('txt_graphs', nargs='*')
+ parser.add_argument('--directory', '-d', help='Recurse here and plot all '
+ 'graphs that are found.', action='append', default=[])
+ parser.add_argument('--out-type', type=str, default='svg')
+ return parser
+
+
+def main(args):
+ parser = get_parser()
+ args = parser.parse_args(args)
+ kwargs = dict(legend=not args.no_legend, kmers=not args.no_kmers,
+ flag=not args.no_flag)
+ for filename in args.txt_graphs:
+ graph = graph_from_file(filename, **kwargs)
+ print 'plotting', filename + args.out_type
+ graph.write(filename + args.out_type, format=args.out_type)
+
+ for d in args.directory:
+ recursive_plot(d, **kwargs)
+
+if __name__ == '__main__':
+ main(sys.argv[1:])
diff --git a/genomix/genomix-hadoop/src/test/python/generate_graph.py b/genomix/genomix-hadoop/src/test/python/generate_graph.py
new file mode 100644
index 0000000..2053bf9
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/python/generate_graph.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+Generate a random smattering of reads
+"""
+
+import sys
+import argparse
+import random
+import itertools
+import string
+
+
+def get_parser():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--walk', '-w', action='store_true')
+ parser.add_argument('--coverage', '-c', type=float, required=True)
+ parser.add_argument('--genome-length', '-g', type=int,
+ required=True)
+ parser.add_argument('--read-length', '-l', type=int, required=True)
+ parser.add_argument('--no-rc', action='store_true')
+ parser.add_argument('--error-rate', type=float, default=.01)
+ parser.add_argument('--outreads', '-r', type=argparse.FileType('w'),
+ default='reads.txt')
+ parser.add_argument('--outgenome', '-o', type=argparse.FileType('w'),
+ default='genome.txt')
+ return parser
+
+
+def reverse_complement(kmer, _table=string.maketrans('ACGT', 'TGCA')):
+ return string.translate(kmer, _table)[::-1]
+
+
+def make_genome(length):
+ return ''.join(random.choice('ACGT') for i in xrange(length))
+
+
+def make_reads(genome, read_length, coverage, walk=False, no_rc=False,
+ error_rate=0.):
+ num_reads = int(coverage * len(genome)) / read_length
+ if walk:
+ step_size = max(1, int(len(genome) / num_reads))
+ next_starts = itertools.cycle(xrange(0, len(genome) - read_length + 1,
+ step_size))
+ else:
+ next_starts = (random.randrange(len(genome) - read_length) for i in itertools.cycle([None]))
+ num_errors = 0
+ for i in range(1, num_reads + 1):
+ start = next_starts.next()
+ seq = genome[start:start + read_length]
+ if not no_rc and random.choice([True, False]):
+ seq = reverse_complement(seq)
+ final_seq = []
+ for l in seq:
+ if random.random() < error_rate:
+ num_errors += 1
+ final_seq.append(random.choice(list(set('ATGC') - set(l))))
+ else:
+ final_seq.append(l)
+
+ yield '%s\t%s\n' % (i, ''.join(final_seq))
+ print >> sys.stderr, 'introduced', num_errors, 'errors'
+
+
+def main(args):
+ parser = get_parser()
+ args = parser.parse_args(args)
+ genome = make_genome(args.genome_length)
+ args.outgenome.write(genome)
+ args.outgenome.write('\n')
+ args.outreads.writelines(make_reads(genome, args.read_length,
+ args.coverage, args.walk, args.no_rc,
+ args.error_rate))
+
+
+if __name__ == '__main__':
+ main(sys.argv[1:])
diff --git a/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread.txt b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread.txt
new file mode 100644
index 0000000..be930c4
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread.txt
@@ -0,0 +1 @@
+((1,1) [] [] [] [] AATAGAAG) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread.txt.svg b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread.txt.svg
new file mode 100644
index 0000000..31ebb54
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread.txt.svg
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: singleread_txt Pages: 1 -->
+<svg width="206pt" height="321pt"
+ viewBox="0.00 0.00 206.00 321.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 317)">
+<title>singleread_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-317 203,-317 203,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="59,-8 59,-209 190,-209 190,-8 59,-8"/>
+<text text-anchor="middle" x="124.5" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 130,-305 130,-217 8,-217"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="69" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="180" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M70.9266,-157C82.3997,-157 142.097,-157 167.994,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="168.02,-160.5 178.02,-157 168.02,-153.5 168.02,-160.5"/>
+<text text-anchor="middle" x="150" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="69" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="180" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M70.9266,-116C82.3997,-116 142.097,-116 167.994,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="168.02,-119.5 178.02,-116 168.02,-112.5 168.02,-119.5"/>
+<text text-anchor="middle" x="150" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="69" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="180" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M70.9266,-75C82.3997,-75 142.097,-75 167.994,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="168.02,-78.5001 178.02,-75 168.02,-71.5001 168.02,-78.5001"/>
+<text text-anchor="middle" x="150" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="69" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="180" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M70.9266,-34C82.3997,-34 142.097,-34 167.994,-34"/>
+<polygon fill="#218559" stroke="#218559" points="168.02,-37.5001 178.02,-34 168.02,-30.5001 168.02,-37.5001"/>
+<text text-anchor="middle" x="150" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="69" cy="-261" rx="51.8276" ry="36.0624"/>
+<text text-anchor="start" x="49" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="40,-253 40,-267 98,-267 98,-253 40,-253"/>
+<text text-anchor="start" x="42.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AATAGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="40,-239 40,-253 98,-253 98,-239 40,-239"/>
+<text text-anchor="start" x="46.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CTTCTATT</text>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/.part-0.crc
new file mode 100644
index 0000000..6b5048e
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/.part-1.crc
new file mode 100644
index 0000000..6de18c1
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/part-0 b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/part-0
new file mode 100755
index 0000000..335dd8d
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/part-1 b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/part-1
new file mode 100755
index 0000000..3a7991c
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/expected/pathmerge/singleread/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/hadoop/conf/core-site.xml b/genomix/genomix-hadoop/src/test/resources/hadoop/conf/core-site.xml
new file mode 100644
index 0000000..3e5bacb
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/hadoop/conf/core-site.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>fs.default.name</name>
+ <value>hdfs://127.0.0.1:31888</value>
+ </property>
+ <property>
+ <name>hadoop.tmp.dir</name>
+ <value>/tmp/hadoop</value>
+ </property>
+
+
+</configuration>
diff --git a/genomix/genomix-hadoop/src/test/resources/hadoop/conf/hdfs-site.xml b/genomix/genomix-hadoop/src/test/resources/hadoop/conf/hdfs-site.xml
new file mode 100644
index 0000000..b1b1902
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/hadoop/conf/hdfs-site.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>dfs.replication</name>
+ <value>1</value>
+ </property>
+
+ <property>
+ <name>dfs.block.size</name>
+ <value>65536</value>
+ </property>
+
+</configuration>
diff --git a/genomix/genomix-hadoop/src/test/resources/hadoop/conf/log4j.properties b/genomix/genomix-hadoop/src/test/resources/hadoop/conf/log4j.properties
new file mode 100755
index 0000000..d5e6004
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/hadoop/conf/log4j.properties
@@ -0,0 +1,94 @@
+# Define some default values that can be overridden by system properties
+hadoop.root.logger=FATAL,console
+hadoop.log.dir=.
+hadoop.log.file=hadoop.log
+
+# Define the root logger to the system property "hadoop.root.logger".
+log4j.rootLogger=${hadoop.root.logger}, EventCounter
+
+# Logging Threshold
+log4j.threshhold=FATAL
+
+#
+# Daily Rolling File Appender
+#
+
+log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Rollver at midnight
+log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
+
+# 30-day backup
+#log4j.appender.DRFA.MaxBackupIndex=30
+log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
+
+# Pattern format: Date LogLevel LoggerName LogMessage
+log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+# Debugging Pattern format
+#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+
+#
+# console
+# Add "console" to rootlogger above if you want to use this
+#
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.err
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
+
+#
+# TaskLog Appender
+#
+
+#Default values
+hadoop.tasklog.taskid=null
+hadoop.tasklog.noKeepSplits=4
+hadoop.tasklog.totalLogFileSize=100
+hadoop.tasklog.purgeLogSplits=true
+hadoop.tasklog.logsRetainHours=12
+
+log4j.appender.TLA=org.apache.hadoop.mapred.TaskLogAppender
+log4j.appender.TLA.taskId=${hadoop.tasklog.taskid}
+log4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}
+
+log4j.appender.TLA.layout=org.apache.log4j.PatternLayout
+log4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+
+#
+# Rolling File Appender
+#
+
+#log4j.appender.RFA=org.apache.log4j.RollingFileAppender
+#log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Logfile size and and 30-day backups
+#log4j.appender.RFA.MaxFileSize=1MB
+#log4j.appender.RFA.MaxBackupIndex=30
+
+#log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+#
+# FSNamesystem Audit logging
+# All audit events are logged at INFO level
+#
+log4j.logger.org.apache.hadoop.fs.FSNamesystem.audit=WARN
+
+# Custom Logging levels
+
+#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG
+#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG
+#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG
+
+# Jets3t library
+log4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR
+
+#
+# Event Counter Appender
+# Sends counts of logging messages at different severity levels to Hadoop Metrics.
+#
+log4j.appender.EventCounter=org.apache.hadoop.metrics.jvm.EventCounter
diff --git a/genomix/genomix-hadoop/src/test/resources/hadoop/conf/mapred-site.xml b/genomix/genomix-hadoop/src/test/resources/hadoop/conf/mapred-site.xml
new file mode 100644
index 0000000..525e7d5
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/hadoop/conf/mapred-site.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>mapred.job.tracker</name>
+ <value>localhost:29007</value>
+ </property>
+ <property>
+ <name>mapred.tasktracker.map.tasks.maximum</name>
+ <value>20</value>
+ </property>
+ <property>
+ <name>mapred.tasktracker.reduce.tasks.maximum</name>
+ <value>20</value>
+ </property>
+ <property>
+ <name>mapred.max.split.size</name>
+ <value>2048</value>
+ </property>
+
+</configuration>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles.txt
new file mode 100644
index 0000000..2896107
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles.txt
@@ -0,0 +1,16 @@
+((2,1) [(3,1),(4,1),(2,2)] [] [] [(1,1)] CGTCC) (null)
+((2,2) [(2,3)] [] [] [(2,1)] GTCCT) (null)
+((2,3) [(2,4)] [] [] [(2,2)] TCCTT) (null)
+((2,4) [(4,4),(3,4)] [] [] [(1,4),(2,3)] CCTTA) (null)
+((4,1) [(4,2)] [] [] [(1,2),(2,1)] GTCCT) (null)
+((4,2) [(4,3)] [] [] [(4,1)] TCCTT) (null)
+((4,3) [(4,4)] [] [] [(1,4),(4,2)] CCTTA) (null)
+((4,4) [] [] [] [(2,4),(4,3)] CTTAG) (null)
+((1,1) [(2,1),(1,2)] [] [] [] ACGTC) (null)
+((1,2) [(3,1),(4,1),(1,3)] [] [] [(1,1)] CGTCC) (null)
+((1,3) [(1,4)] [] [] [(1,2)] GTCCT) (null)
+((1,4) [(3,3),(4,3),(2,4)] [] [] [(1,3)] TCCTT) (null)
+((3,1) [(3,2)] [] [] [(1,2),(2,1)] GTCCT) (null)
+((3,2) [(3,3)] [] [] [(3,1)] TCCTT) (null)
+((3,3) [(3,4)] [] [] [(1,4),(3,2)] CCTTA) (null)
+((3,4) [] [] [] [(2,4),(3,3)] CTTAG) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles.txt.svg
new file mode 100644
index 0000000..fef64c2
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles.txt.svg
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: five_ff_bubbles_txt Pages: 1 -->
+<svg width="764pt" height="520pt"
+ viewBox="0.00 0.00 764.00 520.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 516)">
+<title>five_ff_bubbles_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-516 761,-516 761,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 500,-305 500,-217 8,-217"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="274,-416 274,-504 748,-504 748,-416 274,-416"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="150,-313 150,-401 624,-401 624,-313 150,-313"/>
+</g>
+<g id="graph6" class="cluster"><title>cluster_4</title>
+<polygon fill="none" stroke="black" points="274,-121 274,-209 748,-209 748,-121 274,-121"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="43.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ACGTC</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="42.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">GACGT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CGTCC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="183.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">GGACG</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge61" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 2,1 -->
+<g id="node25" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-349 179,-363 224,-363 224,-349 179,-349"/>
+<text text-anchor="start" x="185" y="-353.667" font-family="Times Roman,serif" font-size="10.00">CGTCC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-335 179,-349 224,-349 224,-335 179,-335"/>
+<text text-anchor="start" x="183.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">GGACG</text>
+</g>
+<!-- 1,1->2,1 -->
+<g id="edge59" class="edge"><title>1,1->2,1</title>
+<path fill="none" stroke="#dd1e2f" d="M92.652,-283.751C112.403,-297.103 137.544,-314.1 158.635,-328.359"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="156.853,-331.379 167.097,-334.08 160.773,-325.58 156.853,-331.379"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge69" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="310" y="-257.667" font-family="Times Roman,serif" font-size="10.00">GTCCT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="308" y="-243.667" font-family="Times Roman,serif" font-size="10.00">AGGAC</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge67" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 3,1 -->
+<g id="node20" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-460" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-471.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-452 303,-466 348,-466 348,-452 303,-452"/>
+<text text-anchor="start" x="310" y="-456.667" font-family="Times Roman,serif" font-size="10.00">GTCCT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-438 303,-452 348,-452 348,-438 303,-438"/>
+<text text-anchor="start" x="308" y="-442.667" font-family="Times Roman,serif" font-size="10.00">AGGAC</text>
+</g>
+<!-- 1,2->3,1 -->
+<g id="edge63" class="edge"><title>1,2->3,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-290.029C236.061,-300.138 244,-309 244,-309 244,-309 274,-405 274,-405 274,-405 282.027,-413.657 291.712,-424.101"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="289.238,-426.58 298.604,-431.533 294.371,-421.821 289.238,-426.58"/>
+</g>
+<!-- 4,1 -->
+<g id="node30" class="node"><title>4,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">4,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-157 303,-171 348,-171 348,-157 303,-157"/>
+<text text-anchor="start" x="310" y="-161.667" font-family="Times Roman,serif" font-size="10.00">GTCCT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-143 303,-157 348,-157 348,-143 303,-143"/>
+<text text-anchor="start" x="308" y="-147.667" font-family="Times Roman,serif" font-size="10.00">AGGAC</text>
+</g>
+<!-- 1,2->4,1 -->
+<g id="edge65" class="edge"><title>1,2->4,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-231.971C236.061,-221.862 244,-213 244,-213 244,-213 262,-184 262,-184 262,-184 267.269,-182.411 274.758,-180.152"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="275.825,-183.486 284.389,-177.248 273.804,-176.784 275.825,-183.486"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge73" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 1,4 -->
+<g id="node18" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-253 427,-267 472,-267 472,-253 427,-253"/>
+<text text-anchor="start" x="435" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TCCTT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-239 427,-253 472,-253 472,-239 427,-239"/>
+<text text-anchor="start" x="431.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">AAGGA</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge71" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-254.562C376.601,-254.258 386.531,-254.176 396.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-257.822 406.443,-254.554 396.527,-250.823 396.364,-257.822"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge81" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M406.443,-267.446C397.158,-267.745 387.225,-267.824 377.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-264.175 367.327,-267.438 377.242,-271.173 377.407,-264.175"/>
+</g>
+<!-- 3,3 -->
+<g id="node22" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-460" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-471.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-452 551,-466 596,-466 596,-452 551,-452"/>
+<text text-anchor="start" x="558.5" y="-456.667" font-family="Times Roman,serif" font-size="10.00">CCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-438 551,-452 596,-452 596,-438 551,-438"/>
+<text text-anchor="start" x="556.5" y="-442.667" font-family="Times Roman,serif" font-size="10.00">TAAGG</text>
+</g>
+<!-- 1,4->3,3 -->
+<g id="edge75" class="edge"><title>1,4->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M477.779,-288.086C489.347,-298.974 500,-309 500,-309 500,-309 530,-405 530,-405 530,-405 535.671,-412.254 542.894,-421.492"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="540.32,-423.882 549.236,-429.604 545.834,-419.571 540.32,-423.882"/>
+</g>
+<!-- 2,4 -->
+<g id="node28" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-349 551,-363 596,-363 596,-349 551,-349"/>
+<text text-anchor="start" x="558.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">CCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-335 551,-349 596,-349 596,-335 551,-335"/>
+<text text-anchor="start" x="556.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">TAAGG</text>
+</g>
+<!-- 1,4->2,4 -->
+<g id="edge79" class="edge"><title>1,4->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M479.857,-286.293C494.987,-298.695 510,-311 510,-311 510,-311 520.107,-318.38 532.225,-327.228"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="530.253,-330.121 540.393,-333.192 534.38,-324.468 530.253,-330.121"/>
+</g>
+<!-- 4,3 -->
+<g id="node32" class="node"><title>4,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">4,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-157 551,-171 596,-171 596,-157 551,-157"/>
+<text text-anchor="start" x="558.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">CCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-143 551,-157 596,-157 596,-143 551,-143"/>
+<text text-anchor="start" x="556.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">TAAGG</text>
+</g>
+<!-- 1,4->4,3 -->
+<g id="edge77" class="edge"><title>1,4->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M479.143,-235.305C494.511,-222.204 510,-209 510,-209 510,-209 519.601,-202.295 531.307,-194.119"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="533.461,-196.884 539.655,-188.288 529.453,-191.145 533.461,-196.884"/>
+</g>
+<!-- 3,1->1,2 -->
+<g id="edge85" class="edge"><title>3,1->1,2</title>
+<path fill="none" stroke="#218559" d="M298.604,-431.533C286.159,-418.113 274,-405 274,-405 274,-405 262,-384 262,-384 262,-384 244,-309 244,-309 244,-309 239.718,-304.221 233.857,-297.678"/>
+<polygon fill="#218559" stroke="#218559" points="236.285,-295.142 227.005,-290.029 231.071,-299.813 236.285,-295.142"/>
+</g>
+<!-- 3,2 -->
+<g id="node21" class="node"><title>3,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-460" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-471.167" font-family="Times Roman,serif" font-size="10.00">3,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-452 427,-466 472,-466 472,-452 427,-452"/>
+<text text-anchor="start" x="435" y="-456.667" font-family="Times Roman,serif" font-size="10.00">TCCTT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-438 427,-452 472,-452 472,-438 427,-438"/>
+<text text-anchor="start" x="431.5" y="-442.667" font-family="Times Roman,serif" font-size="10.00">AAGGA</text>
+</g>
+<!-- 3,1->3,2 -->
+<g id="edge83" class="edge"><title>3,1->3,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-453.562C376.601,-453.258 386.531,-453.176 396.159,-453.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-456.822 406.443,-453.554 396.527,-449.823 396.364,-456.822"/>
+</g>
+<!-- 3,1->2,1 -->
+<g id="edge87" class="edge"><title>3,1->2,1</title>
+<path fill="none" stroke="#218559" d="M283.329,-450.078C271.613,-447.289 262,-445 262,-445 262,-445 244.717,-420.067 228.55,-396.744"/>
+<polygon fill="#218559" stroke="#218559" points="231.252,-394.498 222.678,-388.273 225.499,-398.486 231.252,-394.498"/>
+</g>
+<!-- 3,2->3,1 -->
+<g id="edge91" class="edge"><title>3,2->3,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-466.446C397.158,-466.745 387.225,-466.824 377.602,-466.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-463.175 367.327,-466.438 377.242,-470.173 377.407,-463.175"/>
+</g>
+<!-- 3,2->3,3 -->
+<g id="edge89" class="edge"><title>3,2->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-453.562C500.601,-453.258 510.531,-453.176 520.159,-453.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-456.822 530.443,-453.554 520.527,-449.823 520.364,-456.822"/>
+</g>
+<!-- 3,3->1,4 -->
+<g id="edge95" class="edge"><title>3,3->1,4</title>
+<path fill="none" stroke="#218559" d="M549.236,-429.604C539.291,-416.884 530,-405 530,-405 530,-405 510,-359 510,-359 510,-359 500,-309 500,-309 500,-309 493.498,-302.881 485.137,-295.012"/>
+<polygon fill="#218559" stroke="#218559" points="487.46,-292.391 477.779,-288.086 482.662,-297.489 487.46,-292.391"/>
+</g>
+<!-- 3,3->3,2 -->
+<g id="edge97" class="edge"><title>3,3->3,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-466.446C521.158,-466.745 511.225,-466.824 501.602,-466.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-463.175 491.327,-466.438 501.242,-470.173 501.407,-463.175"/>
+</g>
+<!-- 3,4 -->
+<g id="node23" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-460" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-471.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-452 675,-466 720,-466 720,-452 675,-452"/>
+<text text-anchor="start" x="682" y="-456.667" font-family="Times Roman,serif" font-size="10.00">CTTAG</text>
+<polygon fill="#218559" stroke="#218559" points="675,-438 675,-452 720,-452 720,-438 675,-438"/>
+<text text-anchor="start" x="681" y="-442.667" font-family="Times Roman,serif" font-size="10.00">CTAAG</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge93" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-453.562C624.601,-453.258 634.531,-453.176 644.159,-453.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-456.822 654.443,-453.554 644.527,-449.823 644.364,-456.822"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge101" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M654.443,-466.446C645.158,-466.745 635.225,-466.824 625.602,-466.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-463.175 615.327,-466.438 625.242,-470.173 625.407,-463.175"/>
+</g>
+<!-- 3,4->2,4 -->
+<g id="edge99" class="edge"><title>3,4->2,4</title>
+<path fill="none" stroke="#218559" d="M667.572,-433.467C651.973,-419.402 636,-405 636,-405 636,-405 625.367,-396.899 612.837,-387.352"/>
+<polygon fill="#218559" stroke="#218559" points="614.945,-384.558 604.869,-381.281 610.702,-390.126 614.945,-384.558"/>
+</g>
+<!-- 2,1->1,1 -->
+<g id="edge21" class="edge"><title>2,1->1,1</title>
+<path fill="none" stroke="#218559" d="M163.346,-338.87C142.193,-328.685 120,-318 120,-318 120,-318 108.279,-307.047 95.112,-294.744"/>
+<polygon fill="#218559" stroke="#218559" points="97.41,-292.101 87.7138,-287.831 92.6308,-297.216 97.41,-292.101"/>
+</g>
+<!-- 2,1->3,1 -->
+<g id="edge15" class="edge"><title>2,1->3,1</title>
+<path fill="none" stroke="#dd1e2f" d="M225.811,-386.692C242.699,-406.902 262,-430 262,-430 262,-430 268.943,-433.306 278.219,-437.723"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="276.728,-440.89 287.262,-442.029 279.738,-434.57 276.728,-440.89"/>
+</g>
+<!-- 2,2 -->
+<g id="node26" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-349 303,-363 348,-363 348,-349 303,-349"/>
+<text text-anchor="start" x="310" y="-353.667" font-family="Times Roman,serif" font-size="10.00">GTCCT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-335 303,-349 348,-349 348,-335 303,-335"/>
+<text text-anchor="start" x="308" y="-339.667" font-family="Times Roman,serif" font-size="10.00">AGGAC</text>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge19" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-350.562C252.601,-350.258 262.531,-350.176 272.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-353.822 282.443,-350.554 272.527,-346.823 272.364,-353.822"/>
+</g>
+<!-- 2,1->4,1 -->
+<g id="edge17" class="edge"><title>2,1->4,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-327.971C236.061,-317.862 244,-309 244,-309 244,-309 274,-213 274,-213 274,-213 280.502,-206.881 288.863,-199.012"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="291.338,-201.489 296.221,-192.086 286.54,-196.391 291.338,-201.489"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge25" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M282.443,-363.446C273.158,-363.745 263.225,-363.824 253.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-360.175 243.327,-363.438 253.242,-367.173 253.407,-360.175"/>
+</g>
+<!-- 2,3 -->
+<g id="node27" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-349 427,-363 472,-363 472,-349 427,-349"/>
+<text text-anchor="start" x="435" y="-353.667" font-family="Times Roman,serif" font-size="10.00">TCCTT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-335 427,-349 472,-349 472,-335 427,-335"/>
+<text text-anchor="start" x="431.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">AAGGA</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge23" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-350.562C376.601,-350.258 386.531,-350.176 396.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-353.822 406.443,-350.554 396.527,-346.823 396.364,-353.822"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge29" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M406.443,-363.446C397.158,-363.745 387.225,-363.824 377.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-360.175 367.327,-363.438 377.242,-367.173 377.407,-360.175"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge27" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-350.562C500.601,-350.258 510.531,-350.176 520.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-353.822 530.443,-350.554 520.527,-346.823 520.364,-353.822"/>
+</g>
+<!-- 2,4->1,4 -->
+<g id="edge35" class="edge"><title>2,4->1,4</title>
+<path fill="none" stroke="#218559" d="M541.015,-332.238C525.051,-319.878 505.587,-304.81 488.68,-291.72"/>
+<polygon fill="#218559" stroke="#218559" points="490.661,-288.827 480.611,-285.473 486.376,-294.363 490.661,-288.827"/>
+</g>
+<!-- 2,4->3,4 -->
+<g id="edge33" class="edge"><title>2,4->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M603.652,-382.461C620.195,-396.202 640.78,-413.301 658.406,-427.942"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="656.342,-430.778 666.271,-434.475 660.815,-425.393 656.342,-430.778"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge37" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M530.443,-363.446C521.158,-363.745 511.225,-363.824 501.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-360.175 491.327,-363.438 501.242,-367.173 501.407,-360.175"/>
+</g>
+<!-- 4,4 -->
+<g id="node33" class="node"><title>4,4</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">4,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-157 675,-171 720,-171 720,-157 675,-157"/>
+<text text-anchor="start" x="682" y="-161.667" font-family="Times Roman,serif" font-size="10.00">CTTAG</text>
+<polygon fill="#218559" stroke="#218559" points="675,-143 675,-157 720,-157 720,-143 675,-143"/>
+<text text-anchor="start" x="681" y="-147.667" font-family="Times Roman,serif" font-size="10.00">CTAAG</text>
+</g>
+<!-- 2,4->4,4 -->
+<g id="edge31" class="edge"><title>2,4->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M593.476,-325.295C614.656,-292.5 647.802,-241.178 670.862,-205.472"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="674.008,-207.051 676.494,-196.752 668.128,-203.254 674.008,-207.051"/>
+</g>
+<!-- 4,1->1,2 -->
+<g id="edge41" class="edge"><title>4,1->1,2</title>
+<path fill="none" stroke="#218559" d="M285.459,-179.436C272.801,-184.057 262,-188 262,-188 262,-188 244,-213 244,-213 244,-213 239.718,-217.779 233.857,-224.322"/>
+<polygon fill="#218559" stroke="#218559" points="231.071,-222.187 227.005,-231.971 236.285,-226.858 231.071,-222.187"/>
+</g>
+<!-- 4,1->2,1 -->
+<g id="edge43" class="edge"><title>4,1->2,1</title>
+<path fill="none" stroke="#218559" d="M296.221,-192.086C284.653,-202.974 274,-213 274,-213 274,-213 262,-243 262,-243 262,-243 244,-309 244,-309 244,-309 239.718,-313.779 233.857,-320.322"/>
+<polygon fill="#218559" stroke="#218559" points="231.071,-318.187 227.005,-327.971 236.285,-322.858 231.071,-318.187"/>
+</g>
+<!-- 4,2 -->
+<g id="node31" class="node"><title>4,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">4,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-157 427,-171 472,-171 472,-157 427,-157"/>
+<text text-anchor="start" x="435" y="-161.667" font-family="Times Roman,serif" font-size="10.00">TCCTT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-143 427,-157 472,-157 472,-143 427,-143"/>
+<text text-anchor="start" x="431.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">AAGGA</text>
+</g>
+<!-- 4,1->4,2 -->
+<g id="edge39" class="edge"><title>4,1->4,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-158.562C376.601,-158.258 386.531,-158.176 396.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-161.822 406.443,-158.554 396.527,-154.823 396.364,-161.822"/>
+</g>
+<!-- 4,2->4,1 -->
+<g id="edge47" class="edge"><title>4,2->4,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-171.446C397.158,-171.745 387.225,-171.824 377.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-168.175 367.327,-171.438 377.242,-175.173 377.407,-168.175"/>
+</g>
+<!-- 4,2->4,3 -->
+<g id="edge45" class="edge"><title>4,2->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-158.562C500.601,-158.258 510.531,-158.176 520.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-161.822 530.443,-158.554 520.527,-154.823 520.364,-161.822"/>
+</g>
+<!-- 4,3->1,4 -->
+<g id="edge51" class="edge"><title>4,3->1,4</title>
+<path fill="none" stroke="#218559" d="M541.015,-189.762C525.051,-202.122 505.587,-217.19 488.68,-230.28"/>
+<polygon fill="#218559" stroke="#218559" points="486.376,-227.637 480.611,-236.527 490.661,-233.173 486.376,-227.637"/>
+</g>
+<!-- 4,3->4,2 -->
+<g id="edge53" class="edge"><title>4,3->4,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-171.446C521.158,-171.745 511.225,-171.824 501.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-168.175 491.327,-171.438 501.242,-175.173 501.407,-168.175"/>
+</g>
+<!-- 4,3->4,4 -->
+<g id="edge49" class="edge"><title>4,3->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-158.562C624.601,-158.258 634.531,-158.176 644.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-161.822 654.443,-158.554 644.527,-154.823 644.364,-161.822"/>
+</g>
+<!-- 4,4->2,4 -->
+<g id="edge55" class="edge"><title>4,4->2,4</title>
+<path fill="none" stroke="#218559" d="M678.863,-197.706C660.882,-230.131 636,-275 636,-275 636,-275 618.994,-297.135 602.652,-318.405"/>
+<polygon fill="#218559" stroke="#218559" points="599.776,-316.404 596.459,-326.466 605.327,-320.669 599.776,-316.404"/>
+</g>
+<!-- 4,4->4,3 -->
+<g id="edge57" class="edge"><title>4,4->4,3</title>
+<path fill="none" stroke="#218559" d="M654.443,-171.446C645.158,-171.745 635.225,-171.824 625.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-168.175 615.327,-171.438 625.242,-175.173 625.407,-168.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/.part-0.crc
new file mode 100644
index 0000000..2085368
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/.part-1.crc
new file mode 100644
index 0000000..69dcf7d
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/part-0
new file mode 100755
index 0000000..36702f5
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/part-1
new file mode 100755
index 0000000..9045432
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_ff_bubbles/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles.txt
new file mode 100644
index 0000000..a41ce56
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles.txt
@@ -0,0 +1,18 @@
+((2,1) [(2,3)] [] [] [] AATAGA) (null)
+((2,3) [(6,1),(2,4)] [] [] [(2,1)] TAGAA) (null)
+((2,4) [(6,2)] [] [] [(2,3)] AGAAG) (null)
+((4,1) [(4,3)] [] [] [] AATAGA) (null)
+((4,3) [(6,1),(4,4)] [] [] [(4,1)] TAGAA) (null)
+((4,4) [(6,2)] [] [] [(4,3)] AGAAG) (null)
+((6,1) [(6,2)] [] [] [(2,3),(1,3),(3,3),(4,3),(5,3)] AGAAG) (null)
+((6,2) [(6,3)] [] [] [(2,4),(3,4),(1,4),(4,4),(5,4),(6,1)] GAAGA) (null)
+((6,3) [] [] [] [(6,2)] AAGAAG) (null)
+((1,1) [(1,3)] [] [] [] AATAGA) (null)
+((1,3) [(6,1),(1,4)] [] [] [(1,1)] TAGAA) (null)
+((1,4) [(6,2)] [] [] [(1,3)] AGAAG) (null)
+((3,1) [(3,3)] [] [] [] AATAGA) (null)
+((3,3) [(6,1),(3,4)] [] [] [(3,1)] TAGAA) (null)
+((3,4) [(6,2)] [] [] [(3,3)] AGAAG) (null)
+((5,1) [(5,3)] [] [] [] AATAGA) (null)
+((5,3) [(6,1),(5,4)] [] [] [(5,1)] TAGAA) (null)
+((5,4) [(6,2)] [] [] [(5,3)] AGAAG) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles.txt.svg
new file mode 100644
index 0000000..ff38f7d
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles.txt.svg
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: five_length1_bubbles_txt Pages: 1 -->
+<svg width="646pt" height="844pt"
+ viewBox="0.00 0.00 646.00 844.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 840)">
+<title>five_length1_bubbles_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-840 643,-840 643,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-548 8,-636 376,-636 376,-548 8,-548"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="8,-320 8,-408 376,-408 376,-320 8,-320"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="8,-740 8,-828 376,-828 376,-740 8,-740"/>
+</g>
+<g id="graph6" class="cluster"><title>cluster_5</title>
+<polygon fill="none" stroke="black" points="8,-644 8,-732 376,-732 376,-644 8,-644"/>
+</g>
+<g id="graph7" class="cluster"><title>cluster_4</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<g id="graph8" class="cluster"><title>cluster_6</title>
+<polygon fill="none" stroke="black" points="274,-426 274,-514 630,-514 630,-426 274,-426"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-592" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-603.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-584 37,-598 82,-598 82,-584 37,-584"/>
+<text text-anchor="start" x="40" y="-588.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-570 37,-584 82,-584 82,-570 37,-570"/>
+<text text-anchor="start" x="43" y="-574.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 1,3 -->
+<g id="node16" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-592" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-603.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-584 179,-598 224,-598 224,-584 179,-584"/>
+<text text-anchor="start" x="185" y="-588.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-570 179,-584 224,-584 224,-570 179,-570"/>
+<text text-anchor="start" x="187.5" y="-574.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 1,1->1,3 -->
+<g id="edge69" class="edge"><title>1,1->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-585.755C116.207,-585.208 132.729,-585.105 148.049,-585.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-588.957 158.425,-585.756 148.534,-581.96 148.326,-588.957"/>
+</g>
+<!-- 1,3->1,1 -->
+<g id="edge75" class="edge"><title>1,3->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-598.244C143.825,-598.792 127.305,-598.895 111.982,-598.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-595.043 101.605,-598.245 111.497,-602.04 111.704,-595.043"/>
+</g>
+<!-- 1,4 -->
+<g id="node17" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-592" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-603.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-584 303,-598 348,-598 348,-584 303,-584"/>
+<text text-anchor="start" x="307.5" y="-588.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-570 303,-584 348,-584 348,-570 303,-570"/>
+<text text-anchor="start" x="311" y="-574.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge73" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-585.562C252.601,-585.258 262.531,-585.176 272.159,-585.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-588.822 282.443,-585.554 272.527,-581.823 272.364,-588.822"/>
+</g>
+<!-- 6,1 -->
+<g id="node35" class="node"><title>6,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-470" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-481.167" font-family="Times Roman,serif" font-size="10.00">6,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-462 303,-476 348,-476 348,-462 303,-462"/>
+<text text-anchor="start" x="307.5" y="-466.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-448 303,-462 348,-462 348,-448 303,-448"/>
+<text text-anchor="start" x="311" y="-452.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->6,1 -->
+<g id="edge71" class="edge"><title>1,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M217.507,-558.714C235.573,-522.287 262,-469 262,-469 262,-469 264,-469 264,-469 264,-469 267.077,-469.05 271.85,-469.129"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="271.916,-472.63 281.972,-469.295 272.031,-465.631 271.916,-472.63"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge79" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-598.446C273.158,-598.745 263.225,-598.824 253.602,-598.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-595.175 243.327,-598.438 253.242,-602.173 253.407,-595.175"/>
+</g>
+<!-- 6,2 -->
+<g id="node36" class="node"><title>6,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-470" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-481.167" font-family="Times Roman,serif" font-size="10.00">6,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-462 427,-476 472,-476 472,-462 427,-462"/>
+<text text-anchor="start" x="431.5" y="-466.667" font-family="Times Roman,serif" font-size="10.00">GAAGA</text>
+<polygon fill="#218559" stroke="#218559" points="427,-448 427,-462 472,-462 472,-448 427,-448"/>
+<text text-anchor="start" x="435.5" y="-452.667" font-family="Times Roman,serif" font-size="10.00">TCTTC</text>
+</g>
+<!-- 1,4->6,2 -->
+<g id="edge77" class="edge"><title>1,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M353.138,-564.316C371.132,-546.612 394.616,-523.507 413.837,-504.596"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="416.3,-507.082 420.974,-497.574 411.391,-502.093 416.3,-507.082"/>
+</g>
+<!-- 3,1 -->
+<g id="node19" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-364" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-375.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-356 37,-370 82,-370 82,-356 37,-356"/>
+<text text-anchor="start" x="40" y="-360.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-342 37,-356 82,-356 82,-342 37,-342"/>
+<text text-anchor="start" x="43" y="-346.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 3,3 -->
+<g id="node20" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-364" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-375.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-356 179,-370 224,-370 224,-356 179,-356"/>
+<text text-anchor="start" x="185" y="-360.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-342 179,-356 224,-356 224,-342 179,-342"/>
+<text text-anchor="start" x="187.5" y="-346.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 3,1->3,3 -->
+<g id="edge81" class="edge"><title>3,1->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-357.755C116.207,-357.208 132.729,-357.105 148.049,-357.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-360.957 158.425,-357.756 148.534,-353.96 148.326,-360.957"/>
+</g>
+<!-- 3,3->3,1 -->
+<g id="edge87" class="edge"><title>3,3->3,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-370.244C143.825,-370.792 127.305,-370.895 111.982,-370.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-367.043 101.605,-370.245 111.497,-374.04 111.704,-367.043"/>
+</g>
+<!-- 3,4 -->
+<g id="node21" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-364" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-375.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-356 303,-370 348,-370 348,-356 303,-356"/>
+<text text-anchor="start" x="307.5" y="-360.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-342 303,-356 348,-356 348,-342 303,-342"/>
+<text text-anchor="start" x="311" y="-346.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge85" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-357.562C252.601,-357.258 262.531,-357.176 272.159,-357.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-360.822 282.443,-357.554 272.527,-353.823 272.364,-360.822"/>
+</g>
+<!-- 3,3->6,1 -->
+<g id="edge83" class="edge"><title>3,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M231.334,-389.931C247.997,-404.175 268.832,-421.985 286.618,-437.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="284.674,-440.132 294.55,-443.97 289.223,-434.812 284.674,-440.132"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge91" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-370.446C273.158,-370.745 263.225,-370.824 253.602,-370.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-367.175 243.327,-370.438 253.242,-374.173 253.407,-367.175"/>
+</g>
+<!-- 3,4->6,2 -->
+<g id="edge89" class="edge"><title>3,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M356.869,-388.787C372.495,-400.941 388,-413 388,-413 388,-413 399.721,-423.953 412.888,-436.256"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="410.59,-438.899 420.286,-443.169 415.369,-433.784 410.59,-438.899"/>
+</g>
+<!-- 2,1 -->
+<g id="node23" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-784" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-795.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-776 37,-790 82,-790 82,-776 37,-776"/>
+<text text-anchor="start" x="40" y="-780.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-762 37,-776 82,-776 82,-762 37,-762"/>
+<text text-anchor="start" x="43" y="-766.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 2,3 -->
+<g id="node24" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-784" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-795.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-776 179,-790 224,-790 224,-776 179,-776"/>
+<text text-anchor="start" x="185" y="-780.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-762 179,-776 224,-776 224,-762 179,-762"/>
+<text text-anchor="start" x="187.5" y="-766.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 2,1->2,3 -->
+<g id="edge17" class="edge"><title>2,1->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-777.755C116.207,-777.208 132.729,-777.105 148.049,-777.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-780.957 158.425,-777.756 148.534,-773.96 148.326,-780.957"/>
+</g>
+<!-- 2,3->2,1 -->
+<g id="edge23" class="edge"><title>2,3->2,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-790.244C143.825,-790.792 127.305,-790.895 111.982,-790.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-787.043 101.605,-790.245 111.497,-794.04 111.704,-787.043"/>
+</g>
+<!-- 2,4 -->
+<g id="node25" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-784" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-795.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-776 303,-790 348,-790 348,-776 303,-776"/>
+<text text-anchor="start" x="307.5" y="-780.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-762 303,-776 348,-776 348,-762 303,-762"/>
+<text text-anchor="start" x="311" y="-766.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge21" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-777.562C252.601,-777.258 262.531,-777.176 272.159,-777.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-780.822 282.443,-777.554 272.527,-773.823 272.364,-780.822"/>
+</g>
+<!-- 2,3->6,1 -->
+<g id="edge19" class="edge"><title>2,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-754.971C236.061,-744.862 244,-736 244,-736 244,-736 274,-544 274,-544 274,-544 285.426,-527.421 297.461,-509.958"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="300.579,-511.603 303.371,-501.383 294.815,-507.63 300.579,-511.603"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge27" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-790.446C273.158,-790.745 263.225,-790.824 253.602,-790.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-787.175 243.327,-790.438 253.242,-794.173 253.407,-787.175"/>
+</g>
+<!-- 2,4->6,2 -->
+<g id="edge25" class="edge"><title>2,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M353.779,-756.914C365.347,-746.026 376,-736 376,-736 376,-736 415.795,-590.993 436.621,-515.107"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="440.035,-515.892 439.306,-505.323 433.284,-514.04 440.035,-515.892"/>
+</g>
+<!-- 5,1 -->
+<g id="node27" class="node"><title>5,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-688" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-699.167" font-family="Times Roman,serif" font-size="10.00">5,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-680 37,-694 82,-694 82,-680 37,-680"/>
+<text text-anchor="start" x="40" y="-684.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-666 37,-680 82,-680 82,-666 37,-666"/>
+<text text-anchor="start" x="43" y="-670.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 5,3 -->
+<g id="node28" class="node"><title>5,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-688" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-699.167" font-family="Times Roman,serif" font-size="10.00">5,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-680 179,-694 224,-694 224,-680 179,-680"/>
+<text text-anchor="start" x="185" y="-684.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-666 179,-680 224,-680 224,-666 179,-666"/>
+<text text-anchor="start" x="187.5" y="-670.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 5,1->5,3 -->
+<g id="edge93" class="edge"><title>5,1->5,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-681.755C116.207,-681.208 132.729,-681.105 148.049,-681.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-684.957 158.425,-681.756 148.534,-677.96 148.326,-684.957"/>
+</g>
+<!-- 5,3->5,1 -->
+<g id="edge99" class="edge"><title>5,3->5,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-694.244C143.825,-694.792 127.305,-694.895 111.982,-694.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-691.043 101.605,-694.245 111.497,-698.04 111.704,-691.043"/>
+</g>
+<!-- 5,4 -->
+<g id="node29" class="node"><title>5,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-688" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-699.167" font-family="Times Roman,serif" font-size="10.00">5,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-680 303,-694 348,-694 348,-680 303,-680"/>
+<text text-anchor="start" x="307.5" y="-684.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-666 303,-680 348,-680 348,-666 303,-666"/>
+<text text-anchor="start" x="311" y="-670.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 5,3->5,4 -->
+<g id="edge97" class="edge"><title>5,3->5,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-681.562C252.601,-681.258 262.531,-681.176 272.159,-681.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-684.822 282.443,-681.554 272.527,-677.823 272.364,-684.822"/>
+</g>
+<!-- 5,3->6,1 -->
+<g id="edge95" class="edge"><title>5,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-658.971C236.061,-648.862 244,-640 244,-640 244,-640 262,-514 262,-514 262,-514 271.601,-507.295 283.307,-499.119"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="285.461,-501.884 291.655,-493.288 281.453,-496.145 285.461,-501.884"/>
+</g>
+<!-- 5,4->5,3 -->
+<g id="edge103" class="edge"><title>5,4->5,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-694.446C273.158,-694.745 263.225,-694.824 253.602,-694.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-691.175 243.327,-694.438 253.242,-698.173 253.407,-691.175"/>
+</g>
+<!-- 5,4->6,2 -->
+<g id="edge101" class="edge"><title>5,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M353.779,-660.914C365.347,-650.026 376,-640 376,-640 376,-640 408.743,-563.749 430.371,-513.382"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="433.673,-514.563 434.403,-503.993 427.241,-511.801 433.673,-514.563"/>
+</g>
+<!-- 4,1 -->
+<g id="node31" class="node"><title>4,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">4,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="40" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="43" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 4,3 -->
+<g id="node32" class="node"><title>4,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">4,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="187.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 4,1->4,3 -->
+<g id="edge29" class="edge"><title>4,1->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 4,3->4,1 -->
+<g id="edge35" class="edge"><title>4,3->4,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 4,4 -->
+<g id="node33" class="node"><title>4,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">4,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="307.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="311" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 4,3->4,4 -->
+<g id="edge33" class="edge"><title>4,3->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 4,3->6,1 -->
+<g id="edge31" class="edge"><title>4,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M238.738,-278.971C252.156,-285.36 264,-291 264,-291 264,-291 274,-412 274,-412 274,-412 282.58,-421.757 292.701,-433.268"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="290.268,-435.801 299.5,-441 295.525,-431.179 290.268,-435.801"/>
+</g>
+<!-- 4,4->4,3 -->
+<g id="edge39" class="edge"><title>4,4->4,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 4,4->6,2 -->
+<g id="edge37" class="edge"><title>4,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M351.718,-289.414C368.888,-307.675 388,-328 388,-328 388,-328 412.394,-384.787 430.33,-426.538"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427.226,-428.181 434.389,-435.987 433.658,-425.418 427.226,-428.181"/>
+</g>
+<!-- 6,1->1,3 -->
+<g id="edge45" class="edge"><title>6,1->1,3</title>
+<path fill="none" stroke="#218559" d="M286.368,-453.534C274.262,-448.374 264,-444 264,-444 264,-444 262,-444 262,-444 262,-444 236.975,-504.716 218.982,-548.371"/>
+<polygon fill="#218559" stroke="#218559" points="215.723,-547.095 215.148,-557.674 222.195,-549.762 215.723,-547.095"/>
+</g>
+<!-- 6,1->3,3 -->
+<g id="edge47" class="edge"><title>6,1->3,3</title>
+<path fill="none" stroke="#218559" d="M299.5,-441C286.75,-426.5 274,-412 274,-412 274,-412 264,-394 264,-394 264,-394 257.057,-390.694 247.781,-386.277"/>
+<polygon fill="#218559" stroke="#218559" points="249.272,-383.11 238.738,-381.971 246.262,-389.43 249.272,-383.11"/>
+</g>
+<!-- 6,1->2,3 -->
+<g id="edge43" class="edge"><title>6,1->2,3</title>
+<path fill="none" stroke="#218559" d="M303.371,-501.383C289.471,-521.551 274,-544 274,-544 274,-544 264,-629 264,-629 264,-629 244,-736 244,-736 244,-736 239.718,-740.779 233.857,-747.322"/>
+<polygon fill="#218559" stroke="#218559" points="231.071,-745.187 227.005,-754.971 236.285,-749.858 231.071,-745.187"/>
+</g>
+<!-- 6,1->5,3 -->
+<g id="edge51" class="edge"><title>6,1->5,3</title>
+<path fill="none" stroke="#218559" d="M293.131,-494.787C277.505,-506.941 262,-519 262,-519 262,-519 244,-640 244,-640 244,-640 239.718,-644.779 233.857,-651.322"/>
+<polygon fill="#218559" stroke="#218559" points="231.071,-649.187 227.005,-658.971 236.285,-653.858 231.071,-649.187"/>
+</g>
+<!-- 6,1->4,3 -->
+<g id="edge49" class="edge"><title>6,1->4,3</title>
+<path fill="none" stroke="#218559" d="M299.5,-441C286.75,-426.5 274,-412 274,-412 274,-412 264,-316 264,-316 264,-316 252.076,-305.59 238.602,-293.828"/>
+<polygon fill="#218559" stroke="#218559" points="240.859,-291.151 231.024,-287.211 236.255,-296.425 240.859,-291.151"/>
+</g>
+<!-- 6,1->6,2 -->
+<g id="edge41" class="edge"><title>6,1->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-463.562C376.601,-463.258 386.531,-463.176 396.159,-463.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-466.822 406.443,-463.554 396.527,-459.823 396.364,-466.822"/>
+</g>
+<!-- 6,2->1,4 -->
+<g id="edge59" class="edge"><title>6,2->1,4</title>
+<path fill="none" stroke="#218559" d="M423.484,-499.281C406.768,-518.463 388,-540 388,-540 388,-540 376.647,-549.37 363.581,-560.156"/>
+<polygon fill="#218559" stroke="#218559" points="361.246,-557.544 355.762,-566.609 365.702,-562.943 361.246,-557.544"/>
+</g>
+<!-- 6,2->3,4 -->
+<g id="edge57" class="edge"><title>6,2->3,4</title>
+<path fill="none" stroke="#218559" d="M418.55,-443.97C401.867,-429.709 381.029,-411.896 363.258,-396.704"/>
+<polygon fill="#218559" stroke="#218559" points="365.209,-393.768 355.334,-389.931 360.661,-399.089 365.209,-393.768"/>
+</g>
+<!-- 6,2->2,4 -->
+<g id="edge55" class="edge"><title>6,2->2,4</title>
+<path fill="none" stroke="#218559" d="M440.065,-505.448C423.121,-572.666 388,-712 388,-712 388,-712 376,-736 376,-736 376,-736 369.498,-742.119 361.137,-749.988"/>
+<polygon fill="#218559" stroke="#218559" points="358.662,-747.511 353.779,-756.914 363.46,-752.609 358.662,-747.511"/>
+</g>
+<!-- 6,2->5,4 -->
+<g id="edge63" class="edge"><title>6,2->5,4</title>
+<path fill="none" stroke="#218559" d="M436.802,-504.593C419.001,-555.079 388,-643 388,-643 388,-643 378.242,-649.97 366.407,-658.423"/>
+<polygon fill="#218559" stroke="#218559" points="364.079,-655.785 357.976,-664.446 368.148,-661.481 364.079,-655.785"/>
+</g>
+<!-- 6,2->4,4 -->
+<g id="edge61" class="edge"><title>6,2->4,4</title>
+<path fill="none" stroke="#218559" d="M432.98,-436.204C411.491,-390.872 376,-316 376,-316 376,-316 367.973,-307.343 358.288,-296.899"/>
+<polygon fill="#218559" stroke="#218559" points="360.762,-294.42 351.396,-289.467 355.629,-299.179 360.762,-294.42"/>
+</g>
+<!-- 6,2->6,1 -->
+<g id="edge65" class="edge"><title>6,2->6,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-476.446C397.158,-476.745 387.225,-476.824 377.602,-476.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-473.175 367.327,-476.438 377.242,-480.173 377.407,-473.175"/>
+</g>
+<!-- 6,3 -->
+<g id="node37" class="node"><title>6,3</title>
+<ellipse fill="none" stroke="black" cx="576" cy="-470" rx="44.7575" ry="36.0624"/>
+<text text-anchor="start" x="556" y="-481.167" font-family="Times Roman,serif" font-size="10.00">6,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="552,-462 552,-476 600,-476 600,-462 552,-462"/>
+<text text-anchor="start" x="554.5" y="-466.667" font-family="Times Roman,serif" font-size="10.00">AAGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="552,-448 552,-462 600,-462 600,-448 552,-448"/>
+<text text-anchor="start" x="559" y="-452.667" font-family="Times Roman,serif" font-size="10.00">CTTCTT</text>
+</g>
+<!-- 6,2->6,3 -->
+<g id="edge53" class="edge"><title>6,2->6,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.642,-463.585C501.055,-463.272 511.156,-463.178 520.981,-463.304"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="521.009,-466.805 531.079,-463.514 521.154,-459.807 521.009,-466.805"/>
+</g>
+<!-- 6,3->6,2 -->
+<g id="edge67" class="edge"><title>6,3->6,2</title>
+<path fill="none" stroke="#218559" d="M531.079,-476.486C521.562,-476.764 511.435,-476.822 501.66,-476.662"/>
+<polygon fill="#218559" stroke="#218559" points="501.726,-473.162 491.642,-476.415 501.553,-480.16 501.726,-473.162"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/.part-0.crc
new file mode 100644
index 0000000..53d1b45
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/.part-1.crc
new file mode 100644
index 0000000..e76bd36
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/part-0
new file mode 100755
index 0000000..a9f8b84
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/part-1
new file mode 100755
index 0000000..f1c5899
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/five_length1_bubbles/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble.txt
new file mode 100644
index 0000000..51cc418
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble.txt
@@ -0,0 +1,6 @@
+((2,1) [(2,3)] [] [] [] GGAATA) (null)
+((2,3) [(2,4)] [(1,4)] [] [(2,1)] AATAC) (null)
+((2,4) [] [(1,3)] [] [(2,3)] ATACG) (null)
+((1,1) [(1,3)] [] [] [] AAACGT) (null)
+((1,3) [(1,4)] [(2,4)] [] [(1,1)] ACGTA) (null)
+((1,4) [] [(2,3)] [] [(1,3)] CGTAT) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble.txt.svg
new file mode 100644
index 0000000..cb1b291
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble.txt.svg
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: fr_bubble_txt Pages: 1 -->
+<svg width="392pt" height="428pt"
+ viewBox="0.00 0.00 392.00 428.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 424)">
+<title>fr_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-424 389,-424 389,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="8,-324 8,-412 376,-412 376,-324 8,-324"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="39.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AAACGT</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="41.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ACGTTT</text>
+</g>
+<!-- 1,3 -->
+<g id="node16" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="186" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+</g>
+<!-- 1,1->1,3 -->
+<g id="edge25" class="edge"><title>1,1->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 1,3->1,1 -->
+<g id="edge31" class="edge"><title>1,3->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,4 -->
+<g id="node17" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="310.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="309.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge27" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 2,4 -->
+<g id="node21" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-360 303,-374 348,-374 348,-360 303,-360"/>
+<text text-anchor="start" x="309.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-346 303,-360 348,-360 348,-346 303,-346"/>
+<text text-anchor="start" x="310.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 1,3->2,4 -->
+<g id="edge29" class="edge"><title>1,3->2,4</title>
+<path fill="none" stroke="#ebb035" d="M231.017,-286.902C247.799,-301.383 268.887,-319.58 286.832,-335.065"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="284.972,-338.083 294.83,-341.966 289.545,-332.783 284.972,-338.083"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge35" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 2,3 -->
+<g id="node20" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-360 179,-374 224,-374 224,-360 179,-360"/>
+<text text-anchor="start" x="186" y="-364.667" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-346 179,-360 224,-360 224,-346 179,-346"/>
+<text text-anchor="start" x="187.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 1,4->2,3 -->
+<g id="edge33" class="edge"><title>1,4->2,3</title>
+<path fill="none" stroke="#ebb035" d="M299.131,-289.838C282.505,-308.372 264,-329 264,-329 264,-329 255.356,-334.351 244.471,-341.089"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="242.477,-338.207 235.817,-346.447 246.162,-344.159 242.477,-338.207"/>
+</g>
+<!-- 2,1 -->
+<g id="node19" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-360 37,-374 82,-374 82,-360 37,-360"/>
+<text text-anchor="start" x="39.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">GGAATA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-346 37,-360 82,-360 82,-346 37,-346"/>
+<text text-anchor="start" x="42.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">TATTCC</text>
+</g>
+<!-- 2,1->2,3 -->
+<g id="edge13" class="edge"><title>2,1->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-361.755C116.207,-361.208 132.729,-361.105 148.049,-361.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-364.957 158.425,-361.756 148.534,-357.96 148.326,-364.957"/>
+</g>
+<!-- 2,3->1,4 -->
+<g id="edge17" class="edge"><title>2,3->1,4</title>
+<path fill="none" stroke="#ebb035" d="M231.017,-342.098C247.799,-327.617 268.887,-309.42 286.832,-293.935"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="289.545,-296.217 294.83,-287.034 284.972,-290.917 289.545,-296.217"/>
+</g>
+<!-- 2,3->2,1 -->
+<g id="edge19" class="edge"><title>2,3->2,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-374.244C143.825,-374.792 127.305,-374.895 111.982,-374.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-371.043 101.605,-374.245 111.497,-378.04 111.704,-371.043"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge15" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-361.562C252.601,-361.258 262.531,-361.176 272.159,-361.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-364.822 282.443,-361.554 272.527,-357.823 272.364,-364.822"/>
+</g>
+<!-- 2,4->1,3 -->
+<g id="edge21" class="edge"><title>2,4->1,3</title>
+<path fill="none" stroke="#ebb035" d="M294.83,-341.966C278.021,-327.462 256.93,-309.262 239.004,-293.794"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="240.875,-290.785 231.017,-286.902 236.301,-296.085 240.875,-290.785"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge23" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-374.446C273.158,-374.745 263.225,-374.824 253.602,-374.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-371.175 243.327,-374.438 253.242,-378.173 253.407,-371.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/.part-0.crc
new file mode 100644
index 0000000..d40cb4d
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/.part-1.crc
new file mode 100644
index 0000000..bc50c79
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/part-0
new file mode 100755
index 0000000..f757027
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/part-1
new file mode 100755
index 0000000..96978fb
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt
new file mode 100644
index 0000000..b53f352
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt
@@ -0,0 +1,9 @@
+((2,1) [(2,2)] [] [] [(1,3)] CGTAT) (null)
+((2,2) [(2,3)] [] [] [(1,4),(2,1)] GTATT) (null)
+((2,3) [] [] [] [(2,2)] TATTCC) (null)
+((1,1) [(1,3)] [] [] [] AAACGT) (null)
+((1,3) [(2,1),(1,4)] [(3,4)] [] [(1,1)] ACGTA) (null)
+((1,4) [(2,2)] [(3,3)] [] [(1,3)] CGTAT) (null)
+((3,1) [(3,3)] [] [] [] GGAATA) (null)
+((3,3) [(3,4)] [(1,4)] [] [(3,1)] AATAC) (null)
+((3,4) [] [(1,3)] [] [(3,3)] ATACG) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt.svg
new file mode 100644
index 0000000..aaaab66
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt.svg
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: fr_bubble_and_ff_bubble_txt Pages: 1 -->
+<svg width="640pt" height="428pt"
+ viewBox="0.00 0.00 640.00 428.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 424)">
+<title>fr_bubble_and_ff_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-424 637,-424 637,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="8,-324 8,-412 376,-412 376,-324 8,-324"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="274,-121 274,-209 624,-209 624,-121 274,-121"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="39.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AAACGT</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="41.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ACGTTT</text>
+</g>
+<!-- 1,3 -->
+<g id="node16" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="186" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+</g>
+<!-- 1,1->1,3 -->
+<g id="edge26" class="edge"><title>1,1->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 1,3->1,1 -->
+<g id="edge34" class="edge"><title>1,3->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,4 -->
+<g id="node17" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="310.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="309.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge30" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 3,4 -->
+<g id="node21" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-360 303,-374 348,-374 348,-360 303,-360"/>
+<text text-anchor="start" x="309.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-346 303,-360 348,-360 348,-346 303,-346"/>
+<text text-anchor="start" x="310.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 1,3->3,4 -->
+<g id="edge32" class="edge"><title>1,3->3,4</title>
+<path fill="none" stroke="#ebb035" d="M231.017,-286.902C247.799,-301.383 268.887,-319.58 286.832,-335.065"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="284.972,-338.083 294.83,-341.966 289.545,-332.783 284.972,-338.083"/>
+</g>
+<!-- 2,1 -->
+<g id="node23" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-157 303,-171 348,-171 348,-157 303,-157"/>
+<text text-anchor="start" x="310.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-143 303,-157 348,-157 348,-143 303,-143"/>
+<text text-anchor="start" x="309.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+</g>
+<!-- 1,3->2,1 -->
+<g id="edge28" class="edge"><title>1,3->2,1</title>
+<path fill="none" stroke="#dd1e2f" d="M234.345,-237.712C249.456,-227.157 264,-217 264,-217 264,-217 274.622,-207.945 287.002,-197.392"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="289.518,-199.846 294.857,-190.695 284.977,-194.519 289.518,-199.846"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge40" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 3,3 -->
+<g id="node20" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-360 179,-374 224,-374 224,-360 179,-360"/>
+<text text-anchor="start" x="186" y="-364.667" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-346 179,-360 224,-360 224,-346 179,-346"/>
+<text text-anchor="start" x="187.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 1,4->3,3 -->
+<g id="edge38" class="edge"><title>1,4->3,3</title>
+<path fill="none" stroke="#ebb035" d="M294.83,-287.034C278.021,-301.538 256.93,-319.738 239.004,-335.206"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="236.301,-332.915 231.017,-342.098 240.875,-338.215 236.301,-332.915"/>
+</g>
+<!-- 2,2 -->
+<g id="node24" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-157 427,-171 472,-171 472,-157 427,-157"/>
+<text text-anchor="start" x="435.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-143 427,-157 472,-157 472,-143 427,-143"/>
+<text text-anchor="start" x="434" y="-147.667" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+</g>
+<!-- 1,4->2,2 -->
+<g id="edge36" class="edge"><title>1,4->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M356.611,-236.527C372.521,-224.21 391.976,-209.147 408.924,-196.027"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="411.251,-198.652 417.015,-189.762 406.965,-193.117 411.251,-198.652"/>
+</g>
+<!-- 3,1 -->
+<g id="node19" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-360 37,-374 82,-374 82,-360 37,-360"/>
+<text text-anchor="start" x="39.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">GGAATA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-346 37,-360 82,-360 82,-346 37,-346"/>
+<text text-anchor="start" x="42.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">TATTCC</text>
+</g>
+<!-- 3,1->3,3 -->
+<g id="edge42" class="edge"><title>3,1->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-361.755C116.207,-361.208 132.729,-361.105 148.049,-361.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-364.957 158.425,-361.756 148.534,-357.96 148.326,-364.957"/>
+</g>
+<!-- 3,3->1,4 -->
+<g id="edge46" class="edge"><title>3,3->1,4</title>
+<path fill="none" stroke="#ebb035" d="M229.714,-341.169C245.535,-326.385 262,-311 262,-311 262,-311 272.801,-302.428 285.459,-292.382"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="287.843,-294.958 293.5,-286 283.491,-289.475 287.843,-294.958"/>
+</g>
+<!-- 3,3->3,1 -->
+<g id="edge48" class="edge"><title>3,3->3,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-374.244C143.825,-374.792 127.305,-374.895 111.982,-374.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-371.043 101.605,-374.245 111.497,-378.04 111.704,-371.043"/>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge44" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-361.562C252.601,-361.258 262.531,-361.176 272.159,-361.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-364.822 282.443,-361.554 272.527,-357.823 272.364,-364.822"/>
+</g>
+<!-- 3,4->1,3 -->
+<g id="edge50" class="edge"><title>3,4->1,3</title>
+<path fill="none" stroke="#ebb035" d="M294.83,-341.966C278.021,-327.462 256.93,-309.262 239.004,-293.794"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="240.875,-290.785 231.017,-286.902 236.301,-296.085 240.875,-290.785"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge52" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-374.446C273.158,-374.745 263.225,-374.824 253.602,-374.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-371.175 243.327,-374.438 253.242,-378.173 253.407,-371.175"/>
+</g>
+<!-- 2,1->1,3 -->
+<g id="edge16" class="edge"><title>2,1->1,3</title>
+<path fill="none" stroke="#218559" d="M293.015,-189.762C277.051,-202.122 257.587,-217.19 240.68,-230.28"/>
+<polygon fill="#218559" stroke="#218559" points="238.376,-227.637 232.611,-236.527 242.661,-233.173 238.376,-227.637"/>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge14" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-158.562C376.601,-158.258 386.531,-158.176 396.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-161.822 406.443,-158.554 396.527,-154.823 396.364,-161.822"/>
+</g>
+<!-- 2,2->1,4 -->
+<g id="edge20" class="edge"><title>2,2->1,4</title>
+<path fill="none" stroke="#218559" d="M420.286,-191.831C404.465,-206.615 388,-222 388,-222 388,-222 379.356,-227.351 368.471,-234.089"/>
+<polygon fill="#218559" stroke="#218559" points="366.477,-231.207 359.817,-239.447 370.162,-237.159 366.477,-231.207"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge22" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-171.446C397.158,-171.745 387.225,-171.824 377.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-168.175 367.327,-171.438 377.242,-175.173 377.407,-168.175"/>
+</g>
+<!-- 2,3 -->
+<g id="node25" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-157 551,-171 596,-171 596,-157 551,-157"/>
+<text text-anchor="start" x="556.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">TATTCC</text>
+<polygon fill="#218559" stroke="#218559" points="551,-143 551,-157 596,-157 596,-143 551,-143"/>
+<text text-anchor="start" x="553.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">GGAATA</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge18" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-158.562C500.601,-158.258 510.531,-158.176 520.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-161.822 530.443,-158.554 520.527,-154.823 520.364,-161.822"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge24" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-171.446C521.158,-171.745 511.225,-171.824 501.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-168.175 491.327,-171.438 501.242,-175.173 501.407,-168.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-0.crc
new file mode 100644
index 0000000..528de91
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-1.crc
new file mode 100644
index 0000000..247ccc7
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-0
new file mode 100755
index 0000000..795d0c7
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-1
new file mode 100755
index 0000000..8a0aa72
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble.txt
new file mode 100644
index 0000000..8b0bfdc
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble.txt
@@ -0,0 +1,6 @@
+((2,1) [(2,2)] [] [(1,2)] [] ACCGT) (null)
+((2,2) [(2,3)] [] [(1,1)] [(2,1)] CCGTG) (null)
+((2,3) [] [] [] [(2,2)] CGTGGT) (null)
+((1,1) [(1,2)] [] [(2,2)] [] ACGGT) (null)
+((1,2) [(1,3)] [] [(2,1)] [(1,1)] CGGTG) (null)
+((1,3) [] [] [] [(1,2)] GGTGTA) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble.txt.svg
new file mode 100644
index 0000000..80a9d65
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble.txt.svg
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: rf_bubble_txt Pages: 1 -->
+<svg width="394pt" height="428pt"
+ viewBox="0.00 0.00 394.00 428.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 424)">
+<title>rf_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-424 391,-424 391,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-324 8,-412 377,-412 377,-324 8,-324"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 378,-305 378,-217 8,-217"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-360 37,-374 82,-374 82,-360 37,-360"/>
+<text text-anchor="start" x="42.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">ACGGT</text>
+<polygon fill="#218559" stroke="#218559" points="37,-346 37,-360 82,-360 82,-346 37,-346"/>
+<text text-anchor="start" x="43" y="-350.667" font-family="Times Roman,serif" font-size="10.00">ACCGT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-360 179,-374 224,-374 224,-360 179,-360"/>
+<text text-anchor="start" x="184" y="-364.667" font-family="Times Roman,serif" font-size="10.00">CGGTG</text>
+<polygon fill="#218559" stroke="#218559" points="179,-346 179,-360 224,-360 224,-346 179,-346"/>
+<text text-anchor="start" x="184" y="-350.667" font-family="Times Roman,serif" font-size="10.00">CACCG</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge25" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-361.755C116.207,-361.208 132.729,-361.105 148.049,-361.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-364.957 158.425,-361.756 148.534,-357.96 148.326,-364.957"/>
+</g>
+<!-- 2,2 -->
+<g id="node20" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="184.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CCGTG</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="183.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CACGG</text>
+</g>
+<!-- 1,1->2,2 -->
+<g id="edge27" class="edge"><title>1,1->2,2</title>
+<path fill="none" stroke="#06a2cb" d="M96.6544,-349.87C117.807,-339.685 140,-329 140,-329 140,-329 153.666,-313.765 168.062,-297.718"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="171.058,-299.619 175.131,-289.838 165.848,-294.945 171.058,-299.619"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge33" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-374.244C143.825,-374.792 127.305,-374.895 111.982,-374.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-371.043 101.605,-374.245 111.497,-378.04 111.704,-371.043"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="326" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="306.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="304,-360 304,-374 349,-374 349,-360 304,-360"/>
+<text text-anchor="start" x="307" y="-364.667" font-family="Times Roman,serif" font-size="10.00">GGTGTA</text>
+<polygon fill="#218559" stroke="#218559" points="304,-346 304,-360 349,-360 349,-346 304,-346"/>
+<text text-anchor="start" x="307.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">TACACC</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge29" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.319,-361.573C252.886,-361.256 263.16,-361.173 273.102,-361.321"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="273.22,-364.825 283.299,-361.561 273.384,-357.827 273.22,-364.825"/>
+</g>
+<!-- 2,1 -->
+<g id="node19" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="43" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ACCGT</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="42.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ACGGT</text>
+</g>
+<!-- 1,2->2,1 -->
+<g id="edge31" class="edge"><title>1,2->2,1</title>
+<path fill="none" stroke="#06a2cb" d="M167.587,-345.312C145.274,-330.161 120,-313 120,-313 120,-313 109.378,-303.945 96.9983,-293.392"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="99.0233,-290.519 89.1426,-286.695 94.4822,-295.846 99.0233,-290.519"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge35" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M283.299,-374.439C273.713,-374.75 263.434,-374.828 253.502,-374.673"/>
+<polygon fill="#218559" stroke="#218559" points="253.401,-371.169 243.319,-374.427 253.232,-378.167 253.401,-371.169"/>
+</g>
+<!-- 2,1->1,2 -->
+<g id="edge15" class="edge"><title>2,1->1,2</title>
+<path fill="none" stroke="#06a2cb" d="M92.4134,-283.688C114.726,-298.839 140,-316 140,-316 140,-316 150.622,-325.055 163.002,-335.608"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="160.977,-338.481 170.857,-342.305 165.518,-333.154 160.977,-338.481"/>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge13" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 2,2->1,1 -->
+<g id="edge19" class="edge"><title>2,2->1,1</title>
+<path fill="none" stroke="#06a2cb" d="M168.906,-285.184C148.325,-300.692 121.435,-320.954 99.4042,-337.555"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="97.1022,-334.907 91.222,-343.72 101.315,-340.497 97.1022,-334.907"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge21" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 2,3 -->
+<g id="node21" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="326" cy="-261" rx="43.8406" ry="36.0624"/>
+<text text-anchor="start" x="306" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 349,-267 349,-253 303,-253"/>
+<text text-anchor="start" x="306" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CGTGGT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 349,-253 349,-239 303,-239"/>
+<text text-anchor="start" x="305.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ACCACG</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge17" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.319,-254.573C252.676,-254.263 262.709,-254.176 272.446,-254.312"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.37,-257.811 282.446,-254.534 272.526,-250.813 272.37,-257.811"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge23" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M282.446,-267.466C273.13,-267.753 263.195,-267.823 253.581,-267.674"/>
+<polygon fill="#218559" stroke="#218559" points="253.401,-264.169 243.319,-267.427 253.232,-271.167 253.401,-264.169"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/.part-0.crc
new file mode 100644
index 0000000..e87ee4f
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/.part-1.crc
new file mode 100644
index 0000000..2c9bb22
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/part-0
new file mode 100755
index 0000000..4388d34
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/part-1
new file mode 100755
index 0000000..fbd0d87
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/rf_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble.txt
new file mode 100644
index 0000000..14cf2e1
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble.txt
@@ -0,0 +1,6 @@
+((2,1) [(2,2)] [] [] [(1,3)] AGAAG) (null)
+((2,2) [(2,3)] [] [] [(1,4),(2,1)] GAAGC) (null)
+((2,3) [] [] [] [(2,2)] AAGCCC) (null)
+((1,1) [(1,3)] [] [] [] AATAGA) (null)
+((1,3) [(2,1),(1,4)] [] [] [(1,1)] TAGAA) (null)
+((1,4) [(2,2)] [] [] [(1,3)] AGAAG) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble.txt.svg
new file mode 100644
index 0000000..550660b
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble.txt.svg
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: small_bubble_txt Pages: 1 -->
+<svg width="644pt" height="321pt"
+ viewBox="0.00 0.00 644.00 321.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 317)">
+<title>small_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-317 641,-317 641,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="274,-121 274,-209 628,-209 628,-121 274,-121"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="40" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="43" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 1,3 -->
+<g id="node16" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="187.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 1,1->1,3 -->
+<g id="edge25" class="edge"><title>1,1->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 1,3->1,1 -->
+<g id="edge31" class="edge"><title>1,3->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,4 -->
+<g id="node17" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="307.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="311" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge29" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 2,1 -->
+<g id="node19" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-157 303,-171 348,-171 348,-157 303,-157"/>
+<text text-anchor="start" x="307.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-143 303,-157 348,-157 348,-143 303,-143"/>
+<text text-anchor="start" x="311" y="-147.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->2,1 -->
+<g id="edge27" class="edge"><title>1,3->2,1</title>
+<path fill="none" stroke="#dd1e2f" d="M234.345,-237.712C249.456,-227.157 264,-217 264,-217 264,-217 274.622,-207.945 287.002,-197.392"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="289.518,-199.846 294.857,-190.695 284.977,-194.519 289.518,-199.846"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge35" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 2,2 -->
+<g id="node20" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-157 427,-171 472,-171 472,-157 427,-157"/>
+<text text-anchor="start" x="431.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">GAAGC</text>
+<polygon fill="#218559" stroke="#218559" points="427,-143 427,-157 472,-157 472,-143 427,-143"/>
+<text text-anchor="start" x="434" y="-147.667" font-family="Times Roman,serif" font-size="10.00">GCTTC</text>
+</g>
+<!-- 1,4->2,2 -->
+<g id="edge33" class="edge"><title>1,4->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M361.282,-241.419C375.287,-233.861 388,-227 388,-227 388,-227 400.484,-214.311 414.157,-200.414"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="416.837,-202.681 421.356,-193.098 411.847,-197.771 416.837,-202.681"/>
+</g>
+<!-- 2,1->1,3 -->
+<g id="edge15" class="edge"><title>2,1->1,3</title>
+<path fill="none" stroke="#218559" d="M293.015,-189.762C277.051,-202.122 257.587,-217.19 240.68,-230.28"/>
+<polygon fill="#218559" stroke="#218559" points="238.376,-227.637 232.611,-236.527 242.661,-233.173 238.376,-227.637"/>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge13" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-158.562C376.601,-158.258 386.531,-158.176 396.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-161.822 406.443,-158.554 396.527,-154.823 396.364,-161.822"/>
+</g>
+<!-- 2,2->1,4 -->
+<g id="edge19" class="edge"><title>2,2->1,4</title>
+<path fill="none" stroke="#218559" d="M417.015,-189.762C401.051,-202.122 381.587,-217.19 364.68,-230.28"/>
+<polygon fill="#218559" stroke="#218559" points="362.376,-227.637 356.611,-236.527 366.661,-233.173 362.376,-227.637"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge21" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-171.446C397.158,-171.745 387.225,-171.824 377.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-168.175 367.327,-171.438 377.242,-175.173 377.407,-168.175"/>
+</g>
+<!-- 2,3 -->
+<g id="node21" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="575" cy="-165" rx="44.0472" ry="36.0624"/>
+<text text-anchor="start" x="555.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="552,-157 552,-171 599,-171 599,-157 552,-157"/>
+<text text-anchor="start" x="554.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">AAGCCC</text>
+<polygon fill="#218559" stroke="#218559" points="552,-143 552,-157 599,-157 599,-143 552,-143"/>
+<text text-anchor="start" x="555.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">GGGCTT</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge17" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.658,-158.573C501.09,-158.263 511.203,-158.176 521.018,-158.312"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="521.023,-161.813 531.097,-158.534 521.177,-154.814 521.023,-161.813"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge23" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M531.097,-171.466C521.607,-171.756 511.479,-171.824 501.692,-171.669"/>
+<polygon fill="#218559" stroke="#218559" points="501.739,-168.169 491.658,-171.427 501.571,-175.167 501.739,-168.169"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/.part-0.crc
new file mode 100644
index 0000000..fc426bc
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/.part-1.crc
new file mode 100644
index 0000000..611cf9d
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/part-0
new file mode 100755
index 0000000..de5dd64
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/part-1
new file mode 100755
index 0000000..d84c1d2
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/small_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble.txt
new file mode 100644
index 0000000..5fde720
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble.txt
@@ -0,0 +1,9 @@
+((2,1) [(3,1),(2,2)] [] [] [(1,1)] ATAGA) (null)
+((2,2) [(2,3)] [] [] [(2,1)] TAGAC) (null)
+((2,3) [(2,4)] [] [] [(2,2)] AGACT) (null)
+((2,4) [(3,4)] [] [] [(2,3)] GACTA) (null)
+((1,1) [(2,1),(1,2)] [] [] [] AATAG) (null)
+((1,2) [] [] [] [(1,1)] ATAGAAG) (null)
+((3,1) [(3,3)] [] [] [(2,1)] TAGACT) (null)
+((3,3) [(3,4)] [] [] [(3,1)] GACTA) (null)
+((3,4) [] [] [] [(2,4),(3,3)] ACTAC) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble.txt.svg
new file mode 100644
index 0000000..1ae4c53
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble.txt.svg
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: tip_and_bubble_txt Pages: 1 -->
+<svg width="650pt" height="417pt"
+ viewBox="0.00 0.00 650.00 417.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 413)">
+<title>tip_and_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-413 647,-413 647,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 216,-209 216,-8 49,-8"/>
+<text text-anchor="middle" x="132.5" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-313 8,-401 262,-401 262,-313 8,-313"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="284,-109 284,-197 634,-197 634,-109 284,-109"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="155,-217 155,-305 634,-305 634,-217 155,-217"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="206" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.078,-157C75.5476,-157 161.628,-157 193.842,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="194.198,-160.5 204.198,-157 194.198,-153.5 194.198,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="206" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.078,-116C75.5476,-116 161.628,-116 193.842,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="194.198,-119.5 204.198,-116 194.198,-112.5 194.198,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="206" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.078,-75C75.5476,-75 161.628,-75 193.842,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="194.198,-78.5001 204.198,-75 194.198,-71.5001 194.198,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="206" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.078,-34C75.5476,-34 161.628,-34 193.842,-34"/>
+<polygon fill="#218559" stroke="#218559" points="194.198,-37.5001 204.198,-34 194.198,-30.5001 194.198,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-349 37,-363 82,-363 82,-349 37,-349"/>
+<text text-anchor="start" x="43.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">AATAG</text>
+<polygon fill="#218559" stroke="#218559" points="37,-335 37,-349 82,-349 82,-335 37,-335"/>
+<text text-anchor="start" x="45.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">CTATT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="206" cy="-357" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="186.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="181,-349 181,-363 232,-363 232,-349 181,-349"/>
+<text text-anchor="start" x="183.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">ATAGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="181,-335 181,-349 232,-349 232,-335 181,-335"/>
+<text text-anchor="start" x="187" y="-339.667" font-family="Times Roman,serif" font-size="10.00">CTTCTAT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge34" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.518,-350.814C116.334,-350.242 133.206,-350.105 149.005,-350.404"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="149.114,-353.907 159.199,-350.663 149.292,-346.91 149.114,-353.907"/>
+</g>
+<!-- 2,1 -->
+<g id="node22" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="206" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="186.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="184,-253 184,-267 229,-267 229,-253 184,-253"/>
+<text text-anchor="start" x="190.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="184,-239 184,-253 229,-253 229,-239 184,-239"/>
+<text text-anchor="start" x="192.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TCTAT</text>
+</g>
+<!-- 1,1->2,1 -->
+<g id="edge32" class="edge"><title>1,1->2,1</title>
+<path fill="none" stroke="#dd1e2f" d="M95.2356,-337.316C116.802,-325.601 140,-313 140,-313 140,-313 152.492,-303.158 166.607,-292.037"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="168.857,-294.72 174.546,-285.782 164.525,-289.221 168.857,-294.72"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge36" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M159.199,-363.337C144.021,-363.827 127.084,-363.881 111.518,-363.499"/>
+<polygon fill="#218559" stroke="#218559" points="111.623,-360.001 101.518,-363.186 111.404,-366.998 111.623,-360.001"/>
+</g>
+<!-- 3,1 -->
+<g id="node18" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="335" cy="-153" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="315.5" y="-164.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="313,-145 313,-159 358,-159 358,-145 313,-145"/>
+<text text-anchor="start" x="316.5" y="-149.667" font-family="Times Roman,serif" font-size="10.00">TAGACT</text>
+<polygon fill="#218559" stroke="#218559" points="313,-131 313,-145 358,-145 358,-131 313,-131"/>
+<text text-anchor="start" x="317" y="-135.667" font-family="Times Roman,serif" font-size="10.00">AGTCTA</text>
+</g>
+<!-- 3,3 -->
+<g id="node19" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="459" cy="-153" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="439.5" y="-164.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="437,-145 437,-159 482,-159 482,-145 437,-145"/>
+<text text-anchor="start" x="443" y="-149.667" font-family="Times Roman,serif" font-size="10.00">GACTA</text>
+<polygon fill="#218559" stroke="#218559" points="437,-131 437,-145 482,-145 482,-131 437,-131"/>
+<text text-anchor="start" x="444.5" y="-135.667" font-family="Times Roman,serif" font-size="10.00">TAGTC</text>
+</g>
+<!-- 3,1->3,3 -->
+<g id="edge38" class="edge"><title>3,1->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M377.327,-146.562C386.601,-146.258 396.531,-146.176 406.159,-146.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="406.364,-149.822 416.443,-146.554 406.527,-142.823 406.364,-149.822"/>
+</g>
+<!-- 3,1->2,1 -->
+<g id="edge40" class="edge"><title>3,1->2,1</title>
+<path fill="none" stroke="#218559" d="M307.356,-180.644C291.216,-196.784 274,-214 274,-214 274,-214 261.746,-222.469 247.643,-232.218"/>
+<polygon fill="#218559" stroke="#218559" points="245.439,-229.486 239.203,-238.051 249.42,-235.244 245.439,-229.486"/>
+</g>
+<!-- 3,3->3,1 -->
+<g id="edge44" class="edge"><title>3,3->3,1</title>
+<path fill="none" stroke="#218559" d="M416.443,-159.446C407.158,-159.745 397.225,-159.824 387.602,-159.681"/>
+<polygon fill="#218559" stroke="#218559" points="387.407,-156.175 377.327,-159.438 387.242,-163.173 387.407,-156.175"/>
+</g>
+<!-- 3,4 -->
+<g id="node20" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="583" cy="-153" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="563.5" y="-164.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="561,-145 561,-159 606,-159 606,-145 561,-145"/>
+<text text-anchor="start" x="567.5" y="-149.667" font-family="Times Roman,serif" font-size="10.00">ACTAC</text>
+<polygon fill="#218559" stroke="#218559" points="561,-131 561,-145 606,-145 606,-131 561,-131"/>
+<text text-anchor="start" x="568" y="-135.667" font-family="Times Roman,serif" font-size="10.00">GTAGT</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge42" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M501.327,-146.562C510.601,-146.258 520.531,-146.176 530.159,-146.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="530.364,-149.822 540.443,-146.554 530.527,-142.823 530.364,-149.822"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge48" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M540.443,-159.446C531.158,-159.745 521.225,-159.824 511.602,-159.681"/>
+<polygon fill="#218559" stroke="#218559" points="511.407,-156.175 501.327,-159.438 511.242,-163.173 511.407,-156.175"/>
+</g>
+<!-- 2,4 -->
+<g id="node25" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="583" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="563.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="561,-253 561,-267 606,-267 606,-253 561,-253"/>
+<text text-anchor="start" x="567" y="-257.667" font-family="Times Roman,serif" font-size="10.00">GACTA</text>
+<polygon fill="#218559" stroke="#218559" points="561,-239 561,-253 606,-253 606,-239 561,-239"/>
+<text text-anchor="start" x="568.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TAGTC</text>
+</g>
+<!-- 3,4->2,4 -->
+<g id="edge46" class="edge"><title>3,4->2,4</title>
+<path fill="none" stroke="#218559" d="M583,-188.897C583,-188.965 583,-189 583,-189 583,-189 583,-204.137 583,-214.808"/>
+<polygon fill="#218559" stroke="#218559" points="579.5,-215.103 583,-225.103 586.5,-215.103 579.5,-215.103"/>
+</g>
+<!-- 2,1->1,1 -->
+<g id="edge18" class="edge"><title>2,1->1,1</title>
+<path fill="none" stroke="#218559" d="M171.021,-282.15C147.211,-296.547 120,-313 120,-313 120,-313 111.029,-319.471 99.9682,-327.449"/>
+<polygon fill="#218559" stroke="#218559" points="97.7057,-324.766 91.643,-333.454 101.801,-330.443 97.7057,-324.766"/>
+</g>
+<!-- 2,1->3,1 -->
+<g id="edge14" class="edge"><title>2,1->3,1</title>
+<path fill="none" stroke="#dd1e2f" d="M236.571,-235.406C254.514,-220.384 277.353,-201.262 296.514,-185.221"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="298.78,-187.888 304.201,-178.785 294.287,-182.521 298.78,-187.888"/>
+</g>
+<!-- 2,2 -->
+<g id="node23" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="335" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="315.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="313,-253 313,-267 358,-267 358,-253 313,-253"/>
+<text text-anchor="start" x="319.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TAGAC</text>
+<polygon fill="#218559" stroke="#218559" points="313,-239 313,-253 358,-253 358,-239 313,-239"/>
+<text text-anchor="start" x="320.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">GTCTA</text>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge16" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M248.597,-254.609C259.385,-254.242 271.101,-254.157 282.322,-254.352"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="282.362,-257.854 292.448,-254.61 282.54,-250.856 282.362,-257.854"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge22" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M292.448,-267.39C281.662,-267.757 269.947,-267.843 258.724,-267.649"/>
+<polygon fill="#218559" stroke="#218559" points="258.683,-264.147 248.597,-267.391 258.505,-271.145 258.683,-264.147"/>
+</g>
+<!-- 2,3 -->
+<g id="node24" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="459" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="439.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="437,-253 437,-267 482,-267 482,-253 437,-253"/>
+<text text-anchor="start" x="443" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AGACT</text>
+<polygon fill="#218559" stroke="#218559" points="437,-239 437,-253 482,-253 482,-239 437,-239"/>
+<text text-anchor="start" x="444" y="-243.667" font-family="Times Roman,serif" font-size="10.00">AGTCT</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge20" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M377.327,-254.562C386.601,-254.258 396.531,-254.176 406.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="406.364,-257.822 416.443,-254.554 406.527,-250.823 406.364,-257.822"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge26" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M416.443,-267.446C407.158,-267.745 397.225,-267.824 387.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="387.407,-264.175 377.327,-267.438 387.242,-271.173 387.407,-264.175"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge24" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M501.327,-254.562C510.601,-254.258 520.531,-254.176 530.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="530.364,-257.822 540.443,-254.554 530.527,-250.823 530.364,-257.822"/>
+</g>
+<!-- 2,4->3,4 -->
+<g id="edge28" class="edge"><title>2,4->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M583,-225.103C583,-225.035 583,-225 583,-225 583,-225 583,-209.863 583,-199.192"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="586.5,-198.897 583,-188.897 579.5,-198.897 586.5,-198.897"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge30" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M540.443,-267.446C531.158,-267.745 521.225,-267.824 511.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="511.407,-264.175 501.327,-267.438 511.242,-271.173 511.407,-264.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/.part-0.crc
new file mode 100644
index 0000000..3b5cec2
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/.part-1.crc
new file mode 100644
index 0000000..6621cf4
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/part-0
new file mode 100755
index 0000000..a6a5e83
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/part-1
new file mode 100755
index 0000000..a65fe7e
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/bubblemerge/tip_and_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread.txt
new file mode 100644
index 0000000..7a3e64f
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread.txt
@@ -0,0 +1,4 @@
+((1,1) [(1,2)] [] [] [] AATAG) (null)
+((1,2) [(1,3)] [] [] [(1,1)] ATAGA) (null)
+((1,3) [(1,4)] [] [] [(1,2)] TAGAA) (null)
+((1,4) [] [] [] [(1,3)] AGAAG) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread.txt.svg
new file mode 100644
index 0000000..efaf9e1
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread.txt.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: singleread_txt Pages: 1 -->
+<svg width="516pt" height="321pt"
+ viewBox="0.00 0.00 516.00 321.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 317)">
+<title>singleread_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-317 513,-317 513,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 500,-305 500,-217 8,-217"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="43.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AATAG</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="45.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CTATT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="187.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TCTAT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge12" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge16" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="309" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="311.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge14" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge20" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 1,4 -->
+<g id="node18" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-253 427,-267 472,-267 472,-253 427,-253"/>
+<text text-anchor="start" x="431.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="427,-239 427,-253 472,-253 472,-239 427,-239"/>
+<text text-anchor="start" x="435" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge18" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-254.562C376.601,-254.258 386.531,-254.176 396.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-257.822 406.443,-254.554 396.527,-250.823 396.364,-257.822"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge22" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M406.443,-267.446C397.158,-267.745 387.225,-267.824 377.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-264.175 367.327,-267.438 377.242,-271.173 377.407,-264.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/.part-0.crc
new file mode 100644
index 0000000..b972cba
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/.part-1.crc
new file mode 100644
index 0000000..23505c8
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/part-0
new file mode 100755
index 0000000..39d79bc
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/part-1
new file mode 100755
index 0000000..e49fcdd
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/pathmerge/singleread/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1.txt
new file mode 100644
index 0000000..bdeb586
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1.txt
@@ -0,0 +1,147 @@
+((2,1) [(2,2)] [] [] [] CCTCG) (null)
+((2,2) [(2,3)] [(1,4)] [] [(2,1)] CTCGC) (null)
+((2,3) [(2,4)] [] [] [(2,2)] TCGCA) (null)
+((2,4) [] [(1,2)] [] [(2,3)] CGCAC) (null)
+((4,1) [(4,2)] [] [] [] GAGGG) (null)
+((4,2) [(4,3)] [(5,4)] [] [(4,1)] AGGGT) (null)
+((4,3) [(4,4)] [] [] [(3,4),(4,2)] GGGTT) (null)
+((4,4) [] [(5,2)] [] [(4,3)] GGTTG) (null)
+((6,1) [(6,2)] [] [(5,3)] [] GTTGC) (null)
+((6,2) [(6,3)] [(7,4)] [] [(6,1)] TTGCT) (null)
+((6,3) [(6,4)] [] [(5,1)] [(6,2)] TGCTG) (null)
+((6,4) [] [(7,2)] [] [(6,3)] GCTGA) (null)
+((8,1) [(24,1),(8,2)] [] [(7,3)] [] CTGAA) (null)
+((8,2) [(8,3)] [(9,4)] [] [(8,1)] TGAAA) (null)
+((8,3) [(8,4)] [] [(7,1)] [(19,4),(8,2)] GAAAT) (null)
+((8,4) [] [(9,2)] [] [(8,3)] AAATC) (null)
+((10,1) [(10,2)] [] [] [(11,2)] GGCAG) (null)
+((10,2) [(9,1),(10,3)] [] [] [(10,1)] GCAGA) (null)
+((10,3) [(10,4)] [] [] [(11,4),(10,2)] CAGAT) (null)
+((10,4) [(9,3)] [] [] [(10,3)] AGATT) (null)
+((12,1) [(12,2)] [] [] [(13,2)] CTCTG) (null)
+((12,2) [(11,1),(12,3)] [] [] [(12,1)] TCTGG) (null)
+((12,3) [(12,4)] [] [] [(13,4),(12,2)] CTGGC) (null)
+((12,4) [(11,3)] [] [] [(12,3)] TGGCA) (null)
+((14,1) [(14,2)] [] [] [(15,2)] GCATC) (null)
+((14,2) [(13,1),(14,3)] [] [] [(14,1)] CATCT) (null)
+((14,3) [(14,4)] [] [] [(15,4),(14,2)] ATCTC) (null)
+((14,4) [(13,3)] [] [] [(14,3)] TCTCT) (null)
+((16,1) [(16,2)] [] [] [(17,2)] AACGG) (null)
+((16,2) [(15,1),(16,3)] [] [] [(16,1)] ACGGC) (null)
+((16,3) [(16,4)] [] [] [(17,4),(16,2)] CGGCA) (null)
+((16,4) [(15,3)] [] [] [(16,3)] GGCAT) (null)
+((18,1) [(23,1),(18,2)] [] [(17,3)] [] CGTTT) (null)
+((18,2) [(7,1),(18,3)] [(19,4)] [] [(18,1)] GTTTC) (null)
+((18,3) [(18,4)] [] [(17,1)] [(18,2)] TTTCA) (null)
+((18,4) [] [(19,2)] [(24,1)] [(18,3)] TTCAA) (null)
+((20,1) [(20,2)] [] [(19,3)] [] TCAAT) (null)
+((20,2) [(21,1),(20,3)] [] [] [(20,1)] CAATA) (null)
+((20,3) [(20,4)] [] [(19,1)] [(20,2)] AATAC) (null)
+((20,4) [(21,3)] [] [] [(20,3)] ATACG) (null)
+((22,1) [(22,2)] [] [] [(28,1),(27,3),(21,2)] TACGT) (null)
+((22,2) [(22,3)] [(23,4)] [] [(27,4),(22,1)] ACGTG) (null)
+((22,3) [(22,4)] [] [] [(21,4),(22,2)] CGTGA) (null)
+((22,4) [] [(23,2)] [] [(22,3)] GTGAA) (null)
+((24,1) [(17,1),(24,2)] [] [(23,3),(18,4),(7,2)] [(8,1),(19,3)] TGAAA) (null)
+((24,2) [(25,1),(24,3)] [] [(7,1)] [(19,4),(24,1)] GAAAC) (null)
+((24,3) [(24,4)] [] [(23,1)] [(24,2)] AAACT) (null)
+((24,4) [(25,3)] [] [] [(24,3)] AACTA) (null)
+((26,1) [(26,2)] [] [(27,3)] [] GTAAT) (null)
+((26,2) [(26,3)] [(25,4)] [] [(26,1)] TAATA) (null)
+((26,3) [(26,4)] [] [(27,1)] [(26,2)] AATAG) (null)
+((26,4) [] [(25,2)] [] [(26,3)] ATAGT) (null)
+((28,1) [(22,1),(28,2)] [] [] [(27,2)] TTACG) (null)
+((28,2) [(28,3)] [(29,4)] [] [(28,1)] TACGT) (null)
+((28,3) [(28,4)] [] [] [(27,4),(28,2)] ACGTC) (null)
+((28,4) [(31,3)] [(29,2)] [] [(28,3)] CGTCA) (null)
+((30,1) [(30,2)] [] [(29,3)] [(31,2)] GTCAT) (null)
+((30,2) [(29,1),(30,3)] [(31,4)] [] [(30,1)] TCATG) (null)
+((30,3) [(30,4)] [] [(29,1)] [(31,4),(30,2)] CATGA) (null)
+((30,4) [(29,3)] [(31,2)] [] [(30,3)] ATGAC) (null)
+((32,1) [(32,2)] [] [(33,3),(35,3)] [] AAGCG) (null)
+((32,2) [(31,1),(32,3)] [] [] [(32,1)] AGCGT) (null)
+((32,3) [(32,4)] [] [] [(32,2)] GCGTC) (null)
+((32,4) [(31,3)] [(29,2)] [] [(32,3)] CGTCA) (null)
+((34,1) [(34,2)] [] [] [(33,2),(35,2)] GCTTA) (null)
+((34,2) [(34,3)] [(35,4),(33,4)] [] [(34,1)] CTTAA) (null)
+((34,3) [(34,4)] [] [] [(35,4),(33,4),(34,2)] TTAAG) (null)
+((34,4) [] [(33,2),(35,2)] [] [(34,3)] TAAGC) (null)
+((36,1) [(36,2)] [] [(33,3),(35,3)] [] AAGCG) (null)
+((36,2) [(36,3)] [(37,4)] [] [(36,1)] AGCGT) (null)
+((36,3) [(36,4)] [] [] [(36,2)] GCGTG) (null)
+((36,4) [] [(37,2)] [] [(36,3)] CGTGT) (null)
+((1,1) [(1,2)] [] [] [] TAGTG) (null)
+((1,2) [(1,3)] [(2,4)] [] [(1,1)] AGTGC) (null)
+((1,3) [(1,4)] [] [] [(1,2)] GTGCG) (null)
+((1,4) [] [(2,2)] [] [(1,3)] TGCGA) (null)
+((3,1) [(3,3)] [] [] [] GCTAGG) (null)
+((3,3) [(3,4)] [] [] [(3,1)] TAGGG) (null)
+((3,4) [(4,3)] [] [] [(3,3)] AGGGT) (null)
+((5,1) [(5,2)] [] [(6,3)] [] AGCAA) (null)
+((5,2) [(5,3)] [(4,4)] [] [(5,1)] GCAAC) (null)
+((5,3) [(5,4)] [] [(6,1)] [(5,2)] CAACC) (null)
+((5,4) [] [(4,2)] [] [(5,3)] AACCC) (null)
+((7,1) [(7,2)] [] [(8,3),(24,2)] [(18,2),(23,1)] TTTCA) (null)
+((7,2) [(7,3)] [(6,4)] [(24,1)] [(7,1)] TTCAG) (null)
+((7,3) [(7,4)] [] [(8,1)] [(7,2)] TCAGC) (null)
+((7,4) [] [(6,2)] [] [(7,3)] CAGCA) (null)
+((9,1) [(9,2)] [] [] [(10,2)] CAGAT) (null)
+((9,2) [(9,3)] [(8,4)] [] [(9,1)] AGATT) (null)
+((9,3) [(9,4)] [] [] [(10,4),(9,2)] GATTT) (null)
+((9,4) [] [(8,2)] [] [(9,3)] ATTTC) (null)
+((11,1) [(11,2)] [] [] [(12,2)] CTGGC) (null)
+((11,2) [(10,1),(11,3)] [] [] [(11,1)] TGGCA) (null)
+((11,3) [(11,4)] [] [] [(12,4),(11,2)] GGCAG) (null)
+((11,4) [(10,3)] [] [] [(11,3)] GCAGA) (null)
+((13,1) [(13,2)] [] [] [(14,2)] ATCTC) (null)
+((13,2) [(12,1),(13,3)] [] [] [(13,1)] TCTCT) (null)
+((13,3) [(13,4)] [] [] [(14,4),(13,2)] CTCTG) (null)
+((13,4) [(12,3)] [] [] [(13,3)] TCTGG) (null)
+((15,1) [(15,2)] [] [] [(16,2)] CGGCA) (null)
+((15,2) [(14,1),(15,3)] [] [] [(15,1)] GGCAT) (null)
+((15,3) [(15,4)] [] [] [(16,4),(15,2)] GCATC) (null)
+((15,4) [(14,3)] [] [] [(15,3)] CATCT) (null)
+((17,1) [(17,2)] [] [(23,2),(18,3)] [(24,1)] GAAAC) (null)
+((17,2) [(16,1),(17,3)] [] [(23,1)] [(17,1)] AAACG) (null)
+((17,3) [(17,4)] [] [(18,1)] [(17,2)] AACGG) (null)
+((17,4) [(16,3)] [] [] [(17,3)] ACGGC) (null)
+((19,1) [(19,2)] [] [(20,3)] [] TATTG) (null)
+((19,2) [(19,3)] [(18,4)] [] [(19,1)] ATTGA) (null)
+((19,3) [(24,1),(19,4)] [] [(20,1)] [(19,2)] TTGAA) (null)
+((19,4) [(8,3),(24,2)] [(18,2),(23,1)] [] [(19,3)] TGAAA) (null)
+((21,1) [(21,2)] [] [] [(20,2)] AATAC) (null)
+((21,2) [(22,1),(21,3)] [] [] [(21,1)] ATACG) (null)
+((21,3) [(21,4)] [] [] [(20,4),(21,2)] TACGT) (null)
+((21,4) [(22,3)] [] [] [(27,4),(21,3)] ACGTG) (null)
+((23,1) [(7,1),(23,2)] [(19,4)] [(24,3),(17,2)] [(18,1)] GTTTC) (null)
+((23,2) [(23,3)] [(22,4)] [(17,1)] [(23,1)] TTTCA) (null)
+((23,3) [(23,4)] [] [(24,1)] [(23,2)] TTCAC) (null)
+((23,4) [] [(22,2)] [] [(23,3)] TCACG) (null)
+((25,1) [(25,2)] [] [] [(24,2)] AAACT) (null)
+((25,2) [(25,3)] [(26,4)] [] [(25,1)] AACTA) (null)
+((25,3) [(25,4)] [] [] [(24,4),(25,2)] ACTAT) (null)
+((25,4) [] [(26,2)] [] [(25,3)] CTATT) (null)
+((27,1) [(27,2)] [] [(26,3)] [] TATTA) (null)
+((27,2) [(28,1),(27,3)] [] [] [(27,1)] ATTAC) (null)
+((27,3) [(22,1),(27,4)] [] [(26,1)] [(27,2)] TTACG) (null)
+((27,4) [(28,3),(21,4),(22,2)] [] [] [(27,3)] TACGT) (null)
+((29,1) [(29,2)] [] [(30,3)] [(30,2)] CATGA) (null)
+((29,2) [(29,3)] [(32,4),(28,4)] [] [(29,1)] ATGAC) (null)
+((29,3) [(29,4)] [] [(30,1)] [(30,4),(29,2)] TGACG) (null)
+((29,4) [] [(28,2)] [] [(29,3)] GACGT) (null)
+((31,1) [(31,2)] [] [] [(32,2)] GCGTC) (null)
+((31,2) [(30,1),(31,3)] [(30,4)] [] [(31,1)] CGTCA) (null)
+((31,3) [(31,4)] [] [] [(32,4),(28,4),(31,2)] GTCAT) (null)
+((31,4) [(30,3)] [(30,2)] [] [(31,3)] TCATG) (null)
+((33,1) [(33,2)] [] [] [] TCGCT) (null)
+((33,2) [(34,1),(33,3)] [(34,4)] [] [(33,1)] CGCTT) (null)
+((33,3) [(33,4)] [] [(36,1),(32,1)] [(33,2)] GCTTA) (null)
+((33,4) [(34,3)] [(34,2)] [] [(33,3)] CTTAA) (null)
+((35,1) [(35,2)] [] [] [] TCGCT) (null)
+((35,2) [(34,1),(35,3)] [(34,4)] [] [(35,1)] CGCTT) (null)
+((35,3) [(35,4)] [] [(36,1),(32,1)] [(35,2)] GCTTA) (null)
+((35,4) [(34,3)] [(34,2)] [] [(35,3)] CTTAA) (null)
+((37,1) [(37,2)] [] [] [] CCACA) (null)
+((37,2) [(37,3)] [(36,4)] [] [(37,1)] CACAC) (null)
+((37,3) [(37,4)] [] [] [(37,2)] ACACG) (null)
+((37,4) [] [(36,2)] [] [(37,3)] CACGC) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1.txt.svg
new file mode 100644
index 0000000..655df86
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1.txt.svg
@@ -0,0 +1,3577 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: walk_random_seq1_txt Pages: 1 -->
+<svg width="1494pt" height="5501pt"
+ viewBox="0.00 0.00 1494.00 5501.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 5497)">
+<title>walk_random_seq1_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-5497 1491,-5497 1491,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="54,-1935 54,-2136 226,-2136 226,-1935 54,-1935"/>
+<text text-anchor="middle" x="140" y="-2119.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_24</title>
+<polygon fill="none" stroke="black" points="428,-5076 428,-5164 942,-5164 942,-5076 428,-5076"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_25</title>
+<polygon fill="none" stroke="black" points="562,-1126 562,-1214 1076,-1214 1076,-1126 562,-1126"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_26</title>
+<polygon fill="none" stroke="black" points="428,-2358 428,-2446 942,-2446 942,-2358 428,-2358"/>
+</g>
+<g id="graph6" class="cluster"><title>cluster_27</title>
+<polygon fill="none" stroke="black" points="294,-2792 294,-2880 808,-2880 808,-2792 294,-2792"/>
+</g>
+<g id="graph7" class="cluster"><title>cluster_20</title>
+<polygon fill="none" stroke="black" points="160,-4070 160,-4158 674,-4158 674,-4070 160,-4070"/>
+</g>
+<g id="graph8" class="cluster"><title>cluster_21</title>
+<polygon fill="none" stroke="black" points="428,-3605 428,-3693 942,-3693 942,-3605 428,-3605"/>
+</g>
+<g id="graph9" class="cluster"><title>cluster_22</title>
+<polygon fill="none" stroke="black" points="428,-3190 428,-3278 942,-3278 942,-3190 428,-3190"/>
+</g>
+<g id="graph10" class="cluster"><title>cluster_23</title>
+<polygon fill="none" stroke="black" points="294,-4681 294,-4769 808,-4769 808,-4681 294,-4681"/>
+</g>
+<g id="graph11" class="cluster"><title>cluster_28</title>
+<polygon fill="none" stroke="black" points="562,-2696 562,-2784 1076,-2784 1076,-2696 562,-2696"/>
+</g>
+<g id="graph12" class="cluster"><title>cluster_29</title>
+<polygon fill="none" stroke="black" points="696,-2262 696,-2350 1210,-2350 1210,-2262 696,-2262"/>
+</g>
+<g id="graph13" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="13,-5371 13,-5459 535,-5459 535,-5371 13,-5371"/>
+</g>
+<g id="graph14" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="700,-8 700,-96 1071,-96 1071,-8 700,-8"/>
+</g>
+<g id="graph15" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="165,-5275 165,-5363 669,-5363 669,-5275 165,-5275"/>
+</g>
+<g id="graph16" class="cluster"><title>cluster_5</title>
+<polygon fill="none" stroke="black" points="701,-2454 701,-2542 1205,-2542 1205,-2454 701,-2454"/>
+</g>
+<g id="graph17" class="cluster"><title>cluster_4</title>
+<polygon fill="none" stroke="black" points="835,-1400 835,-1488 1339,-1488 1339,-1400 835,-1400"/>
+</g>
+<g id="graph18" class="cluster"><title>cluster_7</title>
+<polygon fill="none" stroke="black" points="433,-4585 433,-4673 937,-4673 937,-4585 433,-4585"/>
+</g>
+<g id="graph19" class="cluster"><title>cluster_6</title>
+<polygon fill="none" stroke="black" points="567,-3087 567,-3175 1071,-3175 1071,-3087 567,-3087"/>
+</g>
+<g id="graph20" class="cluster"><title>cluster_9</title>
+<polygon fill="none" stroke="black" points="433,-3439 433,-3527 937,-3527 937,-3439 433,-3439"/>
+</g>
+<g id="graph21" class="cluster"><title>cluster_8</title>
+<polygon fill="none" stroke="black" points="299,-4980 299,-5068 803,-5068 803,-4980 299,-4980"/>
+</g>
+<g id="graph22" class="cluster"><title>cluster_11</title>
+<polygon fill="none" stroke="black" points="294,-616 294,-704 808,-704 808,-616 294,-616"/>
+</g>
+<g id="graph23" class="cluster"><title>cluster_10</title>
+<polygon fill="none" stroke="black" points="428,-2991 428,-3079 942,-3079 942,-2991 428,-2991"/>
+</g>
+<g id="graph24" class="cluster"><title>cluster_13</title>
+<polygon fill="none" stroke="black" points="294,-424 294,-512 808,-512 808,-424 294,-424"/>
+</g>
+<g id="graph25" class="cluster"><title>cluster_12</title>
+<polygon fill="none" stroke="black" points="294,-520 294,-608 808,-608 808,-520 294,-520"/>
+</g>
+<g id="graph26" class="cluster"><title>cluster_15</title>
+<polygon fill="none" stroke="black" points="294,-232 294,-320 808,-320 808,-232 294,-232"/>
+</g>
+<g id="graph27" class="cluster"><title>cluster_14</title>
+<polygon fill="none" stroke="black" points="294,-328 294,-416 808,-416 808,-328 294,-328"/>
+</g>
+<g id="graph28" class="cluster"><title>cluster_17</title>
+<polygon fill="none" stroke="black" points="294,-3904 294,-3992 808,-3992 808,-3904 294,-3904"/>
+</g>
+<g id="graph29" class="cluster"><title>cluster_16</title>
+<polygon fill="none" stroke="black" points="294,-104 294,-192 808,-192 808,-104 294,-104"/>
+</g>
+<g id="graph30" class="cluster"><title>cluster_19</title>
+<polygon fill="none" stroke="black" points="8,-5172 8,-5260 540,-5260 540,-5172 8,-5172"/>
+</g>
+<g id="graph31" class="cluster"><title>cluster_18</title>
+<polygon fill="none" stroke="black" points="160,-4419 160,-4507 674,-4507 674,-4419 160,-4419"/>
+</g>
+<g id="graph32" class="cluster"><title>cluster_31</title>
+<polygon fill="none" stroke="black" points="562,-1688 562,-1776 1076,-1776 1076,-1688 562,-1688"/>
+</g>
+<g id="graph33" class="cluster"><title>cluster_30</title>
+<polygon fill="none" stroke="black" points="696,-2096 696,-2184 1210,-2184 1210,-2096 696,-2096"/>
+</g>
+<g id="graph34" class="cluster"><title>cluster_37</title>
+<polygon fill="none" stroke="black" points="964,-616 964,-704 1478,-704 1478,-616 964,-616"/>
+</g>
+<g id="graph35" class="cluster"><title>cluster_36</title>
+<polygon fill="none" stroke="black" points="830,-1030 830,-1118 1344,-1118 1344,-1030 830,-1030"/>
+</g>
+<g id="graph36" class="cluster"><title>cluster_35</title>
+<polygon fill="none" stroke="black" points="428,-1592 428,-1680 942,-1680 942,-1592 428,-1592"/>
+</g>
+<g id="graph37" class="cluster"><title>cluster_34</title>
+<polygon fill="none" stroke="black" points="562,-712 562,-800 1076,-800 1076,-712 562,-712"/>
+</g>
+<g id="graph38" class="cluster"><title>cluster_33</title>
+<polygon fill="none" stroke="black" points="428,-1496 428,-1584 942,-1584 942,-1496 428,-1496"/>
+</g>
+<g id="graph39" class="cluster"><title>cluster_32</title>
+<polygon fill="none" stroke="black" points="562,-1930 562,-2018 1076,-2018 1076,-1930 562,-1930"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="64" cy="-2084" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="216" cy="-2084" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M66.1487,-2084C81.1775,-2084 170.918,-2084 203.873,-2084"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="204.136,-2087.5 214.136,-2084 204.136,-2080.5 204.136,-2087.5"/>
+<text text-anchor="middle" x="140" y="-2089.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="64" cy="-2043" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="216" cy="-2043" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M66.1487,-2043C81.1775,-2043 170.918,-2043 203.873,-2043"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="204.136,-2046.5 214.136,-2043 204.136,-2039.5 204.136,-2046.5"/>
+<text text-anchor="middle" x="140" y="-2048.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="64" cy="-2002" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="216" cy="-2002" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M66.1487,-2002C81.1775,-2002 170.918,-2002 203.873,-2002"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="204.136,-2005.5 214.136,-2002 204.136,-1998.5 204.136,-2005.5"/>
+<text text-anchor="middle" x="140" y="-2007.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="64" cy="-1961" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="216" cy="-1961" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M66.1487,-1961C81.1775,-1961 170.918,-1961 203.873,-1961"/>
+<polygon fill="#218559" stroke="#218559" points="204.136,-1964.5 214.136,-1961 204.136,-1957.5 204.136,-1964.5"/>
+<text text-anchor="middle" x="140" y="-1966.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 24,1 -->
+<g id="node15" class="node"><title>24,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5120" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-5131.17" font-family="Times Roman,serif" font-size="10.00">24,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-5112 459,-5126 510,-5126 510,-5112 459,-5112"/>
+<text text-anchor="start" x="467.5" y="-5116.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-5098 459,-5112 510,-5112 510,-5098 459,-5098"/>
+<text text-anchor="start" x="470" y="-5102.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+</g>
+<!-- 24,2 -->
+<g id="node16" class="node"><title>24,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-5120" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-5131.17" font-family="Times Roman,serif" font-size="10.00">24,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-5112 593,-5126 644,-5126 644,-5112 593,-5112"/>
+<text text-anchor="start" x="601" y="-5116.67" font-family="Times Roman,serif" font-size="10.00">GAAAC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-5098 593,-5112 644,-5112 644,-5098 593,-5098"/>
+<text text-anchor="start" x="604" y="-5102.67" font-family="Times Roman,serif" font-size="10.00">GTTTC</text>
+</g>
+<!-- 24,1->24,2 -->
+<g id="edge280" class="edge"><title>24,1->24,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-5113.53C540.501,-5113.25 550.748,-5113.18 560.703,-5113.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-5116.82 570.933,-5113.52 561.007,-5109.82 560.864,-5116.82"/>
+</g>
+<!-- 23,3 -->
+<g id="node52" class="node"><title>23,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-4725" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-4736.17" font-family="Times Roman,serif" font-size="10.00">23,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-4717 593,-4731 644,-4731 644,-4717 593,-4717"/>
+<text text-anchor="start" x="603.5" y="-4721.67" font-family="Times Roman,serif" font-size="10.00">TTCAC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-4703 593,-4717 644,-4717 644,-4703 593,-4703"/>
+<text text-anchor="start" x="601.5" y="-4707.67" font-family="Times Roman,serif" font-size="10.00">GTGAA</text>
+</g>
+<!-- 24,1->23,3 -->
+<g id="edge282" class="edge"><title>24,1->23,3</title>
+<path fill="none" stroke="#06a2cb" d="M515.6,-5092.91C528.303,-5082.03 540,-5072 540,-5072 540,-5072 586.676,-4864.35 607.814,-4770.32"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="611.241,-4771.03 610.019,-4760.5 604.411,-4769.49 611.241,-4771.03"/>
+</g>
+<!-- 7,2 -->
+<g id="node90" class="node"><title>7,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-4629" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-4640.17" font-family="Times Roman,serif" font-size="10.00">7,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-4621 596,-4635 641,-4635 641,-4621 596,-4621"/>
+<text text-anchor="start" x="603" y="-4625.67" font-family="Times Roman,serif" font-size="10.00">TTCAG</text>
+<polygon fill="#218559" stroke="#218559" points="596,-4607 596,-4621 641,-4621 641,-4607 596,-4607"/>
+<text text-anchor="start" x="601.5" y="-4611.67" font-family="Times Roman,serif" font-size="10.00">CTGAA</text>
+</g>
+<!-- 24,1->7,2 -->
+<g id="edge286" class="edge"><title>24,1->7,2</title>
+<path fill="none" stroke="#06a2cb" d="M515.6,-5092.91C528.303,-5082.03 540,-5072 540,-5072 540,-5072 552,-4898 552,-4898 552,-4898 562,-4677 562,-4677 562,-4677 569.944,-4670.19 579.849,-4661.7"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="582.391,-4664.13 587.705,-4654.97 577.835,-4658.82 582.391,-4664.13"/>
+</g>
+<!-- 8,1 -->
+<g id="node104" class="node"><title>8,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-5024" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="330.5" y="-5035.17" font-family="Times Roman,serif" font-size="10.00">8,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="328,-5016 328,-5030 373,-5030 373,-5016 328,-5016"/>
+<text text-anchor="start" x="333.5" y="-5020.67" font-family="Times Roman,serif" font-size="10.00">CTGAA</text>
+<polygon fill="#218559" stroke="#218559" points="328,-5002 328,-5016 373,-5016 373,-5002 328,-5002"/>
+<text text-anchor="start" x="335" y="-5006.67" font-family="Times Roman,serif" font-size="10.00">TTCAG</text>
+</g>
+<!-- 24,1->8,1 -->
+<g id="edge288" class="edge"><title>24,1->8,1</title>
+<path fill="none" stroke="#218559" d="M445.233,-5098.91C429.962,-5090.6 416,-5083 416,-5083 416,-5083 402.293,-5070.75 387.372,-5057.41"/>
+<polygon fill="#218559" stroke="#218559" points="389.313,-5054.45 379.525,-5050.39 384.648,-5059.67 389.313,-5054.45"/>
+</g>
+<!-- 17,1 -->
+<g id="node139" class="node"><title>17,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-3948" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-3959.17" font-family="Times Roman,serif" font-size="10.00">17,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-3940 325,-3954 376,-3954 376,-3940 325,-3940"/>
+<text text-anchor="start" x="333" y="-3944.67" font-family="Times Roman,serif" font-size="10.00">GAAAC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-3926 325,-3940 376,-3940 376,-3926 325,-3926"/>
+<text text-anchor="start" x="336" y="-3930.67" font-family="Times Roman,serif" font-size="10.00">GTTTC</text>
+</g>
+<!-- 24,1->17,1 -->
+<g id="edge278" class="edge"><title>24,1->17,1</title>
+<path fill="none" stroke="#dd1e2f" d="M452.4,-5092.91C439.697,-5082.03 428,-5072 428,-5072 428,-5072 418,-3850 418,-3850 418,-3850 416,-3850 416,-3850 416,-3850 395.53,-3880.4 377.39,-3907.33"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="374.294,-3905.66 371.611,-3915.91 380.1,-3909.57 374.294,-3905.66"/>
+</g>
+<!-- 19,3 -->
+<g id="node151" class="node"><title>19,3</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-5216" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-5227.17" font-family="Times Roman,serif" font-size="10.00">19,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-5208 325,-5222 376,-5222 376,-5208 325,-5208"/>
+<text text-anchor="start" x="334.5" y="-5212.67" font-family="Times Roman,serif" font-size="10.00">TTGAA</text>
+<polygon fill="#218559" stroke="#218559" points="325,-5194 325,-5208 376,-5208 376,-5194 325,-5194"/>
+<text text-anchor="start" x="335" y="-5198.67" font-family="Times Roman,serif" font-size="10.00">TTCAA</text>
+</g>
+<!-- 24,1->19,3 -->
+<g id="edge290" class="edge"><title>24,1->19,3</title>
+<path fill="none" stroke="#218559" d="M449.317,-5144.85C432.127,-5157.16 411.205,-5172.15 393.005,-5185.19"/>
+<polygon fill="#218559" stroke="#218559" points="390.948,-5182.36 384.857,-5191.03 395.025,-5188.05 390.948,-5182.36"/>
+</g>
+<!-- 18,4 -->
+<g id="node157" class="node"><title>18,4</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-4463" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-4474.17" font-family="Times Roman,serif" font-size="10.00">18,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-4455 593,-4469 644,-4469 644,-4455 593,-4455"/>
+<text text-anchor="start" x="603" y="-4459.67" font-family="Times Roman,serif" font-size="10.00">TTCAA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-4441 593,-4455 644,-4455 644,-4441 593,-4441"/>
+<text text-anchor="start" x="602.5" y="-4445.67" font-family="Times Roman,serif" font-size="10.00">TTGAA</text>
+</g>
+<!-- 24,1->18,4 -->
+<g id="edge284" class="edge"><title>24,1->18,4</title>
+<path fill="none" stroke="#06a2cb" d="M515.6,-5092.91C528.303,-5082.03 540,-5072 540,-5072 540,-5072 550,-4876 550,-4876 550,-4876 552,-4843 552,-4843 552,-4843 562,-4581 562,-4581 562,-4581 581.437,-4540.04 597.409,-4506.39"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="600.677,-4507.67 601.802,-4497.13 594.353,-4504.66 600.677,-4507.67"/>
+</g>
+<!-- 24,2->24,1 -->
+<g id="edge300" class="edge"><title>24,2->24,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-5126.48C561.29,-5126.75 551.041,-5126.82 541.091,-5126.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-5123.18 530.867,-5126.47 540.792,-5130.18 540.937,-5123.18"/>
+</g>
+<!-- 24,3 -->
+<g id="node17" class="node"><title>24,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-5120" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-5131.17" font-family="Times Roman,serif" font-size="10.00">24,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-5112 727,-5126 778,-5126 778,-5112 727,-5112"/>
+<text text-anchor="start" x="736" y="-5116.67" font-family="Times Roman,serif" font-size="10.00">AAACT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-5098 727,-5112 778,-5112 778,-5098 727,-5098"/>
+<text text-anchor="start" x="737.5" y="-5102.67" font-family="Times Roman,serif" font-size="10.00">AGTTT</text>
+</g>
+<!-- 24,2->24,3 -->
+<g id="edge294" class="edge"><title>24,2->24,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-5113.53C674.501,-5113.25 684.748,-5113.18 694.703,-5113.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-5116.82 704.933,-5113.52 695.007,-5109.82 694.864,-5116.82"/>
+</g>
+<!-- 25,1 -->
+<g id="node20" class="node"><title>25,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1170" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1181.17" font-family="Times Roman,serif" font-size="10.00">25,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1162 593,-1176 644,-1176 644,-1162 593,-1162"/>
+<text text-anchor="start" x="602" y="-1166.67" font-family="Times Roman,serif" font-size="10.00">AAACT</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1148 593,-1162 644,-1162 644,-1148 593,-1148"/>
+<text text-anchor="start" x="603.5" y="-1152.67" font-family="Times Roman,serif" font-size="10.00">AGTTT</text>
+</g>
+<!-- 24,2->25,1 -->
+<g id="edge292" class="edge"><title>24,2->25,1</title>
+<path fill="none" stroke="#dd1e2f" d="M586.07,-5092.84C568.813,-5078.15 551,-5063 551,-5063 551,-5063 551,-1501 551,-1501 551,-1501 590.35,-1306.6 608.737,-1215.76"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="612.213,-1216.23 610.766,-1205.74 605.352,-1214.84 612.213,-1216.23"/>
+</g>
+<!-- 7,1 -->
+<g id="node89" class="node"><title>7,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-4629" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-4640.17" font-family="Times Roman,serif" font-size="10.00">7,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-4621 462,-4635 507,-4635 507,-4621 462,-4621"/>
+<text text-anchor="start" x="470" y="-4625.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+<polygon fill="#218559" stroke="#218559" points="462,-4607 462,-4621 507,-4621 507,-4607 462,-4607"/>
+<text text-anchor="start" x="467.5" y="-4611.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+</g>
+<!-- 24,2->7,1 -->
+<g id="edge296" class="edge"><title>24,2->7,1</title>
+<path fill="none" stroke="#06a2cb" d="M586.4,-5092.91C573.697,-5082.03 562,-5072 562,-5072 562,-5072 552,-4365 552,-4365 552,-4365 550,-4365 550,-4365 550,-4365 540,-4579 540,-4579 540,-4579 531.629,-4586.47 521.36,-4595.64"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="518.768,-4593.26 513.64,-4602.54 523.43,-4598.49 518.768,-4593.26"/>
+</g>
+<!-- 19,4 -->
+<g id="node152" class="node"><title>19,4</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5216" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-5227.17" font-family="Times Roman,serif" font-size="10.00">19,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-5208 459,-5222 510,-5222 510,-5208 459,-5208"/>
+<text text-anchor="start" x="467.5" y="-5212.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-5194 459,-5208 510,-5208 510,-5194 459,-5194"/>
+<text text-anchor="start" x="470" y="-5198.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+</g>
+<!-- 24,2->19,4 -->
+<g id="edge298" class="edge"><title>24,2->19,4</title>
+<path fill="none" stroke="#218559" d="M599.965,-5153.61C580.424,-5190.03 552,-5243 552,-5243 552,-5243 550,-5243 550,-5243 550,-5243 544,-5240.55 535.618,-5237.12"/>
+<polygon fill="#218559" stroke="#218559" points="536.753,-5233.8 526.172,-5233.25 534.103,-5240.28 536.753,-5233.8"/>
+</g>
+<!-- 24,3->24,2 -->
+<g id="edge306" class="edge"><title>24,3->24,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-5126.48C695.29,-5126.75 685.041,-5126.82 675.091,-5126.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-5123.18 664.867,-5126.47 674.792,-5130.18 674.937,-5123.18"/>
+</g>
+<!-- 24,4 -->
+<g id="node18" class="node"><title>24,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-5120" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-5131.17" font-family="Times Roman,serif" font-size="10.00">24,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-5112 861,-5126 912,-5126 912,-5112 861,-5112"/>
+<text text-anchor="start" x="870.5" y="-5116.67" font-family="Times Roman,serif" font-size="10.00">AACTA</text>
+<polygon fill="#218559" stroke="#218559" points="861,-5098 861,-5112 912,-5112 912,-5098 861,-5098"/>
+<text text-anchor="start" x="872" y="-5102.67" font-family="Times Roman,serif" font-size="10.00">TAGTT</text>
+</g>
+<!-- 24,3->24,4 -->
+<g id="edge302" class="edge"><title>24,3->24,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-5113.53C808.501,-5113.25 818.748,-5113.18 828.703,-5113.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-5116.82 838.933,-5113.52 829.007,-5109.82 828.864,-5116.82"/>
+</g>
+<!-- 23,1 -->
+<g id="node50" class="node"><title>23,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-4725" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-4736.17" font-family="Times Roman,serif" font-size="10.00">23,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-4717 325,-4731 376,-4731 376,-4717 325,-4717"/>
+<text text-anchor="start" x="336" y="-4721.67" font-family="Times Roman,serif" font-size="10.00">GTTTC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-4703 325,-4717 376,-4717 376,-4703 325,-4703"/>
+<text text-anchor="start" x="333" y="-4707.67" font-family="Times Roman,serif" font-size="10.00">GAAAC</text>
+</g>
+<!-- 24,3->23,1 -->
+<g id="edge304" class="edge"><title>24,3->23,1</title>
+<path fill="none" stroke="#06a2cb" d="M720.4,-5092.91C707.697,-5082.03 696,-5072 696,-5072 696,-5072 674,-3900 674,-3900 674,-3900 562,-3900 562,-3900 562,-3900 540,-4026 540,-4026 540,-4026 428,-4066 428,-4066 428,-4066 418,-4240 418,-4240 418,-4240 398,-4511 398,-4511 398,-4511 374.399,-4616.22 360.296,-4679.1"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="356.808,-4678.66 358.034,-4689.18 363.638,-4680.19 356.808,-4678.66"/>
+</g>
+<!-- 24,4->24,3 -->
+<g id="edge310" class="edge"><title>24,4->24,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-5126.48C829.29,-5126.75 819.041,-5126.82 809.091,-5126.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-5123.18 798.867,-5126.47 808.792,-5130.18 808.937,-5123.18"/>
+</g>
+<!-- 25,3 -->
+<g id="node22" class="node"><title>25,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1170" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1181.17" font-family="Times Roman,serif" font-size="10.00">25,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1162 861,-1176 912,-1176 912,-1162 861,-1162"/>
+<text text-anchor="start" x="871.5" y="-1166.67" font-family="Times Roman,serif" font-size="10.00">ACTAT</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1148 861,-1162 912,-1162 912,-1148 861,-1148"/>
+<text text-anchor="start" x="871.5" y="-1152.67" font-family="Times Roman,serif" font-size="10.00">ATAGT</text>
+</g>
+<!-- 24,4->25,3 -->
+<g id="edge308" class="edge"><title>24,4->25,3</title>
+<path fill="none" stroke="#dd1e2f" d="M880.687,-5084.15C864.84,-4977.25 819,-4668 819,-4668 819,-4668 819,-1405 819,-1405 819,-1405 853.684,-1283.35 873.142,-1215.1"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="876.521,-1216.01 875.897,-1205.44 869.789,-1214.09 876.521,-1216.01"/>
+</g>
+<!-- 25,1->24,2 -->
+<g id="edge716" class="edge"><title>25,1->24,2</title>
+<path fill="none" stroke="#218559" d="M610.766,-1205.74C593.441,-1291.33 551,-1501 551,-1501 551,-1501 551,-5063 551,-5063 551,-5063 563.917,-5073.99 578.409,-5086.32"/>
+<polygon fill="#218559" stroke="#218559" points="576.185,-5089.02 586.07,-5092.84 580.721,-5083.69 576.185,-5089.02"/>
+</g>
+<!-- 25,2 -->
+<g id="node21" class="node"><title>25,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1170" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1181.17" font-family="Times Roman,serif" font-size="10.00">25,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1162 727,-1176 778,-1176 778,-1162 727,-1162"/>
+<text text-anchor="start" x="736.5" y="-1166.67" font-family="Times Roman,serif" font-size="10.00">AACTA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1148 727,-1162 778,-1162 778,-1148 727,-1148"/>
+<text text-anchor="start" x="738" y="-1152.67" font-family="Times Roman,serif" font-size="10.00">TAGTT</text>
+</g>
+<!-- 25,1->25,2 -->
+<g id="edge714" class="edge"><title>25,1->25,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1163.53C674.501,-1163.25 684.748,-1163.18 694.703,-1163.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1166.82 704.933,-1163.52 695.007,-1159.82 694.864,-1166.82"/>
+</g>
+<!-- 25,2->25,1 -->
+<g id="edge722" class="edge"><title>25,2->25,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-1176.48C695.29,-1176.75 685.041,-1176.82 675.091,-1176.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1173.18 664.867,-1176.47 674.792,-1180.18 674.937,-1173.18"/>
+</g>
+<!-- 25,2->25,3 -->
+<g id="edge718" class="edge"><title>25,2->25,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1163.53C808.501,-1163.25 818.748,-1163.18 828.703,-1163.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1166.82 838.933,-1163.52 829.007,-1159.82 828.864,-1166.82"/>
+</g>
+<!-- 26,4 -->
+<g id="node28" class="node"><title>26,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2402" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-2413.17" font-family="Times Roman,serif" font-size="10.00">26,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-2394 861,-2408 912,-2408 912,-2394 861,-2394"/>
+<text text-anchor="start" x="871.5" y="-2398.67" font-family="Times Roman,serif" font-size="10.00">ATAGT</text>
+<polygon fill="#218559" stroke="#218559" points="861,-2380 861,-2394 912,-2394 912,-2380 861,-2380"/>
+<text text-anchor="start" x="871.5" y="-2384.67" font-family="Times Roman,serif" font-size="10.00">ACTAT</text>
+</g>
+<!-- 25,2->26,4 -->
+<g id="edge720" class="edge"><title>25,2->26,4</title>
+<path fill="none" stroke="#ebb035" d="M758.261,-1206C772.874,-1290.02 808,-1492 808,-1492 808,-1492 820,-1894 820,-1894 820,-1894 830,-2354 830,-2354 830,-2354 837.283,-2360.24 846.596,-2368.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="844.529,-2371.06 854.4,-2374.91 849.085,-2365.75 844.529,-2371.06"/>
+</g>
+<!-- 25,3->24,4 -->
+<g id="edge726" class="edge"><title>25,3->24,4</title>
+<path fill="none" stroke="#218559" d="M875.897,-1205.44C857.18,-1271.09 819,-1405 819,-1405 819,-1405 819,-4668 819,-4668 819,-4668 862.193,-4959.39 879.219,-5074.25"/>
+<polygon fill="#218559" stroke="#218559" points="875.758,-5074.78 880.687,-5084.15 882.682,-5073.75 875.758,-5074.78"/>
+</g>
+<!-- 25,3->25,2 -->
+<g id="edge728" class="edge"><title>25,3->25,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-1176.48C829.29,-1176.75 819.041,-1176.82 809.091,-1176.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1173.18 798.867,-1176.47 808.792,-1180.18 808.937,-1173.18"/>
+</g>
+<!-- 25,4 -->
+<g id="node23" class="node"><title>25,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1170" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-1181.17" font-family="Times Roman,serif" font-size="10.00">25,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-1162 995,-1176 1046,-1176 1046,-1162 995,-1162"/>
+<text text-anchor="start" x="1006.5" y="-1166.67" font-family="Times Roman,serif" font-size="10.00">CTATT</text>
+<polygon fill="#218559" stroke="#218559" points="995,-1148 995,-1162 1046,-1162 1046,-1148 995,-1148"/>
+<text text-anchor="start" x="1004.5" y="-1152.67" font-family="Times Roman,serif" font-size="10.00">AATAG</text>
+</g>
+<!-- 25,3->25,4 -->
+<g id="edge724" class="edge"><title>25,3->25,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-1163.53C942.501,-1163.25 952.748,-1163.18 962.703,-1163.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-1166.82 972.933,-1163.52 963.007,-1159.82 962.864,-1166.82"/>
+</g>
+<!-- 25,4->25,3 -->
+<g id="edge732" class="edge"><title>25,4->25,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-1176.48C963.29,-1176.75 953.041,-1176.82 943.091,-1176.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-1173.18 932.867,-1176.47 942.792,-1180.18 942.937,-1173.18"/>
+</g>
+<!-- 26,2 -->
+<g id="node26" class="node"><title>26,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-2402" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-2413.17" font-family="Times Roman,serif" font-size="10.00">26,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-2394 593,-2408 644,-2408 644,-2394 593,-2394"/>
+<text text-anchor="start" x="604" y="-2398.67" font-family="Times Roman,serif" font-size="10.00">TAATA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-2380 593,-2394 644,-2394 644,-2380 593,-2380"/>
+<text text-anchor="start" x="605" y="-2384.67" font-family="Times Roman,serif" font-size="10.00">TATTA</text>
+</g>
+<!-- 25,4->26,2 -->
+<g id="edge730" class="edge"><title>25,4->26,2</title>
+<path fill="none" stroke="#ebb035" d="M1007.69,-1205.13C988.09,-1261.04 952,-1364 952,-1364 952,-1364 942,-1814 942,-1814 942,-1814 830,-1848 830,-1848 830,-1848 818,-1892 818,-1892 818,-1892 808,-2054 808,-2054 808,-2054 696,-2092 696,-2092 696,-2092 651.064,-2270.59 629.406,-2356.67"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="625.994,-2355.89 626.948,-2366.44 632.782,-2357.6 625.994,-2355.89"/>
+</g>
+<!-- 26,1 -->
+<g id="node25" class="node"><title>26,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-2402" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-2413.17" font-family="Times Roman,serif" font-size="10.00">26,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-2394 459,-2408 510,-2408 510,-2394 459,-2394"/>
+<text text-anchor="start" x="469.5" y="-2398.67" font-family="Times Roman,serif" font-size="10.00">GTAAT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-2380 459,-2394 510,-2394 510,-2380 459,-2380"/>
+<text text-anchor="start" x="470" y="-2384.67" font-family="Times Roman,serif" font-size="10.00">ATTAC</text>
+</g>
+<!-- 26,1->26,2 -->
+<g id="edge312" class="edge"><title>26,1->26,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-2395.53C540.501,-2395.25 550.748,-2395.18 560.703,-2395.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-2398.82 570.933,-2395.52 561.007,-2391.82 560.864,-2398.82"/>
+</g>
+<!-- 27,3 -->
+<g id="node32" class="node"><title>27,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-2836" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-2847.17" font-family="Times Roman,serif" font-size="10.00">27,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-2828 593,-2842 644,-2842 644,-2828 593,-2828"/>
+<text text-anchor="start" x="603" y="-2832.67" font-family="Times Roman,serif" font-size="10.00">TTACG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-2814 593,-2828 644,-2828 644,-2814 593,-2814"/>
+<text text-anchor="start" x="602" y="-2818.67" font-family="Times Roman,serif" font-size="10.00">CGTAA</text>
+</g>
+<!-- 26,1->27,3 -->
+<g id="edge314" class="edge"><title>26,1->27,3</title>
+<path fill="none" stroke="#06a2cb" d="M491.198,-2437.62C510.508,-2533.18 562,-2788 562,-2788 562,-2788 569.283,-2794.24 578.596,-2802.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="576.529,-2805.06 586.4,-2808.91 581.085,-2799.75 576.529,-2805.06"/>
+</g>
+<!-- 26,2->25,4 -->
+<g id="edge318" class="edge"><title>26,2->25,4</title>
+<path fill="none" stroke="#ebb035" d="M624.938,-2366.26C641.884,-2278.96 684,-2062 684,-2062 684,-2062 808,-2022 808,-2022 808,-2022 818,-1826 818,-1826 818,-1826 830,-1820 830,-1820 830,-1820 942,-1780 942,-1780 942,-1780 952,-1268 952,-1268 952,-1268 973.274,-1237.34 992.023,-1210.32"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="994.909,-1212.3 997.734,-1202.09 989.158,-1208.31 994.909,-1212.3"/>
+</g>
+<!-- 26,2->26,1 -->
+<g id="edge320" class="edge"><title>26,2->26,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-2408.48C561.29,-2408.75 551.041,-2408.82 541.091,-2408.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-2405.18 530.867,-2408.47 540.792,-2412.18 540.937,-2405.18"/>
+</g>
+<!-- 26,3 -->
+<g id="node27" class="node"><title>26,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2402" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2413.17" font-family="Times Roman,serif" font-size="10.00">26,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2394 727,-2408 778,-2408 778,-2394 727,-2394"/>
+<text text-anchor="start" x="736.5" y="-2398.67" font-family="Times Roman,serif" font-size="10.00">AATAG</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2380 727,-2394 778,-2394 778,-2380 727,-2380"/>
+<text text-anchor="start" x="738.5" y="-2384.67" font-family="Times Roman,serif" font-size="10.00">CTATT</text>
+</g>
+<!-- 26,2->26,3 -->
+<g id="edge316" class="edge"><title>26,2->26,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-2395.53C674.501,-2395.25 684.748,-2395.18 694.703,-2395.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-2398.82 704.933,-2395.52 695.007,-2391.82 694.864,-2398.82"/>
+</g>
+<!-- 26,3->26,2 -->
+<g id="edge326" class="edge"><title>26,3->26,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-2408.48C695.29,-2408.75 685.041,-2408.82 675.091,-2408.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-2405.18 664.867,-2408.47 674.792,-2412.18 674.937,-2405.18"/>
+</g>
+<!-- 26,3->26,4 -->
+<g id="edge322" class="edge"><title>26,3->26,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-2395.53C808.501,-2395.25 818.748,-2395.18 828.703,-2395.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-2398.82 838.933,-2395.52 829.007,-2391.82 828.864,-2398.82"/>
+</g>
+<!-- 27,1 -->
+<g id="node30" class="node"><title>27,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-2836" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-2847.17" font-family="Times Roman,serif" font-size="10.00">27,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-2828 325,-2842 376,-2842 376,-2828 325,-2828"/>
+<text text-anchor="start" x="337" y="-2832.67" font-family="Times Roman,serif" font-size="10.00">TATTA</text>
+<polygon fill="#218559" stroke="#218559" points="325,-2814 325,-2828 376,-2828 376,-2814 325,-2814"/>
+<text text-anchor="start" x="336" y="-2818.67" font-family="Times Roman,serif" font-size="10.00">TAATA</text>
+</g>
+<!-- 26,3->27,1 -->
+<g id="edge324" class="edge"><title>26,3->27,1</title>
+<path fill="none" stroke="#06a2cb" d="M720.4,-2429.09C707.697,-2439.97 696,-2450 696,-2450 696,-2450 686,-2566 686,-2566 686,-2566 480.412,-2731.2 390.866,-2803.16"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="388.432,-2800.63 382.829,-2809.62 392.816,-2806.08 388.432,-2800.63"/>
+</g>
+<!-- 26,4->25,2 -->
+<g id="edge328" class="edge"><title>26,4->25,2</title>
+<path fill="none" stroke="#ebb035" d="M854.4,-2374.91C841.697,-2364.03 830,-2354 830,-2354 830,-2354 808,-1492 808,-1492 808,-1492 775.499,-1305.12 760.017,-1216.1"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="763.423,-1215.25 758.261,-1206 756.526,-1216.45 763.423,-1215.25"/>
+</g>
+<!-- 26,4->26,3 -->
+<g id="edge330" class="edge"><title>26,4->26,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-2408.48C829.29,-2408.75 819.041,-2408.82 809.091,-2408.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-2405.18 798.867,-2408.47 808.792,-2412.18 808.937,-2405.18"/>
+</g>
+<!-- 27,1->26,3 -->
+<g id="edge736" class="edge"><title>27,1->26,3</title>
+<path fill="none" stroke="#06a2cb" d="M366.925,-2802.15C389.865,-2756.27 428,-2680 428,-2680 428,-2680 696,-2450 696,-2450 696,-2450 703.283,-2443.76 712.596,-2435.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="715.085,-2438.25 720.4,-2429.09 710.529,-2432.94 715.085,-2438.25"/>
+</g>
+<!-- 27,2 -->
+<g id="node31" class="node"><title>27,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-2836" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-2847.17" font-family="Times Roman,serif" font-size="10.00">27,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-2828 459,-2842 510,-2842 510,-2828 459,-2828"/>
+<text text-anchor="start" x="470" y="-2832.67" font-family="Times Roman,serif" font-size="10.00">ATTAC</text>
+<polygon fill="#218559" stroke="#218559" points="459,-2814 459,-2828 510,-2828 510,-2814 459,-2814"/>
+<text text-anchor="start" x="469.5" y="-2818.67" font-family="Times Roman,serif" font-size="10.00">GTAAT</text>
+</g>
+<!-- 27,1->27,2 -->
+<g id="edge734" class="edge"><title>27,1->27,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-2829.53C406.501,-2829.25 416.748,-2829.18 426.703,-2829.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-2832.82 436.933,-2829.52 427.007,-2825.82 426.864,-2832.82"/>
+</g>
+<!-- 27,2->27,1 -->
+<g id="edge742" class="edge"><title>27,2->27,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-2842.48C427.29,-2842.75 417.041,-2842.82 407.091,-2842.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-2839.18 396.867,-2842.47 406.792,-2846.18 406.937,-2839.18"/>
+</g>
+<!-- 27,2->27,3 -->
+<g id="edge740" class="edge"><title>27,2->27,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-2829.53C540.501,-2829.25 550.748,-2829.18 560.703,-2829.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-2832.82 570.933,-2829.52 561.007,-2825.82 560.864,-2832.82"/>
+</g>
+<!-- 28,1 -->
+<g id="node55" class="node"><title>28,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-2740" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-2751.17" font-family="Times Roman,serif" font-size="10.00">28,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-2732 593,-2746 644,-2746 644,-2732 593,-2732"/>
+<text text-anchor="start" x="603" y="-2736.67" font-family="Times Roman,serif" font-size="10.00">TTACG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-2718 593,-2732 644,-2732 644,-2718 593,-2718"/>
+<text text-anchor="start" x="602" y="-2722.67" font-family="Times Roman,serif" font-size="10.00">CGTAA</text>
+</g>
+<!-- 27,2->28,1 -->
+<g id="edge738" class="edge"><title>27,2->28,1</title>
+<path fill="none" stroke="#dd1e2f" d="M523.949,-2816.03C538.751,-2808.62 552,-2802 552,-2802 552,-2802 562,-2788 562,-2788 562,-2788 569.283,-2781.76 578.596,-2773.78"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="581.085,-2776.25 586.4,-2767.09 576.529,-2770.94 581.085,-2776.25"/>
+</g>
+<!-- 27,3->26,1 -->
+<g id="edge748" class="edge"><title>27,3->26,1</title>
+<path fill="none" stroke="#06a2cb" d="M586.4,-2808.91C573.697,-2798.03 562,-2788 562,-2788 562,-2788 550,-2746 550,-2746 550,-2746 510.777,-2541.56 492.805,-2447.89"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="496.198,-2447 490.876,-2437.84 489.323,-2448.32 496.198,-2447"/>
+</g>
+<!-- 27,3->27,2 -->
+<g id="edge750" class="edge"><title>27,3->27,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-2842.48C561.29,-2842.75 551.041,-2842.82 541.091,-2842.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-2839.18 530.867,-2842.47 540.792,-2846.18 540.937,-2839.18"/>
+</g>
+<!-- 27,4 -->
+<g id="node33" class="node"><title>27,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2836" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2847.17" font-family="Times Roman,serif" font-size="10.00">27,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2828 727,-2842 778,-2842 778,-2828 727,-2828"/>
+<text text-anchor="start" x="737" y="-2832.67" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2814 727,-2828 778,-2828 778,-2814 727,-2814"/>
+<text text-anchor="start" x="736.5" y="-2818.67" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+</g>
+<!-- 27,3->27,4 -->
+<g id="edge746" class="edge"><title>27,3->27,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-2829.53C674.501,-2829.25 684.748,-2829.18 694.703,-2829.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-2832.82 704.933,-2829.52 695.007,-2825.82 694.864,-2832.82"/>
+</g>
+<!-- 22,1 -->
+<g id="node45" class="node"><title>22,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3234" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-3245.17" font-family="Times Roman,serif" font-size="10.00">22,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-3226 459,-3240 510,-3240 510,-3226 459,-3226"/>
+<text text-anchor="start" x="469" y="-3230.67" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-3212 459,-3226 510,-3226 510,-3212 459,-3212"/>
+<text text-anchor="start" x="468.5" y="-3216.67" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+</g>
+<!-- 27,3->22,1 -->
+<g id="edge744" class="edge"><title>27,3->22,1</title>
+<path fill="none" stroke="#dd1e2f" d="M605.012,-2871.02C588.469,-2915.63 562,-2987 562,-2987 562,-2987 540,-3083 540,-3083 540,-3083 517.026,-3144.95 500.508,-3189.49"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="497.184,-3188.38 496.988,-3198.98 503.747,-3190.82 497.184,-3188.38"/>
+</g>
+<!-- 27,4->27,3 -->
+<g id="edge758" class="edge"><title>27,4->27,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-2842.48C695.29,-2842.75 685.041,-2842.82 675.091,-2842.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-2839.18 664.867,-2842.47 674.792,-2846.18 674.937,-2839.18"/>
+</g>
+<!-- 21,4 -->
+<g id="node43" class="node"><title>21,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3649" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-3660.17" font-family="Times Roman,serif" font-size="10.00">21,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-3641 861,-3655 912,-3655 912,-3641 861,-3641"/>
+<text text-anchor="start" x="869.5" y="-3645.67" font-family="Times Roman,serif" font-size="10.00">ACGTG</text>
+<polygon fill="#218559" stroke="#218559" points="861,-3627 861,-3641 912,-3641 912,-3627 861,-3627"/>
+<text text-anchor="start" x="870" y="-3631.67" font-family="Times Roman,serif" font-size="10.00">CACGT</text>
+</g>
+<!-- 27,4->21,4 -->
+<g id="edge754" class="edge"><title>27,4->21,4</title>
+<path fill="none" stroke="#dd1e2f" d="M764.988,-2871.02C781.531,-2915.63 808,-2987 808,-2987 808,-2987 820,-3083 820,-3083 820,-3083 830,-3531 830,-3531 830,-3531 849.437,-3571.96 865.409,-3605.61"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="862.353,-3607.34 869.802,-3614.87 868.677,-3604.33 862.353,-3607.34"/>
+</g>
+<!-- 22,2 -->
+<g id="node46" class="node"><title>22,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3234" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-3245.17" font-family="Times Roman,serif" font-size="10.00">22,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-3226 593,-3240 644,-3240 644,-3226 593,-3226"/>
+<text text-anchor="start" x="601.5" y="-3230.67" font-family="Times Roman,serif" font-size="10.00">ACGTG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-3212 593,-3226 644,-3226 644,-3212 593,-3212"/>
+<text text-anchor="start" x="602" y="-3216.67" font-family="Times Roman,serif" font-size="10.00">CACGT</text>
+</g>
+<!-- 27,4->22,2 -->
+<g id="edge756" class="edge"><title>27,4->22,2</title>
+<path fill="none" stroke="#dd1e2f" d="M739.012,-2871.02C722.469,-2915.63 696,-2987 696,-2987 696,-2987 674,-3179 674,-3179 674,-3179 665.159,-3187.68 654.502,-3198.15"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="651.994,-3195.71 647.312,-3205.21 656.899,-3200.7 651.994,-3195.71"/>
+</g>
+<!-- 28,3 -->
+<g id="node57" class="node"><title>28,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2740" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-2751.17" font-family="Times Roman,serif" font-size="10.00">28,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-2732 861,-2746 912,-2746 912,-2732 861,-2732"/>
+<text text-anchor="start" x="870.5" y="-2736.67" font-family="Times Roman,serif" font-size="10.00">ACGTC</text>
+<polygon fill="#218559" stroke="#218559" points="861,-2718 861,-2732 912,-2732 912,-2718 861,-2718"/>
+<text text-anchor="start" x="869.5" y="-2722.67" font-family="Times Roman,serif" font-size="10.00">GACGT</text>
+</g>
+<!-- 27,4->28,3 -->
+<g id="edge752" class="edge"><title>27,4->28,3</title>
+<path fill="none" stroke="#dd1e2f" d="M790.767,-2814.91C806.038,-2806.6 820,-2799 820,-2799 820,-2799 832.918,-2787.45 847.324,-2774.57"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="849.81,-2777.05 854.933,-2767.77 845.145,-2771.83 849.81,-2777.05"/>
+</g>
+<!-- 20,1 -->
+<g id="node35" class="node"><title>20,1</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-4114" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="193.5" y="-4125.17" font-family="Times Roman,serif" font-size="10.00">20,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="191,-4106 191,-4120 242,-4120 242,-4106 191,-4106"/>
+<text text-anchor="start" x="201.5" y="-4110.67" font-family="Times Roman,serif" font-size="10.00">TCAAT</text>
+<polygon fill="#218559" stroke="#218559" points="191,-4092 191,-4106 242,-4106 242,-4092 191,-4092"/>
+<text text-anchor="start" x="201" y="-4096.67" font-family="Times Roman,serif" font-size="10.00">ATTGA</text>
+</g>
+<!-- 20,2 -->
+<g id="node36" class="node"><title>20,2</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-4114" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-4125.17" font-family="Times Roman,serif" font-size="10.00">20,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-4106 325,-4120 376,-4120 376,-4106 325,-4106"/>
+<text text-anchor="start" x="335" y="-4110.67" font-family="Times Roman,serif" font-size="10.00">CAATA</text>
+<polygon fill="#218559" stroke="#218559" points="325,-4092 325,-4106 376,-4106 376,-4092 325,-4092"/>
+<text text-anchor="start" x="336" y="-4096.67" font-family="Times Roman,serif" font-size="10.00">TATTG</text>
+</g>
+<!-- 20,1->20,2 -->
+<g id="edge232" class="edge"><title>20,1->20,2</title>
+<path fill="none" stroke="#dd1e2f" d="M262.867,-4107.53C272.501,-4107.25 282.748,-4107.18 292.703,-4107.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="292.864,-4110.82 302.933,-4107.52 293.007,-4103.82 292.864,-4110.82"/>
+</g>
+<!-- 20,1->19,3 -->
+<g id="edge234" class="edge"><title>20,1->19,3</title>
+<path fill="none" stroke="#06a2cb" d="M237.703,-4146.23C257.603,-4175.79 284,-4215 284,-4215 284,-4215 294,-5072 294,-5072 294,-5072 316.267,-5129.26 332.719,-5171.56"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="329.557,-5173.09 336.444,-5181.14 336.081,-5170.55 329.557,-5173.09"/>
+</g>
+<!-- 20,2->20,1 -->
+<g id="edge240" class="edge"><title>20,2->20,1</title>
+<path fill="none" stroke="#218559" d="M302.933,-4120.48C293.29,-4120.75 283.041,-4120.82 273.091,-4120.68"/>
+<polygon fill="#218559" stroke="#218559" points="272.937,-4117.18 262.867,-4120.47 272.792,-4124.18 272.937,-4117.18"/>
+</g>
+<!-- 20,3 -->
+<g id="node37" class="node"><title>20,3</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-4114" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-4125.17" font-family="Times Roman,serif" font-size="10.00">20,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-4106 459,-4120 510,-4120 510,-4106 459,-4106"/>
+<text text-anchor="start" x="469" y="-4110.67" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="459,-4092 459,-4106 510,-4106 510,-4092 459,-4092"/>
+<text text-anchor="start" x="470.5" y="-4096.67" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 20,2->20,3 -->
+<g id="edge238" class="edge"><title>20,2->20,3</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-4107.53C406.501,-4107.25 416.748,-4107.18 426.703,-4107.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-4110.82 436.933,-4107.52 427.007,-4103.82 426.864,-4110.82"/>
+</g>
+<!-- 21,1 -->
+<g id="node40" class="node"><title>21,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3649" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-3660.17" font-family="Times Roman,serif" font-size="10.00">21,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-3641 459,-3655 510,-3655 510,-3641 459,-3641"/>
+<text text-anchor="start" x="469" y="-3645.67" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="459,-3627 459,-3641 510,-3641 510,-3627 459,-3627"/>
+<text text-anchor="start" x="470.5" y="-3631.67" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 20,2->21,1 -->
+<g id="edge236" class="edge"><title>20,2->21,1</title>
+<path fill="none" stroke="#dd1e2f" d="M364.013,-4079.55C378.18,-4044.72 398,-3996 398,-3996 398,-3996 449.463,-3788.35 472.769,-3694.32"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="476.192,-3695.05 475.201,-3684.5 469.398,-3693.37 476.192,-3695.05"/>
+</g>
+<!-- 20,3->20,2 -->
+<g id="edge246" class="edge"><title>20,3->20,2</title>
+<path fill="none" stroke="#218559" d="M436.933,-4120.48C427.29,-4120.75 417.041,-4120.82 407.091,-4120.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-4117.18 396.867,-4120.47 406.792,-4124.18 406.937,-4117.18"/>
+</g>
+<!-- 20,4 -->
+<g id="node38" class="node"><title>20,4</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-4114" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-4125.17" font-family="Times Roman,serif" font-size="10.00">20,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-4106 593,-4120 644,-4120 644,-4106 593,-4106"/>
+<text text-anchor="start" x="602.5" y="-4110.67" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-4092 593,-4106 644,-4106 644,-4092 593,-4092"/>
+<text text-anchor="start" x="603.5" y="-4096.67" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 20,3->20,4 -->
+<g id="edge242" class="edge"><title>20,3->20,4</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-4107.53C540.501,-4107.25 550.748,-4107.18 560.703,-4107.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-4110.82 570.933,-4107.52 561.007,-4103.82 560.864,-4110.82"/>
+</g>
+<!-- 19,1 -->
+<g id="node149" class="node"><title>19,1</title>
+<ellipse fill="none" stroke="black" cx="64" cy="-5216" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="41.5" y="-5227.17" font-family="Times Roman,serif" font-size="10.00">19,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="39,-5208 39,-5222 90,-5222 90,-5208 39,-5208"/>
+<text text-anchor="start" x="50" y="-5212.67" font-family="Times Roman,serif" font-size="10.00">TATTG</text>
+<polygon fill="#218559" stroke="#218559" points="39,-5194 39,-5208 90,-5208 90,-5194 39,-5194"/>
+<text text-anchor="start" x="49" y="-5198.67" font-family="Times Roman,serif" font-size="10.00">CAATA</text>
+</g>
+<!-- 20,3->19,1 -->
+<g id="edge244" class="edge"><title>20,3->19,1</title>
+<path fill="none" stroke="#06a2cb" d="M476.816,-4149.67C456.146,-4252.3 398,-4541 398,-4541 398,-4541 294,-4677 294,-4677 294,-4677 137.748,-5043.17 82.8196,-5171.9"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="79.4431,-5170.89 78.7374,-5181.46 85.8814,-5173.64 79.4431,-5170.89"/>
+</g>
+<!-- 20,4->20,3 -->
+<g id="edge250" class="edge"><title>20,4->20,3</title>
+<path fill="none" stroke="#218559" d="M570.933,-4120.48C561.29,-4120.75 551.041,-4120.82 541.091,-4120.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-4117.18 530.867,-4120.47 540.792,-4124.18 540.937,-4117.18"/>
+</g>
+<!-- 21,3 -->
+<g id="node42" class="node"><title>21,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3649" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-3660.17" font-family="Times Roman,serif" font-size="10.00">21,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-3641 727,-3655 778,-3655 778,-3641 727,-3641"/>
+<text text-anchor="start" x="737" y="-3645.67" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-3627 727,-3641 778,-3641 778,-3627 727,-3627"/>
+<text text-anchor="start" x="736.5" y="-3631.67" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+</g>
+<!-- 20,4->21,3 -->
+<g id="edge248" class="edge"><title>20,4->21,3</title>
+<path fill="none" stroke="#dd1e2f" d="M634.198,-4079.87C650.736,-4045.02 674,-3996 674,-3996 674,-3996 684,-3750 684,-3750 684,-3750 705.679,-3717.8 724.556,-3689.76"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727.616,-3691.48 730.297,-3681.23 721.809,-3687.58 727.616,-3691.48"/>
+</g>
+<!-- 21,1->20,2 -->
+<g id="edge664" class="edge"><title>21,1->20,2</title>
+<path fill="none" stroke="#218559" d="M475.04,-3684.44C456.575,-3757.49 416,-3918 416,-3918 416,-3918 398,-3996 398,-3996 398,-3996 381.582,-4036.36 367.95,-4069.87"/>
+<polygon fill="#218559" stroke="#218559" points="364.539,-4068.97 364.013,-4079.55 371.023,-4071.61 364.539,-4068.97"/>
+</g>
+<!-- 21,2 -->
+<g id="node41" class="node"><title>21,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3649" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-3660.17" font-family="Times Roman,serif" font-size="10.00">21,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-3641 593,-3655 644,-3655 644,-3641 593,-3641"/>
+<text text-anchor="start" x="602.5" y="-3645.67" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-3627 593,-3641 644,-3641 644,-3627 593,-3627"/>
+<text text-anchor="start" x="603.5" y="-3631.67" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 21,1->21,2 -->
+<g id="edge662" class="edge"><title>21,1->21,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-3642.53C540.501,-3642.25 550.748,-3642.18 560.703,-3642.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-3645.82 570.933,-3642.52 561.007,-3638.82 560.864,-3645.82"/>
+</g>
+<!-- 21,2->21,1 -->
+<g id="edge670" class="edge"><title>21,2->21,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-3655.48C561.29,-3655.75 551.041,-3655.82 541.091,-3655.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-3652.18 530.867,-3655.47 540.792,-3659.18 540.937,-3652.18"/>
+</g>
+<!-- 21,2->21,3 -->
+<g id="edge668" class="edge"><title>21,2->21,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-3642.53C674.501,-3642.25 684.748,-3642.18 694.703,-3642.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-3645.82 704.933,-3642.52 695.007,-3638.82 694.864,-3645.82"/>
+</g>
+<!-- 21,2->22,1 -->
+<g id="edge666" class="edge"><title>21,2->22,1</title>
+<path fill="none" stroke="#dd1e2f" d="M601.802,-3614.87C585.264,-3580.02 562,-3531 562,-3531 562,-3531 552,-3362 552,-3362 552,-3362 526.516,-3314.03 506.749,-3276.82"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="509.649,-3274.82 501.866,-3267.63 503.467,-3278.1 509.649,-3274.82"/>
+</g>
+<!-- 21,3->20,4 -->
+<g id="edge674" class="edge"><title>21,3->20,4</title>
+<path fill="none" stroke="#218559" d="M733.956,-3682.43C713.81,-3719.76 684,-3775 684,-3775 684,-3775 674,-3996 674,-3996 674,-3996 654.563,-4036.96 638.591,-4070.61"/>
+<polygon fill="#218559" stroke="#218559" points="635.323,-4069.33 634.198,-4079.87 641.647,-4072.34 635.323,-4069.33"/>
+</g>
+<!-- 21,3->21,2 -->
+<g id="edge676" class="edge"><title>21,3->21,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-3655.48C695.29,-3655.75 685.041,-3655.82 675.091,-3655.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-3652.18 664.867,-3655.47 674.792,-3659.18 674.937,-3652.18"/>
+</g>
+<!-- 21,3->21,4 -->
+<g id="edge672" class="edge"><title>21,3->21,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-3642.53C808.501,-3642.25 818.748,-3642.18 828.703,-3642.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-3645.82 838.933,-3642.52 829.007,-3638.82 828.864,-3645.82"/>
+</g>
+<!-- 21,4->27,4 -->
+<g id="edge680" class="edge"><title>21,4->27,4</title>
+<path fill="none" stroke="#218559" d="M869.802,-3614.87C853.264,-3580.02 830,-3531 830,-3531 830,-3531 820,-2915 820,-2915 820,-2915 802.13,-2894.24 784.712,-2874"/>
+<polygon fill="#218559" stroke="#218559" points="787.272,-2871.61 778.096,-2866.32 781.967,-2876.18 787.272,-2871.61"/>
+</g>
+<!-- 21,4->21,3 -->
+<g id="edge682" class="edge"><title>21,4->21,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-3655.48C829.29,-3655.75 819.041,-3655.82 809.091,-3655.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-3652.18 798.867,-3655.47 808.792,-3659.18 808.937,-3652.18"/>
+</g>
+<!-- 22,3 -->
+<g id="node47" class="node"><title>22,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3234" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-3245.17" font-family="Times Roman,serif" font-size="10.00">22,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-3226 727,-3240 778,-3240 778,-3226 727,-3226"/>
+<text text-anchor="start" x="735.5" y="-3230.67" font-family="Times Roman,serif" font-size="10.00">CGTGA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-3212 727,-3226 778,-3226 778,-3212 727,-3212"/>
+<text text-anchor="start" x="736" y="-3216.67" font-family="Times Roman,serif" font-size="10.00">TCACG</text>
+</g>
+<!-- 21,4->22,3 -->
+<g id="edge678" class="edge"><title>21,4->22,3</title>
+<path fill="none" stroke="#dd1e2f" d="M869.802,-3614.87C853.264,-3580.02 830,-3531 830,-3531 830,-3531 820,-3477 820,-3477 820,-3477 784.341,-3349.57 764.668,-3279.27"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="767.953,-3278.02 761.888,-3269.33 761.212,-3279.91 767.953,-3278.02"/>
+</g>
+<!-- 22,1->27,3 -->
+<g id="edge256" class="edge"><title>22,1->27,3</title>
+<path fill="none" stroke="#218559" d="M496.988,-3198.98C513.531,-3154.37 540,-3083 540,-3083 540,-3083 550,-2962 550,-2962 550,-2962 575.335,-2915.06 595.076,-2878.48"/>
+<polygon fill="#218559" stroke="#218559" points="598.286,-2879.9 599.956,-2869.43 592.126,-2876.57 598.286,-2879.9"/>
+</g>
+<!-- 22,1->21,2 -->
+<g id="edge258" class="edge"><title>22,1->21,2</title>
+<path fill="none" stroke="#218559" d="M500.984,-3267.72C521.125,-3307.7 552,-3369 552,-3369 552,-3369 562,-3531 562,-3531 562,-3531 581.437,-3571.96 597.409,-3605.61"/>
+<polygon fill="#218559" stroke="#218559" points="594.353,-3607.34 601.802,-3614.87 600.677,-3604.33 594.353,-3607.34"/>
+</g>
+<!-- 22,1->22,2 -->
+<g id="edge252" class="edge"><title>22,1->22,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-3227.53C540.501,-3227.25 550.748,-3227.18 560.703,-3227.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-3230.82 570.933,-3227.52 561.007,-3223.82 560.864,-3230.82"/>
+</g>
+<!-- 22,1->28,1 -->
+<g id="edge254" class="edge"><title>22,1->28,1</title>
+<path fill="none" stroke="#218559" d="M496.988,-3198.98C513.531,-3154.37 540,-3083 540,-3083 540,-3083 562,-2788 562,-2788 562,-2788 569.283,-2781.76 578.596,-2773.78"/>
+<polygon fill="#218559" stroke="#218559" points="581.085,-2776.25 586.4,-2767.09 576.529,-2770.94 581.085,-2776.25"/>
+</g>
+<!-- 22,2->27,4 -->
+<g id="edge264" class="edge"><title>22,2->27,4</title>
+<path fill="none" stroke="#218559" d="M647.312,-3205.21C660.861,-3191.9 674,-3179 674,-3179 674,-3179 684,-2962 684,-2962 684,-2962 709.335,-2915.06 729.076,-2878.48"/>
+<polygon fill="#218559" stroke="#218559" points="732.286,-2879.9 733.956,-2869.43 726.126,-2876.57 732.286,-2879.9"/>
+</g>
+<!-- 22,2->22,1 -->
+<g id="edge266" class="edge"><title>22,2->22,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-3240.48C561.29,-3240.75 551.041,-3240.82 541.091,-3240.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-3237.18 530.867,-3240.47 540.792,-3244.18 540.937,-3237.18"/>
+</g>
+<!-- 22,2->22,3 -->
+<g id="edge260" class="edge"><title>22,2->22,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-3227.53C674.501,-3227.25 684.748,-3227.18 694.703,-3227.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-3230.82 704.933,-3227.52 695.007,-3223.82 694.864,-3230.82"/>
+</g>
+<!-- 23,4 -->
+<g id="node53" class="node"><title>23,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-4725" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-4736.17" font-family="Times Roman,serif" font-size="10.00">23,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-4717 727,-4731 778,-4731 778,-4717 727,-4717"/>
+<text text-anchor="start" x="736" y="-4721.67" font-family="Times Roman,serif" font-size="10.00">TCACG</text>
+<polygon fill="#218559" stroke="#218559" points="727,-4703 727,-4717 778,-4717 778,-4703 727,-4703"/>
+<text text-anchor="start" x="735.5" y="-4707.67" font-family="Times Roman,serif" font-size="10.00">CGTGA</text>
+</g>
+<!-- 22,2->23,4 -->
+<g id="edge262" class="edge"><title>22,2->23,4</title>
+<path fill="none" stroke="#ebb035" d="M627.883,-3269.47C643.959,-3327.18 674,-3435 674,-3435 674,-3435 686,-3516 686,-3516 686,-3516 696,-4677 696,-4677 696,-4677 703.283,-4683.24 712.596,-4691.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="710.529,-4694.06 720.4,-4697.91 715.085,-4688.75 710.529,-4694.06"/>
+</g>
+<!-- 22,3->21,4 -->
+<g id="edge270" class="edge"><title>22,3->21,4</title>
+<path fill="none" stroke="#218559" d="M761.883,-3269.47C777.959,-3327.18 808,-3435 808,-3435 808,-3435 830,-3531 830,-3531 830,-3531 849.437,-3571.96 865.409,-3605.61"/>
+<polygon fill="#218559" stroke="#218559" points="862.353,-3607.34 869.802,-3614.87 868.677,-3604.33 862.353,-3607.34"/>
+</g>
+<!-- 22,3->22,2 -->
+<g id="edge272" class="edge"><title>22,3->22,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-3240.48C695.29,-3240.75 685.041,-3240.82 675.091,-3240.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-3237.18 664.867,-3240.47 674.792,-3244.18 674.937,-3237.18"/>
+</g>
+<!-- 22,4 -->
+<g id="node48" class="node"><title>22,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3234" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-3245.17" font-family="Times Roman,serif" font-size="10.00">22,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-3226 861,-3240 912,-3240 912,-3226 861,-3226"/>
+<text text-anchor="start" x="869.5" y="-3230.67" font-family="Times Roman,serif" font-size="10.00">GTGAA</text>
+<polygon fill="#218559" stroke="#218559" points="861,-3212 861,-3226 912,-3226 912,-3212 861,-3212"/>
+<text text-anchor="start" x="871.5" y="-3216.67" font-family="Times Roman,serif" font-size="10.00">TTCAC</text>
+</g>
+<!-- 22,3->22,4 -->
+<g id="edge268" class="edge"><title>22,3->22,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-3227.53C808.501,-3227.25 818.748,-3227.18 828.703,-3227.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-3230.82 838.933,-3227.52 829.007,-3223.82 828.864,-3230.82"/>
+</g>
+<!-- 22,4->22,3 -->
+<g id="edge276" class="edge"><title>22,4->22,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-3240.48C829.29,-3240.75 819.041,-3240.82 809.091,-3240.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-3237.18 798.867,-3240.47 808.792,-3244.18 808.937,-3237.18"/>
+</g>
+<!-- 23,2 -->
+<g id="node51" class="node"><title>23,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-4725" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-4736.17" font-family="Times Roman,serif" font-size="10.00">23,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-4717 459,-4731 510,-4731 510,-4717 459,-4717"/>
+<text text-anchor="start" x="470" y="-4721.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-4703 459,-4717 510,-4717 510,-4703 459,-4703"/>
+<text text-anchor="start" x="467.5" y="-4707.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+</g>
+<!-- 22,4->23,2 -->
+<g id="edge274" class="edge"><title>22,4->23,2</title>
+<path fill="none" stroke="#ebb035" d="M876.117,-3269.47C860.041,-3327.18 830,-3435 830,-3435 830,-3435 808,-3561 808,-3561 808,-3561 696,-3601 696,-3601 696,-3601 674,-4192 674,-4192 674,-4192 562,-4415 562,-4415 562,-4415 550,-4546 550,-4546 550,-4546 540,-4677 540,-4677 540,-4677 532.717,-4683.24 523.404,-4691.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="520.915,-4688.75 515.6,-4697.91 525.471,-4694.06 520.915,-4688.75"/>
+</g>
+<!-- 23,1->24,3 -->
+<g id="edge690" class="edge"><title>23,1->24,3</title>
+<path fill="none" stroke="#06a2cb" d="M358.034,-4689.18C371.699,-4628.26 398,-4511 398,-4511 398,-4511 416,-4240 416,-4240 416,-4240 418,-4212 418,-4212 418,-4212 428,-4026 428,-4026 428,-4026 540,-3996 540,-3996 540,-3996 562,-3896 562,-3896 562,-3896 674,-3896 674,-3896 674,-3896 686,-4442 686,-4442 686,-4442 696,-5072 696,-5072 696,-5072 703.283,-5078.24 712.596,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="710.529,-5089.06 720.4,-5092.91 715.085,-5083.75 710.529,-5089.06"/>
+</g>
+<!-- 23,1->23,2 -->
+<g id="edge686" class="edge"><title>23,1->23,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-4718.53C406.501,-4718.25 416.748,-4718.18 426.703,-4718.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-4721.82 436.933,-4718.52 427.007,-4714.82 426.864,-4721.82"/>
+</g>
+<!-- 23,1->7,1 -->
+<g id="edge684" class="edge"><title>23,1->7,1</title>
+<path fill="none" stroke="#dd1e2f" d="M386.389,-4701.45C402.556,-4690.99 418,-4681 418,-4681 418,-4681 430.492,-4671.16 444.607,-4660.04"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="446.857,-4662.72 452.546,-4653.78 442.525,-4657.22 446.857,-4662.72"/>
+</g>
+<!-- 17,2 -->
+<g id="node140" class="node"><title>17,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3948" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-3959.17" font-family="Times Roman,serif" font-size="10.00">17,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-3940 459,-3954 510,-3954 510,-3940 459,-3940"/>
+<text text-anchor="start" x="467" y="-3944.67" font-family="Times Roman,serif" font-size="10.00">AAACG</text>
+<polygon fill="#218559" stroke="#218559" points="459,-3926 459,-3940 510,-3940 510,-3926 459,-3926"/>
+<text text-anchor="start" x="469.5" y="-3930.67" font-family="Times Roman,serif" font-size="10.00">CGTTT</text>
+</g>
+<!-- 23,1->17,2 -->
+<g id="edge692" class="edge"><title>23,1->17,2</title>
+<path fill="none" stroke="#06a2cb" d="M358.034,-4689.18C371.699,-4628.26 398,-4511 398,-4511 398,-4511 416,-4215 416,-4215 416,-4215 418,-4187 418,-4187 418,-4187 428,-3998 428,-3998 428,-3998 435.684,-3991.14 445.359,-3982.5"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="447.923,-3984.9 453.052,-3975.63 443.261,-3979.68 447.923,-3984.9"/>
+</g>
+<!-- 23,1->19,4 -->
+<g id="edge688" class="edge"><title>23,1->19,4</title>
+<path fill="none" stroke="#ebb035" d="M356.826,-4760.7C370.078,-4829.99 398,-4976 398,-4976 398,-4976 418,-5091 418,-5091 418,-5091 428,-5168 428,-5168 428,-5168 435.283,-5174.24 444.596,-5182.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="442.529,-5185.06 452.4,-5188.91 447.085,-5179.75 442.529,-5185.06"/>
+</g>
+<!-- 18,1 -->
+<g id="node154" class="node"><title>18,1</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-4463" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="193.5" y="-4474.17" font-family="Times Roman,serif" font-size="10.00">18,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="191,-4455 191,-4469 242,-4469 242,-4455 191,-4455"/>
+<text text-anchor="start" x="201.5" y="-4459.67" font-family="Times Roman,serif" font-size="10.00">CGTTT</text>
+<polygon fill="#218559" stroke="#218559" points="191,-4441 191,-4455 242,-4455 242,-4441 191,-4441"/>
+<text text-anchor="start" x="199" y="-4445.67" font-family="Times Roman,serif" font-size="10.00">AAACG</text>
+</g>
+<!-- 23,1->18,1 -->
+<g id="edge694" class="edge"><title>23,1->18,1</title>
+<path fill="none" stroke="#218559" d="M333.345,-4690.93C313.793,-4650.94 284,-4590 284,-4590 284,-4590 258.516,-4542.4 238.749,-4505.49"/>
+<polygon fill="#218559" stroke="#218559" points="241.672,-4503.53 233.866,-4496.37 235.501,-4506.84 241.672,-4503.53"/>
+</g>
+<!-- 23,2->22,4 -->
+<g id="edge698" class="edge"><title>23,2->22,4</title>
+<path fill="none" stroke="#ebb035" d="M515.6,-4697.91C528.303,-4687.03 540,-4677 540,-4677 540,-4677 562,-4192 562,-4192 562,-4192 674,-4162 674,-4162 674,-4162 684,-3796 684,-3796 684,-3796 696,-3561 696,-3561 696,-3561 808,-3531 808,-3531 808,-3531 830,-3435 830,-3435 830,-3435 856.845,-3338.65 873.362,-3279.36"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="876.805,-3280.04 876.117,-3269.47 870.062,-3278.17 876.805,-3280.04"/>
+</g>
+<!-- 23,2->23,1 -->
+<g id="edge702" class="edge"><title>23,2->23,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-4731.48C427.29,-4731.75 417.041,-4731.82 407.091,-4731.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-4728.18 396.867,-4731.47 406.792,-4735.18 406.937,-4728.18"/>
+</g>
+<!-- 23,2->23,3 -->
+<g id="edge696" class="edge"><title>23,2->23,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-4718.53C540.501,-4718.25 550.748,-4718.18 560.703,-4718.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-4721.82 570.933,-4718.52 561.007,-4714.82 560.864,-4721.82"/>
+</g>
+<!-- 23,2->17,1 -->
+<g id="edge700" class="edge"><title>23,2->17,1</title>
+<path fill="none" stroke="#06a2cb" d="M452.4,-4697.91C439.697,-4687.03 428,-4677 428,-4677 428,-4677 418,-3825 418,-3825 418,-3825 416,-3825 416,-3825 416,-3825 392.048,-3869.64 373.003,-3905.13"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="369.679,-3903.92 368.035,-3914.39 375.847,-3907.23 369.679,-3903.92"/>
+</g>
+<!-- 23,3->24,1 -->
+<g id="edge706" class="edge"><title>23,3->24,1</title>
+<path fill="none" stroke="#06a2cb" d="M609.73,-4760.63C591.608,-4838.72 550,-5018 550,-5018 550,-5018 540,-5072 540,-5072 540,-5072 532.717,-5078.24 523.404,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="520.915,-5083.75 515.6,-5092.91 525.471,-5089.06 520.915,-5083.75"/>
+</g>
+<!-- 23,3->23,2 -->
+<g id="edge708" class="edge"><title>23,3->23,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-4731.48C561.29,-4731.75 551.041,-4731.82 541.091,-4731.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-4728.18 530.867,-4731.47 540.792,-4735.18 540.937,-4728.18"/>
+</g>
+<!-- 23,3->23,4 -->
+<g id="edge704" class="edge"><title>23,3->23,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-4718.53C674.501,-4718.25 684.748,-4718.18 694.703,-4718.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-4721.82 704.933,-4718.52 695.007,-4714.82 694.864,-4721.82"/>
+</g>
+<!-- 23,4->22,2 -->
+<g id="edge710" class="edge"><title>23,4->22,2</title>
+<path fill="none" stroke="#ebb035" d="M720.4,-4697.91C707.697,-4687.03 696,-4677 696,-4677 696,-4677 686,-3501 686,-3501 686,-3501 674,-3435 674,-3435 674,-3435 647.155,-3338.65 630.638,-3279.36"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="633.938,-3278.17 627.883,-3269.47 627.195,-3280.04 633.938,-3278.17"/>
+</g>
+<!-- 23,4->23,3 -->
+<g id="edge712" class="edge"><title>23,4->23,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-4731.48C695.29,-4731.75 685.041,-4731.82 675.091,-4731.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-4728.18 664.867,-4731.47 674.792,-4735.18 674.937,-4728.18"/>
+</g>
+<!-- 28,1->27,2 -->
+<g id="edge336" class="edge"><title>28,1->27,2</title>
+<path fill="none" stroke="#218559" d="M583.317,-2764.85C566.127,-2777.16 545.205,-2792.15 527.005,-2805.19"/>
+<polygon fill="#218559" stroke="#218559" points="524.948,-2802.36 518.857,-2811.03 529.025,-2808.05 524.948,-2802.36"/>
+</g>
+<!-- 28,1->22,1 -->
+<g id="edge332" class="edge"><title>28,1->22,1</title>
+<path fill="none" stroke="#dd1e2f" d="M586.4,-2767.09C573.697,-2777.97 562,-2788 562,-2788 562,-2788 550,-2923 550,-2923 550,-2923 540,-3083 540,-3083 540,-3083 517.026,-3144.95 500.508,-3189.49"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="497.184,-3188.38 496.988,-3198.98 503.747,-3190.82 497.184,-3188.38"/>
+</g>
+<!-- 28,2 -->
+<g id="node56" class="node"><title>28,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2740" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2751.17" font-family="Times Roman,serif" font-size="10.00">28,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2732 727,-2746 778,-2746 778,-2732 727,-2732"/>
+<text text-anchor="start" x="737" y="-2736.67" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2718 727,-2732 778,-2732 778,-2718 727,-2718"/>
+<text text-anchor="start" x="736.5" y="-2722.67" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+</g>
+<!-- 28,1->28,2 -->
+<g id="edge334" class="edge"><title>28,1->28,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-2733.53C674.501,-2733.25 684.748,-2733.18 694.703,-2733.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-2736.82 704.933,-2733.52 695.007,-2729.82 694.864,-2736.82"/>
+</g>
+<!-- 28,2->28,1 -->
+<g id="edge342" class="edge"><title>28,2->28,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-2746.48C695.29,-2746.75 685.041,-2746.82 675.091,-2746.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-2743.18 664.867,-2746.47 674.792,-2750.18 674.937,-2743.18"/>
+</g>
+<!-- 28,2->28,3 -->
+<g id="edge338" class="edge"><title>28,2->28,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-2733.53C808.501,-2733.25 818.748,-2733.18 828.703,-2733.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-2736.82 838.933,-2733.52 829.007,-2729.82 828.864,-2736.82"/>
+</g>
+<!-- 29,4 -->
+<g id="node63" class="node"><title>29,4</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-2306" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1131.5" y="-2317.17" font-family="Times Roman,serif" font-size="10.00">29,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1129,-2298 1129,-2312 1180,-2312 1180,-2298 1129,-2298"/>
+<text text-anchor="start" x="1137.5" y="-2302.67" font-family="Times Roman,serif" font-size="10.00">GACGT</text>
+<polygon fill="#218559" stroke="#218559" points="1129,-2284 1129,-2298 1180,-2298 1180,-2284 1129,-2284"/>
+<text text-anchor="start" x="1138.5" y="-2288.67" font-family="Times Roman,serif" font-size="10.00">ACGTC</text>
+</g>
+<!-- 28,2->29,4 -->
+<g id="edge340" class="edge"><title>28,2->29,4</title>
+<path fill="none" stroke="#ebb035" d="M790.086,-2718.03C809.886,-2706.6 830,-2695 830,-2695 830,-2695 1076,-2610 1076,-2610 1076,-2610 1106,-2450 1106,-2450 1106,-2450 1124.98,-2393.07 1139.07,-2350.8"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1142.42,-2351.82 1142.26,-2341.23 1135.78,-2349.61 1142.42,-2351.82"/>
+</g>
+<!-- 28,3->27,4 -->
+<g id="edge346" class="edge"><title>28,3->27,4</title>
+<path fill="none" stroke="#218559" d="M851.317,-2764.85C834.127,-2777.16 813.205,-2792.15 795.005,-2805.19"/>
+<polygon fill="#218559" stroke="#218559" points="792.948,-2802.36 786.857,-2811.03 797.025,-2808.05 792.948,-2802.36"/>
+</g>
+<!-- 28,3->28,2 -->
+<g id="edge348" class="edge"><title>28,3->28,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-2746.48C829.29,-2746.75 819.041,-2746.82 809.091,-2746.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-2743.18 798.867,-2746.47 808.792,-2750.18 808.937,-2743.18"/>
+</g>
+<!-- 28,4 -->
+<g id="node58" class="node"><title>28,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-2740" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-2751.17" font-family="Times Roman,serif" font-size="10.00">28,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-2732 995,-2746 1046,-2746 1046,-2732 995,-2732"/>
+<text text-anchor="start" x="1004" y="-2736.67" font-family="Times Roman,serif" font-size="10.00">CGTCA</text>
+<polygon fill="#218559" stroke="#218559" points="995,-2718 995,-2732 1046,-2732 1046,-2718 995,-2718"/>
+<text text-anchor="start" x="1003.5" y="-2722.67" font-family="Times Roman,serif" font-size="10.00">TGACG</text>
+</g>
+<!-- 28,3->28,4 -->
+<g id="edge344" class="edge"><title>28,3->28,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-2733.53C942.501,-2733.25 952.748,-2733.18 962.703,-2733.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-2736.82 972.933,-2733.52 963.007,-2729.82 962.864,-2736.82"/>
+</g>
+<!-- 28,4->28,3 -->
+<g id="edge354" class="edge"><title>28,4->28,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-2746.48C963.29,-2746.75 953.041,-2746.82 943.091,-2746.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-2743.18 932.867,-2746.47 942.792,-2750.18 942.937,-2743.18"/>
+</g>
+<!-- 29,2 -->
+<g id="node61" class="node"><title>29,2</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2306" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-2317.17" font-family="Times Roman,serif" font-size="10.00">29,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-2298 861,-2312 912,-2312 912,-2298 861,-2298"/>
+<text text-anchor="start" x="870" y="-2302.67" font-family="Times Roman,serif" font-size="10.00">ATGAC</text>
+<polygon fill="#218559" stroke="#218559" points="861,-2284 861,-2298 912,-2298 912,-2284 861,-2284"/>
+<text text-anchor="start" x="871.5" y="-2288.67" font-family="Times Roman,serif" font-size="10.00">GTCAT</text>
+</g>
+<!-- 28,4->29,2 -->
+<g id="edge352" class="edge"><title>28,4->29,2</title>
+<path fill="none" stroke="#ebb035" d="M1009.73,-2704.42C993.562,-2648.41 964,-2546 964,-2546 964,-2546 954,-2407 954,-2407 954,-2407 942,-2354 942,-2354 942,-2354 934.717,-2347.76 925.404,-2339.78"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="927.471,-2336.94 917.6,-2333.09 922.915,-2342.25 927.471,-2336.94"/>
+</g>
+<!-- 31,3 -->
+<g id="node161" class="node"><title>31,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1732" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1743.17" font-family="Times Roman,serif" font-size="10.00">31,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1724 861,-1738 912,-1738 912,-1724 861,-1724"/>
+<text text-anchor="start" x="871.5" y="-1728.67" font-family="Times Roman,serif" font-size="10.00">GTCAT</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1710 861,-1724 912,-1724 912,-1710 861,-1710"/>
+<text text-anchor="start" x="870" y="-1714.67" font-family="Times Roman,serif" font-size="10.00">ATGAC</text>
+</g>
+<!-- 28,4->31,3 -->
+<g id="edge350" class="edge"><title>28,4->31,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1009.73,-2704.42C993.562,-2648.41 964,-2546 964,-2546 964,-2546 954,-1346 954,-1346 954,-1346 952,-1346 952,-1346 952,-1346 942,-1684 942,-1684 942,-1684 934.717,-1690.24 925.404,-1698.22"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="922.915,-1695.75 917.6,-1704.91 927.471,-1701.06 922.915,-1695.75"/>
+</g>
+<!-- 29,1 -->
+<g id="node60" class="node"><title>29,1</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2306" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2317.17" font-family="Times Roman,serif" font-size="10.00">29,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2298 727,-2312 778,-2312 778,-2298 727,-2298"/>
+<text text-anchor="start" x="736" y="-2302.67" font-family="Times Roman,serif" font-size="10.00">CATGA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2284 727,-2298 778,-2298 778,-2284 727,-2284"/>
+<text text-anchor="start" x="737" y="-2288.67" font-family="Times Roman,serif" font-size="10.00">TCATG</text>
+</g>
+<!-- 29,1->29,2 -->
+<g id="edge760" class="edge"><title>29,1->29,2</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-2299.53C808.501,-2299.25 818.748,-2299.18 828.703,-2299.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-2302.82 838.933,-2299.52 829.007,-2295.82 828.864,-2302.82"/>
+</g>
+<!-- 30,2 -->
+<g id="node165" class="node"><title>30,2</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2140" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-2151.17" font-family="Times Roman,serif" font-size="10.00">30,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-2132 861,-2146 912,-2146 912,-2132 861,-2132"/>
+<text text-anchor="start" x="871" y="-2136.67" font-family="Times Roman,serif" font-size="10.00">TCATG</text>
+<polygon fill="#218559" stroke="#218559" points="861,-2118 861,-2132 912,-2132 912,-2118 861,-2118"/>
+<text text-anchor="start" x="870" y="-2122.67" font-family="Times Roman,serif" font-size="10.00">CATGA</text>
+</g>
+<!-- 29,1->30,2 -->
+<g id="edge764" class="edge"><title>29,1->30,2</title>
+<path fill="none" stroke="#218559" d="M780.444,-2277.14C799.078,-2258.23 820,-2237 820,-2237 820,-2237 840.341,-2207.11 858.438,-2180.51"/>
+<polygon fill="#218559" stroke="#218559" points="861.474,-2182.27 864.206,-2172.03 855.687,-2178.33 861.474,-2182.27"/>
+</g>
+<!-- 30,3 -->
+<g id="node166" class="node"><title>30,3</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-2140" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-2151.17" font-family="Times Roman,serif" font-size="10.00">30,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-2132 995,-2146 1046,-2146 1046,-2132 995,-2132"/>
+<text text-anchor="start" x="1004" y="-2136.67" font-family="Times Roman,serif" font-size="10.00">CATGA</text>
+<polygon fill="#218559" stroke="#218559" points="995,-2118 995,-2132 1046,-2132 1046,-2118 995,-2118"/>
+<text text-anchor="start" x="1005" y="-2122.67" font-family="Times Roman,serif" font-size="10.00">TCATG</text>
+</g>
+<!-- 29,1->30,3 -->
+<g id="edge762" class="edge"><title>29,1->30,3</title>
+<path fill="none" stroke="#06a2cb" d="M768.198,-2271.87C784.736,-2237.02 808,-2188 808,-2188 808,-2188 820,-2139 820,-2139 820,-2139 830,-2095 830,-2095 830,-2095 942,-2095 942,-2095 942,-2095 956.586,-2103.41 973.143,-2112.97"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="971.503,-2116.06 981.914,-2118.03 975.001,-2110 971.503,-2116.06"/>
+</g>
+<!-- 29,2->28,4 -->
+<g id="edge770" class="edge"><title>29,2->28,4</title>
+<path fill="none" stroke="#ebb035" d="M917.6,-2333.09C930.303,-2343.97 942,-2354 942,-2354 942,-2354 964,-2546 964,-2546 964,-2546 990.308,-2637.14 1006.86,-2694.48"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1003.59,-2695.78 1009.73,-2704.42 1010.32,-2693.84 1003.59,-2695.78"/>
+</g>
+<!-- 29,2->29,1 -->
+<g id="edge772" class="edge"><title>29,2->29,1</title>
+<path fill="none" stroke="#218559" d="M838.933,-2312.48C829.29,-2312.75 819.041,-2312.82 809.091,-2312.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-2309.18 798.867,-2312.47 808.792,-2316.18 808.937,-2309.18"/>
+</g>
+<!-- 29,3 -->
+<g id="node62" class="node"><title>29,3</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-2306" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-2317.17" font-family="Times Roman,serif" font-size="10.00">29,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-2298 995,-2312 1046,-2312 1046,-2298 995,-2298"/>
+<text text-anchor="start" x="1003.5" y="-2302.67" font-family="Times Roman,serif" font-size="10.00">TGACG</text>
+<polygon fill="#218559" stroke="#218559" points="995,-2284 995,-2298 1046,-2298 1046,-2284 995,-2284"/>
+<text text-anchor="start" x="1004" y="-2288.67" font-family="Times Roman,serif" font-size="10.00">CGTCA</text>
+</g>
+<!-- 29,2->29,3 -->
+<g id="edge766" class="edge"><title>29,2->29,3</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-2299.53C942.501,-2299.25 952.748,-2299.18 962.703,-2299.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-2302.82 972.933,-2299.52 963.007,-2295.82 962.864,-2302.82"/>
+</g>
+<!-- 32,4 -->
+<g id="node197" class="node"><title>32,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1974" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-1985.17" font-family="Times Roman,serif" font-size="10.00">32,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-1966 995,-1980 1046,-1980 1046,-1966 995,-1966"/>
+<text text-anchor="start" x="1004" y="-1970.67" font-family="Times Roman,serif" font-size="10.00">CGTCA</text>
+<polygon fill="#218559" stroke="#218559" points="995,-1952 995,-1966 1046,-1966 1046,-1952 995,-1952"/>
+<text text-anchor="start" x="1003.5" y="-1956.67" font-family="Times Roman,serif" font-size="10.00">TGACG</text>
+</g>
+<!-- 29,2->32,4 -->
+<g id="edge768" class="edge"><title>29,2->32,4</title>
+<path fill="none" stroke="#ebb035" d="M902.198,-2271.87C918.736,-2237.02 942,-2188 942,-2188 942,-2188 954,-2154 954,-2154 954,-2154 964,-2092 964,-2092 964,-2092 983.437,-2051.04 999.409,-2017.39"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1002.68,-2018.67 1003.8,-2008.13 996.353,-2015.66 1002.68,-2018.67"/>
+</g>
+<!-- 29,3->29,2 -->
+<g id="edge780" class="edge"><title>29,3->29,2</title>
+<path fill="none" stroke="#218559" d="M972.933,-2312.48C963.29,-2312.75 953.041,-2312.82 943.091,-2312.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-2309.18 932.867,-2312.47 942.792,-2316.18 942.937,-2309.18"/>
+</g>
+<!-- 29,3->29,4 -->
+<g id="edge774" class="edge"><title>29,3->29,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1066.87,-2299.53C1076.5,-2299.25 1086.75,-2299.18 1096.7,-2299.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1096.86,-2302.82 1106.93,-2299.52 1097.01,-2295.82 1096.86,-2302.82"/>
+</g>
+<!-- 30,1 -->
+<g id="node164" class="node"><title>30,1</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2140" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2151.17" font-family="Times Roman,serif" font-size="10.00">30,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2132 727,-2146 778,-2146 778,-2132 727,-2132"/>
+<text text-anchor="start" x="737.5" y="-2136.67" font-family="Times Roman,serif" font-size="10.00">GTCAT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2118 727,-2132 778,-2132 778,-2118 727,-2118"/>
+<text text-anchor="start" x="736" y="-2122.67" font-family="Times Roman,serif" font-size="10.00">ATGAC</text>
+</g>
+<!-- 29,3->30,1 -->
+<g id="edge776" class="edge"><title>29,3->30,1</title>
+<path fill="none" stroke="#06a2cb" d="M1003.8,-2271.87C987.264,-2237.02 964,-2188 964,-2188 964,-2188 942,-1926 942,-1926 942,-1926 830,-1926 830,-1926 830,-1926 808,-2090 808,-2090 808,-2090 800.316,-2096.86 790.641,-2105.5"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="788.077,-2103.1 782.948,-2112.37 792.739,-2108.32 788.077,-2103.1"/>
+</g>
+<!-- 30,4 -->
+<g id="node167" class="node"><title>30,4</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-2140" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1131.5" y="-2151.17" font-family="Times Roman,serif" font-size="10.00">30,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1129,-2132 1129,-2146 1180,-2146 1180,-2132 1129,-2132"/>
+<text text-anchor="start" x="1138" y="-2136.67" font-family="Times Roman,serif" font-size="10.00">ATGAC</text>
+<polygon fill="#218559" stroke="#218559" points="1129,-2118 1129,-2132 1180,-2132 1180,-2118 1129,-2118"/>
+<text text-anchor="start" x="1139.5" y="-2122.67" font-family="Times Roman,serif" font-size="10.00">GTCAT</text>
+</g>
+<!-- 29,3->30,4 -->
+<g id="edge778" class="edge"><title>29,3->30,4</title>
+<path fill="none" stroke="#218559" d="M1048.44,-2277.14C1067.08,-2258.23 1088,-2237 1088,-2237 1088,-2237 1108.34,-2207.11 1126.44,-2180.51"/>
+<polygon fill="#218559" stroke="#218559" points="1129.47,-2182.27 1132.21,-2172.03 1123.69,-2178.33 1129.47,-2182.27"/>
+</g>
+<!-- 29,4->28,2 -->
+<g id="edge782" class="edge"><title>29,4->28,2</title>
+<path fill="none" stroke="#ebb035" d="M1142.26,-2341.23C1128.05,-2383.86 1106,-2450 1106,-2450 1106,-2450 1076,-2546 1076,-2546 1076,-2546 954,-2614 954,-2614 954,-2614 830,-2653 830,-2653 830,-2653 808,-2678 808,-2678 808,-2678 797.753,-2689.34 786.026,-2702.33"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="783.121,-2700.32 779.016,-2710.09 788.316,-2705.01 783.121,-2700.32"/>
+</g>
+<!-- 29,4->29,3 -->
+<g id="edge784" class="edge"><title>29,4->29,3</title>
+<path fill="none" stroke="#218559" d="M1106.93,-2312.48C1097.29,-2312.75 1087.04,-2312.82 1077.09,-2312.68"/>
+<polygon fill="#218559" stroke="#218559" points="1076.94,-2309.18 1066.87,-2312.47 1076.79,-2316.18 1076.94,-2309.18"/>
+</g>
+<!-- 1,1 -->
+<g id="node65" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="64" cy="-5415" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="44.5" y="-5426.17" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="42,-5407 42,-5421 87,-5421 87,-5407 42,-5407"/>
+<text text-anchor="start" x="49" y="-5411.67" font-family="Times Roman,serif" font-size="10.00">TAGTG</text>
+<polygon fill="#218559" stroke="#218559" points="42,-5393 42,-5407 87,-5407 87,-5393 42,-5393"/>
+<text text-anchor="start" x="48.5" y="-5397.67" font-family="Times Roman,serif" font-size="10.00">CACTA</text>
+</g>
+<!-- 1,2 -->
+<g id="node66" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-5415" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="196.5" y="-5426.17" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="194,-5407 194,-5421 239,-5421 239,-5407 194,-5407"/>
+<text text-anchor="start" x="199.5" y="-5411.67" font-family="Times Roman,serif" font-size="10.00">AGTGC</text>
+<polygon fill="#218559" stroke="#218559" points="194,-5393 194,-5407 239,-5407 239,-5393 194,-5393"/>
+<text text-anchor="start" x="200" y="-5397.67" font-family="Times Roman,serif" font-size="10.00">GCACT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge454" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M106.745,-5408.86C124.378,-5408.17 144.986,-5408.07 163.523,-5408.55"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="163.467,-5412.05 173.576,-5408.87 163.695,-5405.05 163.467,-5412.05"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge460" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M173.576,-5421.13C155.979,-5421.82 135.377,-5421.94 116.815,-5421.46"/>
+<polygon fill="#218559" stroke="#218559" points="116.852,-5417.96 106.745,-5421.14 116.627,-5424.96 116.852,-5417.96"/>
+</g>
+<!-- 1,3 -->
+<g id="node67" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-5415" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="330.5" y="-5426.17" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="328,-5407 328,-5421 373,-5421 373,-5407 328,-5407"/>
+<text text-anchor="start" x="333" y="-5411.67" font-family="Times Roman,serif" font-size="10.00">GTGCG</text>
+<polygon fill="#218559" stroke="#218559" points="328,-5393 328,-5407 373,-5407 373,-5393 328,-5393"/>
+<text text-anchor="start" x="333" y="-5397.67" font-family="Times Roman,serif" font-size="10.00">CGCAC</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge456" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M258.398,-5408.67C270.741,-5408.23 284.377,-5408.14 297.273,-5408.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="297.326,-5411.89 307.417,-5408.67 297.517,-5404.89 297.326,-5411.89"/>
+</g>
+<!-- 2,4 -->
+<g id="node77" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-5319" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-5330.17" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-5311 596,-5325 641,-5325 641,-5311 596,-5311"/>
+<text text-anchor="start" x="601" y="-5315.67" font-family="Times Roman,serif" font-size="10.00">CGCAC</text>
+<polygon fill="#218559" stroke="#218559" points="596,-5297 596,-5311 641,-5311 641,-5297 596,-5297"/>
+<text text-anchor="start" x="601" y="-5301.67" font-family="Times Roman,serif" font-size="10.00">GTGCG</text>
+</g>
+<!-- 1,2->2,4 -->
+<g id="edge458" class="edge"><title>1,2->2,4</title>
+<path fill="none" stroke="#ebb035" d="M251.804,-5435.66C272.309,-5447.49 294,-5460 294,-5460 294,-5460 540,-5460 540,-5460 540,-5460 571.999,-5402.16 595.006,-5360.57"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="598.131,-5362.15 599.909,-5351.7 592.006,-5358.76 598.131,-5362.15"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge464" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M307.417,-5421.33C295.062,-5421.77 281.424,-5421.86 268.535,-5421.61"/>
+<polygon fill="#218559" stroke="#218559" points="268.491,-5418.11 258.398,-5421.33 268.298,-5425.1 268.491,-5418.11"/>
+</g>
+<!-- 1,4 -->
+<g id="node68" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5415" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-5426.17" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-5407 462,-5421 507,-5421 507,-5407 462,-5407"/>
+<text text-anchor="start" x="467.5" y="-5411.67" font-family="Times Roman,serif" font-size="10.00">TGCGA</text>
+<polygon fill="#218559" stroke="#218559" points="462,-5393 462,-5407 507,-5407 507,-5393 462,-5393"/>
+<text text-anchor="start" x="468" y="-5397.67" font-family="Times Roman,serif" font-size="10.00">TCGCA</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge462" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M392.398,-5408.67C404.741,-5408.23 418.377,-5408.14 431.273,-5408.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="431.326,-5411.89 441.417,-5408.67 431.517,-5404.89 431.326,-5411.89"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge468" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M441.417,-5421.33C429.062,-5421.77 415.424,-5421.86 402.535,-5421.61"/>
+<polygon fill="#218559" stroke="#218559" points="402.491,-5418.11 392.398,-5421.33 402.298,-5425.1 402.491,-5418.11"/>
+</g>
+<!-- 2,2 -->
+<g id="node75" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-5319" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="330.5" y="-5330.17" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="328,-5311 328,-5325 373,-5325 373,-5311 328,-5311"/>
+<text text-anchor="start" x="334" y="-5315.67" font-family="Times Roman,serif" font-size="10.00">CTCGC</text>
+<polygon fill="#218559" stroke="#218559" points="328,-5297 328,-5311 373,-5311 373,-5297 328,-5297"/>
+<text text-anchor="start" x="332.5" y="-5301.67" font-family="Times Roman,serif" font-size="10.00">GCGAG</text>
+</g>
+<!-- 1,4->2,2 -->
+<g id="edge466" class="edge"><title>1,4->2,2</title>
+<path fill="none" stroke="#ebb035" d="M448.805,-5394.3C432.212,-5384.54 416,-5375 416,-5375 416,-5375 402.69,-5363.71 388.025,-5351.26"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="390.185,-5348.51 380.296,-5344.71 385.656,-5353.84 390.185,-5348.51"/>
+</g>
+<!-- 3,1 -->
+<g id="node70" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-52" rx="43.8406" ry="36.0624"/>
+<text text-anchor="start" x="732" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="729,-44 729,-58 775,-58 775,-44 729,-44"/>
+<text text-anchor="start" x="731.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">GCTAGG</text>
+<polygon fill="#218559" stroke="#218559" points="729,-30 729,-44 775,-44 775,-30 729,-30"/>
+<text text-anchor="start" x="732.5" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">CCTAGC</text>
+</g>
+<!-- 3,3 -->
+<g id="node71" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-44 864,-58 909,-58 909,-44 864,-44"/>
+<text text-anchor="start" x="869.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">TAGGG</text>
+<polygon fill="#218559" stroke="#218559" points="864,-30 864,-44 909,-44 909,-30 864,-30"/>
+<text text-anchor="start" x="870.5" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">CCCTA</text>
+</g>
+<!-- 3,1->3,3 -->
+<g id="edge470" class="edge"><title>3,1->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M795.506,-45.6333C807.566,-45.224 820.789,-45.1425 833.312,-45.3888"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.533,-48.8961 843.626,-45.6728 833.726,-41.8988 833.533,-48.8961"/>
+</g>
+<!-- 3,3->3,1 -->
+<g id="edge474" class="edge"><title>3,3->3,1</title>
+<path fill="none" stroke="#218559" d="M843.626,-58.3272C831.641,-58.7571 818.434,-58.8591 805.869,-58.6334"/>
+<polygon fill="#218559" stroke="#218559" points="805.593,-55.1253 795.506,-58.3667 805.413,-62.1229 805.593,-55.1253"/>
+</g>
+<!-- 3,4 -->
+<g id="node72" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1000.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="998,-44 998,-58 1043,-58 1043,-44 998,-44"/>
+<text text-anchor="start" x="1003.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">AGGGT</text>
+<polygon fill="#218559" stroke="#218559" points="998,-30 998,-44 1043,-44 1043,-30 998,-30"/>
+<text text-anchor="start" x="1004" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">ACCCT</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge472" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M928.398,-45.6719C940.741,-45.2298 954.377,-45.1351 967.273,-45.388"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="967.326,-48.8907 977.417,-45.6653 967.517,-41.8933 967.326,-48.8907"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge478" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M977.417,-58.3347C965.062,-58.7734 951.424,-58.8645 938.535,-58.6082"/>
+<polygon fill="#218559" stroke="#218559" points="938.491,-55.1057 928.398,-58.3281 938.298,-62.1031 938.491,-55.1057"/>
+</g>
+<!-- 4,3 -->
+<g id="node86" class="node"><title>4,3</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-1444" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1134.5" y="-1455.17" font-family="Times Roman,serif" font-size="10.00">4,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1132,-1436 1132,-1450 1177,-1450 1177,-1436 1132,-1436"/>
+<text text-anchor="start" x="1138" y="-1440.67" font-family="Times Roman,serif" font-size="10.00">GGGTT</text>
+<polygon fill="#218559" stroke="#218559" points="1132,-1422 1132,-1436 1177,-1436 1177,-1422 1132,-1422"/>
+<text text-anchor="start" x="1137.5" y="-1426.67" font-family="Times Roman,serif" font-size="10.00">AACCC</text>
+</g>
+<!-- 3,4->4,3 -->
+<g id="edge476" class="edge"><title>3,4->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1023.59,-87.8824C1035.95,-211.48 1076,-612 1076,-612 1076,-612 1106,-1122 1106,-1122 1106,-1122 1133.86,-1308.88 1147.13,-1397.9"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1143.7,-1398.63 1148.63,-1408 1150.62,-1397.59 1143.7,-1398.63"/>
+</g>
+<!-- 2,1 -->
+<g id="node74" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-5319" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="196.5" y="-5330.17" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="194,-5311 194,-5325 239,-5325 239,-5311 194,-5311"/>
+<text text-anchor="start" x="200" y="-5315.67" font-family="Times Roman,serif" font-size="10.00">CCTCG</text>
+<polygon fill="#218559" stroke="#218559" points="194,-5297 194,-5311 239,-5311 239,-5297 194,-5297"/>
+<text text-anchor="start" x="198.5" y="-5301.67" font-family="Times Roman,serif" font-size="10.00">CGAGG</text>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge48" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M258.398,-5312.67C270.741,-5312.23 284.377,-5312.14 297.273,-5312.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="297.326,-5315.89 307.417,-5312.67 297.517,-5308.89 297.326,-5315.89"/>
+</g>
+<!-- 2,2->1,4 -->
+<g id="edge52" class="edge"><title>2,2->1,4</title>
+<path fill="none" stroke="#ebb035" d="M382.78,-5342.48C400.868,-5355.44 423.505,-5371.66 442.782,-5385.47"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="440.926,-5388.45 451.094,-5391.43 445.003,-5382.76 440.926,-5388.45"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge54" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M307.417,-5325.33C295.062,-5325.77 281.424,-5325.86 268.535,-5325.61"/>
+<polygon fill="#218559" stroke="#218559" points="268.491,-5322.11 258.398,-5325.33 268.298,-5329.1 268.491,-5322.11"/>
+</g>
+<!-- 2,3 -->
+<g id="node76" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5319" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-5330.17" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-5311 462,-5325 507,-5325 507,-5311 462,-5311"/>
+<text text-anchor="start" x="468" y="-5315.67" font-family="Times Roman,serif" font-size="10.00">TCGCA</text>
+<polygon fill="#218559" stroke="#218559" points="462,-5297 462,-5311 507,-5311 507,-5297 462,-5297"/>
+<text text-anchor="start" x="467.5" y="-5301.67" font-family="Times Roman,serif" font-size="10.00">TGCGA</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge50" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M392.398,-5312.67C404.741,-5312.23 418.377,-5312.14 431.273,-5312.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="431.326,-5315.89 441.417,-5312.67 431.517,-5308.89 431.326,-5315.89"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge58" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M441.417,-5325.33C429.062,-5325.77 415.424,-5325.86 402.535,-5325.61"/>
+<polygon fill="#218559" stroke="#218559" points="402.491,-5322.11 392.398,-5325.33 402.298,-5329.1 402.491,-5322.11"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge56" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M526.398,-5312.67C538.741,-5312.23 552.377,-5312.14 565.273,-5312.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="565.326,-5315.89 575.417,-5312.67 565.517,-5308.89 565.326,-5315.89"/>
+</g>
+<!-- 2,4->1,2 -->
+<g id="edge60" class="edge"><title>2,4->1,2</title>
+<path fill="none" stroke="#ebb035" d="M604.961,-5353.38C585.726,-5404.09 552,-5493 552,-5493 552,-5493 282,-5493 282,-5493 282,-5493 264.575,-5472.41 247.632,-5452.38"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="250.083,-5449.86 240.952,-5444.49 244.739,-5454.38 250.083,-5449.86"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge62" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M575.417,-5325.33C563.062,-5325.77 549.424,-5325.86 536.535,-5325.61"/>
+<polygon fill="#218559" stroke="#218559" points="536.491,-5322.11 526.398,-5325.33 536.298,-5329.1 536.491,-5322.11"/>
+</g>
+<!-- 5,1 -->
+<g id="node79" class="node"><title>5,1</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2498" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-2509.17" font-family="Times Roman,serif" font-size="10.00">5,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-2490 730,-2504 775,-2504 775,-2490 730,-2490"/>
+<text text-anchor="start" x="735" y="-2494.67" font-family="Times Roman,serif" font-size="10.00">AGCAA</text>
+<polygon fill="#218559" stroke="#218559" points="730,-2476 730,-2490 775,-2490 775,-2476 730,-2476"/>
+<text text-anchor="start" x="737.5" y="-2480.67" font-family="Times Roman,serif" font-size="10.00">TTGCT</text>
+</g>
+<!-- 5,2 -->
+<g id="node80" class="node"><title>5,2</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2498" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-2509.17" font-family="Times Roman,serif" font-size="10.00">5,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-2490 864,-2504 909,-2504 909,-2490 864,-2490"/>
+<text text-anchor="start" x="869" y="-2494.67" font-family="Times Roman,serif" font-size="10.00">GCAAC</text>
+<polygon fill="#218559" stroke="#218559" points="864,-2476 864,-2490 909,-2490 909,-2476 864,-2476"/>
+<text text-anchor="start" x="870.5" y="-2480.67" font-family="Times Roman,serif" font-size="10.00">GTTGC</text>
+</g>
+<!-- 5,1->5,2 -->
+<g id="edge480" class="edge"><title>5,1->5,2</title>
+<path fill="none" stroke="#dd1e2f" d="M794.398,-2491.67C806.741,-2491.23 820.377,-2491.14 833.273,-2491.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.326,-2494.89 843.417,-2491.67 833.517,-2487.89 833.326,-2494.89"/>
+</g>
+<!-- 6,3 -->
+<g id="node96" class="node"><title>6,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3131" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-3142.17" font-family="Times Roman,serif" font-size="10.00">6,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-3123 864,-3137 909,-3137 909,-3123 864,-3123"/>
+<text text-anchor="start" x="870" y="-3127.67" font-family="Times Roman,serif" font-size="10.00">TGCTG</text>
+<polygon fill="#218559" stroke="#218559" points="864,-3109 864,-3123 909,-3123 909,-3109 864,-3109"/>
+<text text-anchor="start" x="869" y="-3113.67" font-family="Times Roman,serif" font-size="10.00">CAGCA</text>
+</g>
+<!-- 5,1->6,3 -->
+<g id="edge482" class="edge"><title>5,1->6,3</title>
+<path fill="none" stroke="#06a2cb" d="M762.141,-2533.13C778.279,-2589.04 808,-2692 808,-2692 808,-2692 820,-2810 820,-2810 820,-2810 830,-3083 830,-3083 830,-3083 837.944,-3089.81 847.849,-3098.3"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="845.835,-3101.18 855.705,-3105.03 850.391,-3095.87 845.835,-3101.18"/>
+</g>
+<!-- 5,2->5,1 -->
+<g id="edge488" class="edge"><title>5,2->5,1</title>
+<path fill="none" stroke="#218559" d="M843.417,-2504.33C831.062,-2504.77 817.424,-2504.86 804.535,-2504.61"/>
+<polygon fill="#218559" stroke="#218559" points="804.491,-2501.11 794.398,-2504.33 804.298,-2508.1 804.491,-2501.11"/>
+</g>
+<!-- 5,3 -->
+<g id="node81" class="node"><title>5,3</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-2498" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1000.5" y="-2509.17" font-family="Times Roman,serif" font-size="10.00">5,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="998,-2490 998,-2504 1043,-2504 1043,-2490 998,-2490"/>
+<text text-anchor="start" x="1003.5" y="-2494.67" font-family="Times Roman,serif" font-size="10.00">CAACC</text>
+<polygon fill="#218559" stroke="#218559" points="998,-2476 998,-2490 1043,-2490 1043,-2476 998,-2476"/>
+<text text-anchor="start" x="1004" y="-2480.67" font-family="Times Roman,serif" font-size="10.00">GGTTG</text>
+</g>
+<!-- 5,2->5,3 -->
+<g id="edge484" class="edge"><title>5,2->5,3</title>
+<path fill="none" stroke="#dd1e2f" d="M928.398,-2491.67C940.741,-2491.23 954.377,-2491.14 967.273,-2491.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="967.326,-2494.89 977.417,-2491.67 967.517,-2487.89 967.326,-2494.89"/>
+</g>
+<!-- 4,4 -->
+<g id="node87" class="node"><title>4,4</title>
+<ellipse fill="none" stroke="black" cx="1288" cy="-1444" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1268.5" y="-1455.17" font-family="Times Roman,serif" font-size="10.00">4,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1266,-1436 1266,-1450 1311,-1450 1311,-1436 1266,-1436"/>
+<text text-anchor="start" x="1272" y="-1440.67" font-family="Times Roman,serif" font-size="10.00">GGTTG</text>
+<polygon fill="#218559" stroke="#218559" points="1266,-1422 1266,-1436 1311,-1436 1311,-1422 1266,-1422"/>
+<text text-anchor="start" x="1271.5" y="-1426.67" font-family="Times Roman,serif" font-size="10.00">CAACC</text>
+</g>
+<!-- 5,2->4,4 -->
+<g id="edge486" class="edge"><title>5,2->4,4</title>
+<path fill="none" stroke="#ebb035" d="M916.295,-2472.03C929.489,-2460.72 942,-2450 942,-2450 942,-2450 954,-2353 954,-2353 954,-2353 964,-2258 964,-2258 964,-2258 1210,-2211 1210,-2211 1210,-2211 1222,-2096 1222,-2096 1222,-2096 1268.27,-1638.87 1283.33,-1490.15"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1286.83,-1490.28 1284.36,-1479.98 1279.87,-1489.58 1286.83,-1490.28"/>
+</g>
+<!-- 5,3->5,2 -->
+<g id="edge494" class="edge"><title>5,3->5,2</title>
+<path fill="none" stroke="#218559" d="M977.417,-2504.33C965.062,-2504.77 951.424,-2504.86 938.535,-2504.61"/>
+<polygon fill="#218559" stroke="#218559" points="938.491,-2501.11 928.398,-2504.33 938.298,-2508.1 938.491,-2501.11"/>
+</g>
+<!-- 5,4 -->
+<g id="node82" class="node"><title>5,4</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-2498" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1134.5" y="-2509.17" font-family="Times Roman,serif" font-size="10.00">5,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1132,-2490 1132,-2504 1177,-2504 1177,-2490 1132,-2490"/>
+<text text-anchor="start" x="1137.5" y="-2494.67" font-family="Times Roman,serif" font-size="10.00">AACCC</text>
+<polygon fill="#218559" stroke="#218559" points="1132,-2476 1132,-2490 1177,-2490 1177,-2476 1132,-2476"/>
+<text text-anchor="start" x="1138" y="-2480.67" font-family="Times Roman,serif" font-size="10.00">GGGTT</text>
+</g>
+<!-- 5,3->5,4 -->
+<g id="edge490" class="edge"><title>5,3->5,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1062.4,-2491.67C1074.74,-2491.23 1088.38,-2491.14 1101.27,-2491.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1101.33,-2494.89 1111.42,-2491.67 1101.52,-2487.89 1101.33,-2494.89"/>
+</g>
+<!-- 6,1 -->
+<g id="node94" class="node"><title>6,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3131" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-3142.17" font-family="Times Roman,serif" font-size="10.00">6,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-3123 596,-3137 641,-3137 641,-3123 596,-3123"/>
+<text text-anchor="start" x="602.5" y="-3127.67" font-family="Times Roman,serif" font-size="10.00">GTTGC</text>
+<polygon fill="#218559" stroke="#218559" points="596,-3109 596,-3123 641,-3123 641,-3109 596,-3109"/>
+<text text-anchor="start" x="601" y="-3113.67" font-family="Times Roman,serif" font-size="10.00">GCAAC</text>
+</g>
+<!-- 5,3->6,1 -->
+<g id="edge492" class="edge"><title>5,3->6,1</title>
+<path fill="none" stroke="#06a2cb" d="M988.4,-2522.83C975.697,-2532.81 964,-2542 964,-2542 964,-2542 942,-2577 942,-2577 942,-2577 830,-2615 830,-2615 830,-2615 808,-2636 808,-2636 808,-2636 696,-2692 696,-2692 696,-2692 686,-2881 686,-2881 686,-2881 674,-3083 674,-3083 674,-3083 666.056,-3089.81 656.151,-3098.3"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="653.609,-3095.87 648.295,-3105.03 658.165,-3101.18 653.609,-3095.87"/>
+</g>
+<!-- 5,4->5,3 -->
+<g id="edge498" class="edge"><title>5,4->5,3</title>
+<path fill="none" stroke="#218559" d="M1111.42,-2504.33C1099.06,-2504.77 1085.42,-2504.86 1072.54,-2504.61"/>
+<polygon fill="#218559" stroke="#218559" points="1072.49,-2501.11 1062.4,-2504.33 1072.3,-2508.1 1072.49,-2501.11"/>
+</g>
+<!-- 4,2 -->
+<g id="node85" class="node"><title>4,2</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1444" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1000.5" y="-1455.17" font-family="Times Roman,serif" font-size="10.00">4,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="998,-1436 998,-1450 1043,-1450 1043,-1436 998,-1436"/>
+<text text-anchor="start" x="1003.5" y="-1440.67" font-family="Times Roman,serif" font-size="10.00">AGGGT</text>
+<polygon fill="#218559" stroke="#218559" points="998,-1422 998,-1436 1043,-1436 1043,-1422 998,-1422"/>
+<text text-anchor="start" x="1004" y="-1426.67" font-family="Times Roman,serif" font-size="10.00">ACCCT</text>
+</g>
+<!-- 5,4->4,2 -->
+<g id="edge496" class="edge"><title>5,4->4,2</title>
+<path fill="none" stroke="#ebb035" d="M1142.38,-2463.14C1128.17,-2420.52 1106,-2354 1106,-2354 1106,-2354 1086,-1913 1086,-1913 1086,-1913 1076,-1684 1076,-1684 1076,-1684 1046.78,-1558.79 1030.56,-1489.25"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1033.94,-1488.36 1028.26,-1479.41 1027.13,-1489.95 1033.94,-1488.36"/>
+</g>
+<!-- 4,1 -->
+<g id="node84" class="node"><title>4,1</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1444" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-1455.17" font-family="Times Roman,serif" font-size="10.00">4,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-1436 864,-1450 909,-1450 909,-1436 864,-1436"/>
+<text text-anchor="start" x="868" y="-1440.67" font-family="Times Roman,serif" font-size="10.00">GAGGG</text>
+<polygon fill="#218559" stroke="#218559" points="864,-1422 864,-1436 909,-1436 909,-1422 864,-1422"/>
+<text text-anchor="start" x="870.5" y="-1426.67" font-family="Times Roman,serif" font-size="10.00">CCCTC</text>
+</g>
+<!-- 4,1->4,2 -->
+<g id="edge64" class="edge"><title>4,1->4,2</title>
+<path fill="none" stroke="#dd1e2f" d="M928.398,-1437.67C940.741,-1437.23 954.377,-1437.14 967.273,-1437.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="967.326,-1440.89 977.417,-1437.67 967.517,-1433.89 967.326,-1440.89"/>
+</g>
+<!-- 4,2->5,4 -->
+<g id="edge68" class="edge"><title>4,2->5,4</title>
+<path fill="none" stroke="#ebb035" d="M1028.26,-1479.41C1043.84,-1546.17 1076,-1684 1076,-1684 1076,-1684 1088,-1915 1088,-1915 1088,-1915 1106,-2354 1106,-2354 1106,-2354 1125.09,-2411.26 1139.19,-2453.56"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1135.9,-2454.76 1142.38,-2463.14 1142.54,-2452.55 1135.9,-2454.76"/>
+</g>
+<!-- 4,2->4,1 -->
+<g id="edge70" class="edge"><title>4,2->4,1</title>
+<path fill="none" stroke="#218559" d="M977.417,-1450.33C965.062,-1450.77 951.424,-1450.86 938.535,-1450.61"/>
+<polygon fill="#218559" stroke="#218559" points="938.491,-1447.11 928.398,-1450.33 938.298,-1454.1 938.491,-1447.11"/>
+</g>
+<!-- 4,2->4,3 -->
+<g id="edge66" class="edge"><title>4,2->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1062.4,-1437.67C1074.74,-1437.23 1088.38,-1437.14 1101.27,-1437.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1101.33,-1440.89 1111.42,-1437.67 1101.52,-1433.89 1101.33,-1440.89"/>
+</g>
+<!-- 4,3->3,4 -->
+<g id="edge74" class="edge"><title>4,3->3,4</title>
+<path fill="none" stroke="#218559" d="M1148.63,-1408C1136.11,-1323.98 1106,-1122 1106,-1122 1106,-1122 1088,-453 1088,-453 1088,-453 1045.65,-203.273 1027.79,-97.9643"/>
+<polygon fill="#218559" stroke="#218559" points="1031.22,-97.213 1026.09,-87.939 1024.32,-98.3834 1031.22,-97.213"/>
+</g>
+<!-- 4,3->4,2 -->
+<g id="edge76" class="edge"><title>4,3->4,2</title>
+<path fill="none" stroke="#218559" d="M1111.42,-1450.33C1099.06,-1450.77 1085.42,-1450.86 1072.54,-1450.61"/>
+<polygon fill="#218559" stroke="#218559" points="1072.49,-1447.11 1062.4,-1450.33 1072.3,-1454.1 1072.49,-1447.11"/>
+</g>
+<!-- 4,3->4,4 -->
+<g id="edge72" class="edge"><title>4,3->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1196.4,-1437.67C1208.74,-1437.23 1222.38,-1437.14 1235.27,-1437.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1235.33,-1440.89 1245.42,-1437.67 1235.52,-1433.89 1235.33,-1440.89"/>
+</g>
+<!-- 4,4->5,2 -->
+<g id="edge78" class="edge"><title>4,4->5,2</title>
+<path fill="none" stroke="#ebb035" d="M1284.24,-1479.88C1268.66,-1628.5 1210,-2188 1210,-2188 1210,-2188 964,-2228 964,-2228 964,-2228 942,-2450 942,-2450 942,-2450 934.056,-2456.81 924.151,-2465.3"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="921.609,-2462.87 916.295,-2472.03 926.165,-2468.18 921.609,-2462.87"/>
+</g>
+<!-- 4,4->4,3 -->
+<g id="edge80" class="edge"><title>4,4->4,3</title>
+<path fill="none" stroke="#218559" d="M1245.42,-1450.33C1233.06,-1450.77 1219.42,-1450.86 1206.54,-1450.61"/>
+<polygon fill="#218559" stroke="#218559" points="1206.49,-1447.11 1196.4,-1450.33 1206.3,-1454.1 1206.49,-1447.11"/>
+</g>
+<!-- 7,1->24,2 -->
+<g id="edge504" class="edge"><title>7,1->24,2</title>
+<path fill="none" stroke="#06a2cb" d="M514.295,-4654.97C527.489,-4666.28 540,-4677 540,-4677 540,-4677 562,-5072 562,-5072 562,-5072 569.283,-5078.24 578.596,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="576.529,-5089.06 586.4,-5092.91 581.085,-5083.75 576.529,-5089.06"/>
+</g>
+<!-- 7,1->23,1 -->
+<g id="edge508" class="edge"><title>7,1->23,1</title>
+<path fill="none" stroke="#218559" d="M451.161,-4652.53C433.641,-4665.08 411.867,-4680.68 393.012,-4694.19"/>
+<polygon fill="#218559" stroke="#218559" points="390.948,-4691.36 384.857,-4700.03 395.025,-4697.05 390.948,-4691.36"/>
+</g>
+<!-- 7,1->7,2 -->
+<g id="edge500" class="edge"><title>7,1->7,2</title>
+<path fill="none" stroke="#dd1e2f" d="M526.398,-4622.67C538.741,-4622.23 552.377,-4622.14 565.273,-4622.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="565.326,-4625.89 575.417,-4622.67 565.517,-4618.89 565.326,-4625.89"/>
+</g>
+<!-- 8,3 -->
+<g id="node106" class="node"><title>8,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-5024" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-5035.17" font-family="Times Roman,serif" font-size="10.00">8,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-5016 596,-5030 641,-5030 641,-5016 596,-5016"/>
+<text text-anchor="start" x="602" y="-5020.67" font-family="Times Roman,serif" font-size="10.00">GAAAT</text>
+<polygon fill="#218559" stroke="#218559" points="596,-5002 596,-5016 641,-5016 641,-5002 596,-5002"/>
+<text text-anchor="start" x="604.5" y="-5006.67" font-family="Times Roman,serif" font-size="10.00">ATTTC</text>
+</g>
+<!-- 7,1->8,3 -->
+<g id="edge502" class="edge"><title>7,1->8,3</title>
+<path fill="none" stroke="#06a2cb" d="M513.64,-4602.54C527.072,-4590.54 540,-4579 540,-4579 540,-4579 550,-4340 550,-4340 550,-4340 552,-4340 552,-4340 552,-4340 562,-4773 562,-4773 562,-4773 591.791,-4906.53 607.915,-4978.8"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="604.502,-4979.57 610.095,-4988.57 611.334,-4978.05 604.502,-4979.57"/>
+</g>
+<!-- 18,2 -->
+<g id="node155" class="node"><title>18,2</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-4463" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-4474.17" font-family="Times Roman,serif" font-size="10.00">18,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-4455 325,-4469 376,-4469 376,-4455 325,-4455"/>
+<text text-anchor="start" x="336" y="-4459.67" font-family="Times Roman,serif" font-size="10.00">GTTTC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-4441 325,-4455 376,-4455 376,-4441 325,-4441"/>
+<text text-anchor="start" x="333" y="-4445.67" font-family="Times Roman,serif" font-size="10.00">GAAAC</text>
+</g>
+<!-- 7,1->18,2 -->
+<g id="edge506" class="edge"><title>7,1->18,2</title>
+<path fill="none" stroke="#218559" d="M468.102,-4595.5C451.546,-4560.62 428,-4511 428,-4511 428,-4511 418,-4336 418,-4336 418,-4336 416,-4336 416,-4336 416,-4336 391.411,-4383.32 372.25,-4420.19"/>
+<polygon fill="#218559" stroke="#218559" points="369.019,-4418.81 367.514,-4429.3 375.231,-4422.04 369.019,-4418.81"/>
+</g>
+<!-- 7,2->24,1 -->
+<g id="edge514" class="edge"><title>7,2->24,1</title>
+<path fill="none" stroke="#06a2cb" d="M587.705,-4654.97C574.511,-4666.28 562,-4677 562,-4677 562,-4677 552,-4873 552,-4873 552,-4873 550,-4901 550,-4901 550,-4901 540,-5072 540,-5072 540,-5072 532.717,-5078.24 523.404,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="520.915,-5083.75 515.6,-5092.91 525.471,-5089.06 520.915,-5083.75"/>
+</g>
+<!-- 7,2->7,1 -->
+<g id="edge516" class="edge"><title>7,2->7,1</title>
+<path fill="none" stroke="#218559" d="M575.417,-4635.33C563.062,-4635.77 549.424,-4635.86 536.535,-4635.61"/>
+<polygon fill="#218559" stroke="#218559" points="536.491,-4632.11 526.398,-4635.33 536.298,-4639.1 536.491,-4632.11"/>
+</g>
+<!-- 7,3 -->
+<g id="node91" class="node"><title>7,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-4629" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-4640.17" font-family="Times Roman,serif" font-size="10.00">7,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-4621 730,-4635 775,-4635 775,-4621 730,-4621"/>
+<text text-anchor="start" x="736" y="-4625.67" font-family="Times Roman,serif" font-size="10.00">TCAGC</text>
+<polygon fill="#218559" stroke="#218559" points="730,-4607 730,-4621 775,-4621 775,-4607 730,-4607"/>
+<text text-anchor="start" x="735.5" y="-4611.67" font-family="Times Roman,serif" font-size="10.00">GCTGA</text>
+</g>
+<!-- 7,2->7,3 -->
+<g id="edge510" class="edge"><title>7,2->7,3</title>
+<path fill="none" stroke="#dd1e2f" d="M660.398,-4622.67C672.741,-4622.23 686.377,-4622.14 699.273,-4622.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="699.326,-4625.89 709.417,-4622.67 699.517,-4618.89 699.326,-4625.89"/>
+</g>
+<!-- 6,4 -->
+<g id="node97" class="node"><title>6,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-3131" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1000.5" y="-3142.17" font-family="Times Roman,serif" font-size="10.00">6,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="998,-3123 998,-3137 1043,-3137 1043,-3123 998,-3123"/>
+<text text-anchor="start" x="1003.5" y="-3127.67" font-family="Times Roman,serif" font-size="10.00">GCTGA</text>
+<polygon fill="#218559" stroke="#218559" points="998,-3109 998,-3123 1043,-3123 1043,-3109 998,-3109"/>
+<text text-anchor="start" x="1004" y="-3113.67" font-family="Times Roman,serif" font-size="10.00">TCAGC</text>
+</g>
+<!-- 7,2->6,4 -->
+<g id="edge512" class="edge"><title>7,2->6,4</title>
+<path fill="none" stroke="#ebb035" d="M653.804,-4608.34C674.309,-4596.51 696,-4584 696,-4584 696,-4584 808,-4541 808,-4541 808,-4541 820,-4518 820,-4518 820,-4518 942,-4081 942,-4081 942,-4081 1000.55,-3367.83 1016.2,-3177.32"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1019.71,-3177.33 1017.04,-3167.08 1012.73,-3176.76 1019.71,-3177.33"/>
+</g>
+<!-- 7,3->7,2 -->
+<g id="edge522" class="edge"><title>7,3->7,2</title>
+<path fill="none" stroke="#218559" d="M709.417,-4635.33C697.062,-4635.77 683.424,-4635.86 670.535,-4635.61"/>
+<polygon fill="#218559" stroke="#218559" points="670.491,-4632.11 660.398,-4635.33 670.298,-4639.1 670.491,-4632.11"/>
+</g>
+<!-- 7,4 -->
+<g id="node92" class="node"><title>7,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-4629" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-4640.17" font-family="Times Roman,serif" font-size="10.00">7,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-4621 864,-4635 909,-4635 909,-4621 864,-4621"/>
+<text text-anchor="start" x="869" y="-4625.67" font-family="Times Roman,serif" font-size="10.00">CAGCA</text>
+<polygon fill="#218559" stroke="#218559" points="864,-4607 864,-4621 909,-4621 909,-4607 864,-4607"/>
+<text text-anchor="start" x="870" y="-4611.67" font-family="Times Roman,serif" font-size="10.00">TGCTG</text>
+</g>
+<!-- 7,3->7,4 -->
+<g id="edge518" class="edge"><title>7,3->7,4</title>
+<path fill="none" stroke="#dd1e2f" d="M794.398,-4622.67C806.741,-4622.23 820.377,-4622.14 833.273,-4622.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.326,-4625.89 843.417,-4622.67 833.517,-4618.89 833.326,-4625.89"/>
+</g>
+<!-- 7,3->8,1 -->
+<g id="edge520" class="edge"><title>7,3->8,1</title>
+<path fill="none" stroke="#06a2cb" d="M739.294,-4594.14C717.192,-4533.5 674,-4415 674,-4415 674,-4415 552,-4311 552,-4311 552,-4311 550,-4311 550,-4311 550,-4311 540,-4545 540,-4545 540,-4545 428,-4584 428,-4584 428,-4584 398,-4773 398,-4773 398,-4773 372.635,-4905.64 358.782,-4978.08"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="355.267,-4977.82 356.826,-4988.3 362.142,-4979.14 355.267,-4977.82"/>
+</g>
+<!-- 7,4->7,3 -->
+<g id="edge526" class="edge"><title>7,4->7,3</title>
+<path fill="none" stroke="#218559" d="M843.417,-4635.33C831.062,-4635.77 817.424,-4635.86 804.535,-4635.61"/>
+<polygon fill="#218559" stroke="#218559" points="804.491,-4632.11 794.398,-4635.33 804.298,-4639.1 804.491,-4632.11"/>
+</g>
+<!-- 6,2 -->
+<g id="node95" class="node"><title>6,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3131" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-3142.17" font-family="Times Roman,serif" font-size="10.00">6,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-3123 730,-3137 775,-3137 775,-3123 730,-3123"/>
+<text text-anchor="start" x="737.5" y="-3127.67" font-family="Times Roman,serif" font-size="10.00">TTGCT</text>
+<polygon fill="#218559" stroke="#218559" points="730,-3109 730,-3123 775,-3123 775,-3109 730,-3109"/>
+<text text-anchor="start" x="735" y="-3113.67" font-family="Times Roman,serif" font-size="10.00">AGCAA</text>
+</g>
+<!-- 7,4->6,2 -->
+<g id="edge524" class="edge"><title>7,4->6,2</title>
+<path fill="none" stroke="#ebb035" d="M883.839,-4593.04C873.548,-4421.76 830,-3697 830,-3697 830,-3697 808,-3186 808,-3186 808,-3186 798.399,-3176.57 787.148,-3165.52"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="789.587,-3163.01 780,-3158.5 784.682,-3168 789.587,-3163.01"/>
+</g>
+<!-- 6,1->5,3 -->
+<g id="edge84" class="edge"><title>6,1->5,3</title>
+<path fill="none" stroke="#06a2cb" d="M648.295,-3105.03C661.489,-3093.72 674,-3083 674,-3083 674,-3083 696,-2650 696,-2650 696,-2650 818,-2587 818,-2587 818,-2587 942,-2543 942,-2543 942,-2543 957.73,-2533.93 975.061,-2523.93"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="977.283,-2526.69 984.196,-2518.66 973.785,-2520.62 977.283,-2526.69"/>
+</g>
+<!-- 6,1->6,2 -->
+<g id="edge82" class="edge"><title>6,1->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M660.398,-3124.67C672.741,-3124.23 686.377,-3124.14 699.273,-3124.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="699.326,-3127.89 709.417,-3124.67 699.517,-3120.89 699.326,-3127.89"/>
+</g>
+<!-- 6,2->7,4 -->
+<g id="edge88" class="edge"><title>6,2->7,4</title>
+<path fill="none" stroke="#ebb035" d="M790.372,-3147.93C805.796,-3154.73 820,-3161 820,-3161 820,-3161 830,-3697 830,-3697 830,-3697 871.947,-4395.11 883.232,-4582.94"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="879.745,-4583.26 883.839,-4593.04 886.733,-4582.84 879.745,-4583.26"/>
+</g>
+<!-- 6,2->6,1 -->
+<g id="edge90" class="edge"><title>6,2->6,1</title>
+<path fill="none" stroke="#218559" d="M709.417,-3137.33C697.062,-3137.77 683.424,-3137.86 670.535,-3137.61"/>
+<polygon fill="#218559" stroke="#218559" points="670.491,-3134.11 660.398,-3137.33 670.298,-3141.1 670.491,-3134.11"/>
+</g>
+<!-- 6,2->6,3 -->
+<g id="edge86" class="edge"><title>6,2->6,3</title>
+<path fill="none" stroke="#dd1e2f" d="M794.398,-3124.67C806.741,-3124.23 820.377,-3124.14 833.273,-3124.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.326,-3127.89 843.417,-3124.67 833.517,-3120.89 833.326,-3127.89"/>
+</g>
+<!-- 6,3->5,1 -->
+<g id="edge94" class="edge"><title>6,3->5,1</title>
+<path fill="none" stroke="#06a2cb" d="M855.705,-3105.03C842.511,-3093.72 830,-3083 830,-3083 830,-3083 820,-2834 820,-2834 820,-2834 808,-2692 808,-2692 808,-2692 781.55,-2600.37 765.006,-2543.06"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="768.277,-2541.77 762.141,-2533.13 761.552,-2543.71 768.277,-2541.77"/>
+</g>
+<!-- 6,3->6,2 -->
+<g id="edge96" class="edge"><title>6,3->6,2</title>
+<path fill="none" stroke="#218559" d="M843.417,-3137.33C831.062,-3137.77 817.424,-3137.86 804.535,-3137.61"/>
+<polygon fill="#218559" stroke="#218559" points="804.491,-3134.11 794.398,-3137.33 804.298,-3141.1 804.491,-3134.11"/>
+</g>
+<!-- 6,3->6,4 -->
+<g id="edge92" class="edge"><title>6,3->6,4</title>
+<path fill="none" stroke="#dd1e2f" d="M928.398,-3124.67C940.741,-3124.23 954.377,-3124.14 967.273,-3124.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="967.326,-3127.89 977.417,-3124.67 967.517,-3120.89 967.326,-3127.89"/>
+</g>
+<!-- 6,4->7,2 -->
+<g id="edge98" class="edge"><title>6,4->7,2</title>
+<path fill="none" stroke="#ebb035" d="M1015.06,-3166.84C997.916,-3291.25 942,-3697 942,-3697 942,-3697 820,-4503 820,-4503 820,-4503 684,-4551 684,-4551 684,-4551 674,-4579 674,-4579 674,-4579 665.629,-4586.47 655.36,-4595.64"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="652.768,-4593.26 647.64,-4602.54 657.43,-4598.49 652.768,-4593.26"/>
+</g>
+<!-- 6,4->6,3 -->
+<g id="edge100" class="edge"><title>6,4->6,3</title>
+<path fill="none" stroke="#218559" d="M977.417,-3137.33C965.062,-3137.77 951.424,-3137.86 938.535,-3137.61"/>
+<polygon fill="#218559" stroke="#218559" points="938.491,-3134.11 928.398,-3137.33 938.298,-3141.1 938.491,-3134.11"/>
+</g>
+<!-- 9,1 -->
+<g id="node99" class="node"><title>9,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3483" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-3494.17" font-family="Times Roman,serif" font-size="10.00">9,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-3475 462,-3489 507,-3489 507,-3475 462,-3475"/>
+<text text-anchor="start" x="468" y="-3479.67" font-family="Times Roman,serif" font-size="10.00">CAGAT</text>
+<polygon fill="#218559" stroke="#218559" points="462,-3461 462,-3475 507,-3475 507,-3461 462,-3461"/>
+<text text-anchor="start" x="469" y="-3465.67" font-family="Times Roman,serif" font-size="10.00">ATCTG</text>
+</g>
+<!-- 9,2 -->
+<g id="node100" class="node"><title>9,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3483" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-3494.17" font-family="Times Roman,serif" font-size="10.00">9,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-3475 596,-3489 641,-3489 641,-3475 596,-3475"/>
+<text text-anchor="start" x="603" y="-3479.67" font-family="Times Roman,serif" font-size="10.00">AGATT</text>
+<polygon fill="#218559" stroke="#218559" points="596,-3461 596,-3475 641,-3475 641,-3461 596,-3461"/>
+<text text-anchor="start" x="603.5" y="-3465.67" font-family="Times Roman,serif" font-size="10.00">AATCT</text>
+</g>
+<!-- 9,1->9,2 -->
+<g id="edge528" class="edge"><title>9,1->9,2</title>
+<path fill="none" stroke="#dd1e2f" d="M526.398,-3476.67C538.741,-3476.23 552.377,-3476.14 565.273,-3476.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="565.326,-3479.89 575.417,-3476.67 565.517,-3472.89 565.326,-3479.89"/>
+</g>
+<!-- 10,2 -->
+<g id="node115" class="node"><title>10,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3035" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-3046.17" font-family="Times Roman,serif" font-size="10.00">10,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-3027 593,-3041 644,-3041 644,-3027 593,-3027"/>
+<text text-anchor="start" x="600.5" y="-3031.67" font-family="Times Roman,serif" font-size="10.00">GCAGA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-3013 593,-3027 644,-3027 644,-3013 593,-3013"/>
+<text text-anchor="start" x="603" y="-3017.67" font-family="Times Roman,serif" font-size="10.00">TCTGC</text>
+</g>
+<!-- 9,1->10,2 -->
+<g id="edge530" class="edge"><title>9,1->10,2</title>
+<path fill="none" stroke="#218559" d="M493.883,-3447.53C509.959,-3389.82 540,-3282 540,-3282 540,-3282 552,-3197 552,-3197 552,-3197 562,-3083 562,-3083 562,-3083 569.283,-3076.76 578.596,-3068.78"/>
+<polygon fill="#218559" stroke="#218559" points="581.085,-3071.25 586.4,-3062.09 576.529,-3065.94 581.085,-3071.25"/>
+</g>
+<!-- 9,2->9,1 -->
+<g id="edge536" class="edge"><title>9,2->9,1</title>
+<path fill="none" stroke="#218559" d="M575.417,-3489.33C563.062,-3489.77 549.424,-3489.86 536.535,-3489.61"/>
+<polygon fill="#218559" stroke="#218559" points="536.491,-3486.11 526.398,-3489.33 536.298,-3493.1 536.491,-3486.11"/>
+</g>
+<!-- 9,3 -->
+<g id="node101" class="node"><title>9,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3483" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-3494.17" font-family="Times Roman,serif" font-size="10.00">9,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-3475 730,-3489 775,-3489 775,-3475 730,-3475"/>
+<text text-anchor="start" x="738" y="-3479.67" font-family="Times Roman,serif" font-size="10.00">GATTT</text>
+<polygon fill="#218559" stroke="#218559" points="730,-3461 730,-3475 775,-3475 775,-3461 730,-3461"/>
+<text text-anchor="start" x="736.5" y="-3465.67" font-family="Times Roman,serif" font-size="10.00">AAATC</text>
+</g>
+<!-- 9,2->9,3 -->
+<g id="edge532" class="edge"><title>9,2->9,3</title>
+<path fill="none" stroke="#dd1e2f" d="M660.398,-3476.67C672.741,-3476.23 686.377,-3476.14 699.273,-3476.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="699.326,-3479.89 709.417,-3476.67 699.517,-3472.89 699.326,-3479.89"/>
+</g>
+<!-- 8,4 -->
+<g id="node107" class="node"><title>8,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-5024" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-5035.17" font-family="Times Roman,serif" font-size="10.00">8,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-5016 730,-5030 775,-5030 775,-5016 730,-5016"/>
+<text text-anchor="start" x="736.5" y="-5020.67" font-family="Times Roman,serif" font-size="10.00">AAATC</text>
+<polygon fill="#218559" stroke="#218559" points="730,-5002 730,-5016 775,-5016 775,-5002 730,-5002"/>
+<text text-anchor="start" x="738" y="-5006.67" font-family="Times Roman,serif" font-size="10.00">GATTT</text>
+</g>
+<!-- 9,2->8,4 -->
+<g id="edge534" class="edge"><title>9,2->8,4</title>
+<path fill="none" stroke="#ebb035" d="M633.898,-3516.5C650.454,-3551.38 674,-3601 674,-3601 674,-3601 686,-3822 686,-3822 686,-3822 696,-4773 696,-4773 696,-4773 725.791,-4906.53 741.915,-4978.8"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="738.502,-4979.57 744.095,-4988.57 745.334,-4978.05 738.502,-4979.57"/>
+</g>
+<!-- 9,3->9,2 -->
+<g id="edge542" class="edge"><title>9,3->9,2</title>
+<path fill="none" stroke="#218559" d="M709.417,-3489.33C697.062,-3489.77 683.424,-3489.86 670.535,-3489.61"/>
+<polygon fill="#218559" stroke="#218559" points="670.491,-3486.11 660.398,-3489.33 670.298,-3493.1 670.491,-3486.11"/>
+</g>
+<!-- 9,4 -->
+<g id="node102" class="node"><title>9,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3483" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-3494.17" font-family="Times Roman,serif" font-size="10.00">9,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-3475 864,-3489 909,-3489 909,-3475 864,-3475"/>
+<text text-anchor="start" x="872.5" y="-3479.67" font-family="Times Roman,serif" font-size="10.00">ATTTC</text>
+<polygon fill="#218559" stroke="#218559" points="864,-3461 864,-3475 909,-3475 909,-3461 864,-3461"/>
+<text text-anchor="start" x="870" y="-3465.67" font-family="Times Roman,serif" font-size="10.00">GAAAT</text>
+</g>
+<!-- 9,3->9,4 -->
+<g id="edge538" class="edge"><title>9,3->9,4</title>
+<path fill="none" stroke="#dd1e2f" d="M794.398,-3476.67C806.741,-3476.23 820.377,-3476.14 833.273,-3476.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.326,-3479.89 843.417,-3476.67 833.517,-3472.89 833.326,-3479.89"/>
+</g>
+<!-- 10,4 -->
+<g id="node117" class="node"><title>10,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3035" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-3046.17" font-family="Times Roman,serif" font-size="10.00">10,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-3027 861,-3041 912,-3041 912,-3027 861,-3027"/>
+<text text-anchor="start" x="871" y="-3031.67" font-family="Times Roman,serif" font-size="10.00">AGATT</text>
+<polygon fill="#218559" stroke="#218559" points="861,-3013 861,-3027 912,-3027 912,-3013 861,-3013"/>
+<text text-anchor="start" x="871.5" y="-3017.67" font-family="Times Roman,serif" font-size="10.00">AATCT</text>
+</g>
+<!-- 9,3->10,4 -->
+<g id="edge540" class="edge"><title>9,3->10,4</title>
+<path fill="none" stroke="#218559" d="M761.883,-3447.53C777.959,-3389.82 808,-3282 808,-3282 808,-3282 820,-3197 820,-3197 820,-3197 830,-3083 830,-3083 830,-3083 837.283,-3076.76 846.596,-3068.78"/>
+<polygon fill="#218559" stroke="#218559" points="849.085,-3071.25 854.4,-3062.09 844.529,-3065.94 849.085,-3071.25"/>
+</g>
+<!-- 9,4->9,3 -->
+<g id="edge546" class="edge"><title>9,4->9,3</title>
+<path fill="none" stroke="#218559" d="M843.417,-3489.33C831.062,-3489.77 817.424,-3489.86 804.535,-3489.61"/>
+<polygon fill="#218559" stroke="#218559" points="804.491,-3486.11 794.398,-3489.33 804.298,-3493.1 804.491,-3486.11"/>
+</g>
+<!-- 8,2 -->
+<g id="node105" class="node"><title>8,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5024" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-5035.17" font-family="Times Roman,serif" font-size="10.00">8,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-5016 462,-5030 507,-5030 507,-5016 462,-5016"/>
+<text text-anchor="start" x="467.5" y="-5020.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+<polygon fill="#218559" stroke="#218559" points="462,-5002 462,-5016 507,-5016 507,-5002 462,-5002"/>
+<text text-anchor="start" x="470" y="-5006.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+</g>
+<!-- 9,4->8,2 -->
+<g id="edge544" class="edge"><title>9,4->8,2</title>
+<path fill="none" stroke="#ebb035" d="M870.102,-3516.5C853.546,-3551.38 830,-3601 830,-3601 830,-3601 808,-3996 808,-3996 808,-3996 674,-4511 674,-4511 674,-4511 562,-4541 562,-4541 562,-4541 540,-4855 540,-4855 540,-4855 515.396,-4929.25 498.805,-4979.32"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="495.426,-4978.39 495.603,-4988.98 502.071,-4980.59 495.426,-4978.39"/>
+</g>
+<!-- 8,1->24,1 -->
+<g id="edge102" class="edge"><title>8,1->24,1</title>
+<path fill="none" stroke="#dd1e2f" d="M382.78,-5047.48C400.328,-5060.06 422.158,-5075.7 441.047,-5089.23"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="439.049,-5092.1 449.217,-5095.08 443.126,-5086.41 439.049,-5092.1"/>
+</g>
+<!-- 8,1->7,3 -->
+<g id="edge106" class="edge"><title>8,1->7,3</title>
+<path fill="none" stroke="#06a2cb" d="M356.826,-4988.3C370.078,-4919.01 398,-4773 398,-4773 398,-4773 428,-4551 428,-4551 428,-4551 540,-4511 540,-4511 540,-4511 550,-4259 550,-4259 550,-4259 562,-4248 562,-4248 562,-4248 674,-4162 674,-4162 674,-4162 684,-3800 684,-3800 684,-3800 686,-3800 686,-3800 686,-3800 696,-3996 696,-3996 696,-3996 734.995,-4436.78 747.905,-4582.71"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="744.42,-4583.04 748.788,-4592.69 751.393,-4582.42 744.42,-4583.04"/>
+</g>
+<!-- 8,1->8,2 -->
+<g id="edge104" class="edge"><title>8,1->8,2</title>
+<path fill="none" stroke="#dd1e2f" d="M392.398,-5017.67C404.741,-5017.23 418.377,-5017.14 431.273,-5017.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="431.326,-5020.89 441.417,-5017.67 431.517,-5013.89 431.326,-5020.89"/>
+</g>
+<!-- 8,2->9,4 -->
+<g id="edge110" class="edge"><title>8,2->9,4</title>
+<path fill="none" stroke="#ebb035" d="M495.845,-4988.99C515.327,-4931.4 552,-4823 552,-4823 552,-4823 562,-4581 562,-4581 562,-4581 674,-4541 674,-4541 674,-4541 696,-4504 696,-4504 696,-4504 820,-4465 820,-4465 820,-4465 830,-3601 830,-3601 830,-3601 849.673,-3559.55 865.699,-3525.78"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="868.977,-3527.03 870.102,-3516.5 862.653,-3524.03 868.977,-3527.03"/>
+</g>
+<!-- 8,2->8,1 -->
+<g id="edge112" class="edge"><title>8,2->8,1</title>
+<path fill="none" stroke="#218559" d="M441.417,-5030.33C429.062,-5030.77 415.424,-5030.86 402.535,-5030.61"/>
+<polygon fill="#218559" stroke="#218559" points="402.491,-5027.11 392.398,-5030.33 402.298,-5034.1 402.491,-5027.11"/>
+</g>
+<!-- 8,2->8,3 -->
+<g id="edge108" class="edge"><title>8,2->8,3</title>
+<path fill="none" stroke="#dd1e2f" d="M526.398,-5017.67C538.741,-5017.23 552.377,-5017.14 565.273,-5017.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="565.326,-5020.89 575.417,-5017.67 565.517,-5013.89 565.326,-5020.89"/>
+</g>
+<!-- 8,3->7,1 -->
+<g id="edge116" class="edge"><title>8,3->7,1</title>
+<path fill="none" stroke="#06a2cb" d="M610.095,-4988.57C594.659,-4919.38 562,-4773 562,-4773 562,-4773 552,-4315 552,-4315 552,-4315 550,-4315 550,-4315 550,-4315 540,-4579 540,-4579 540,-4579 531.629,-4586.47 521.36,-4595.64"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="518.768,-4593.26 513.64,-4602.54 523.43,-4598.49 518.768,-4593.26"/>
+</g>
+<!-- 8,3->8,2 -->
+<g id="edge120" class="edge"><title>8,3->8,2</title>
+<path fill="none" stroke="#218559" d="M575.417,-5030.33C563.062,-5030.77 549.424,-5030.86 536.535,-5030.61"/>
+<polygon fill="#218559" stroke="#218559" points="536.491,-5027.11 526.398,-5030.33 536.298,-5034.1 536.491,-5027.11"/>
+</g>
+<!-- 8,3->8,4 -->
+<g id="edge114" class="edge"><title>8,3->8,4</title>
+<path fill="none" stroke="#dd1e2f" d="M660.398,-5017.67C672.741,-5017.23 686.377,-5017.14 699.273,-5017.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="699.326,-5020.89 709.417,-5017.67 699.517,-5013.89 699.326,-5020.89"/>
+</g>
+<!-- 8,3->19,4 -->
+<g id="edge118" class="edge"><title>8,3->19,4</title>
+<path fill="none" stroke="#218559" d="M587.705,-5049.97C574.511,-5061.28 562,-5072 562,-5072 562,-5072 552,-5193 552,-5193 552,-5193 545.818,-5195.09 537.182,-5198.01"/>
+<polygon fill="#218559" stroke="#218559" points="535.802,-5194.78 527.45,-5201.3 538.045,-5201.41 535.802,-5194.78"/>
+</g>
+<!-- 8,4->9,2 -->
+<g id="edge122" class="edge"><title>8,4->9,2</title>
+<path fill="none" stroke="#ebb035" d="M744.095,-4988.57C728.659,-4919.38 696,-4773 696,-4773 696,-4773 686,-3557 686,-3557 686,-3557 668.526,-3537.98 651.293,-3519.23"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="653.829,-3516.82 644.485,-3511.82 648.674,-3521.55 653.829,-3516.82"/>
+</g>
+<!-- 8,4->8,3 -->
+<g id="edge124" class="edge"><title>8,4->8,3</title>
+<path fill="none" stroke="#218559" d="M709.417,-5030.33C697.062,-5030.77 683.424,-5030.86 670.535,-5030.61"/>
+<polygon fill="#218559" stroke="#218559" points="670.491,-5027.11 660.398,-5030.33 670.298,-5034.1 670.491,-5027.11"/>
+</g>
+<!-- 11,1 -->
+<g id="node109" class="node"><title>11,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">11,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-652 325,-666 376,-666 376,-652 325,-652"/>
+<text text-anchor="start" x="333.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">CTGGC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-638 325,-652 376,-652 376,-638 325,-638"/>
+<text text-anchor="start" x="332.5" y="-642.667" font-family="Times Roman,serif" font-size="10.00">GCCAG</text>
+</g>
+<!-- 11,2 -->
+<g id="node110" class="node"><title>11,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">11,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-652 459,-666 510,-666 510,-652 459,-652"/>
+<text text-anchor="start" x="467.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">TGGCA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-638 459,-652 510,-652 510,-638 459,-638"/>
+<text text-anchor="start" x="467.5" y="-642.667" font-family="Times Roman,serif" font-size="10.00">TGCCA</text>
+</g>
+<!-- 11,1->11,2 -->
+<g id="edge548" class="edge"><title>11,1->11,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-653.529C406.501,-653.254 416.748,-653.183 426.703,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-656.817 436.933,-653.523 427.007,-649.819 426.864,-656.817"/>
+</g>
+<!-- 12,2 -->
+<g id="node125" class="node"><title>12,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-564" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-575.167" font-family="Times Roman,serif" font-size="10.00">12,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-556 459,-570 510,-570 510,-556 459,-556"/>
+<text text-anchor="start" x="468.5" y="-560.667" font-family="Times Roman,serif" font-size="10.00">TCTGG</text>
+<polygon fill="#218559" stroke="#218559" points="459,-542 459,-556 510,-556 510,-542 459,-542"/>
+<text text-anchor="start" x="467" y="-546.667" font-family="Times Roman,serif" font-size="10.00">CCAGA</text>
+</g>
+<!-- 11,1->12,2 -->
+<g id="edge550" class="edge"><title>11,1->12,2</title>
+<path fill="none" stroke="#218559" d="M387.58,-637.894C403.307,-628.643 418,-620 418,-620 418,-620 430.304,-609.561 444.286,-597.696"/>
+<polygon fill="#218559" stroke="#218559" points="446.799,-600.154 452.16,-591.016 442.27,-594.817 446.799,-600.154"/>
+</g>
+<!-- 11,2->11,1 -->
+<g id="edge556" class="edge"><title>11,2->11,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-666.477C427.29,-666.749 417.041,-666.817 407.091,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-663.18 396.867,-666.471 406.792,-670.179 406.937,-663.18"/>
+</g>
+<!-- 11,3 -->
+<g id="node111" class="node"><title>11,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">11,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-652 593,-666 644,-666 644,-652 593,-652"/>
+<text text-anchor="start" x="600.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">GGCAG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-638 593,-652 644,-652 644,-638 593,-638"/>
+<text text-anchor="start" x="601.5" y="-642.667" font-family="Times Roman,serif" font-size="10.00">CTGCC</text>
+</g>
+<!-- 11,2->11,3 -->
+<g id="edge554" class="edge"><title>11,2->11,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-653.529C540.501,-653.254 550.748,-653.183 560.703,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-656.817 570.933,-653.523 561.007,-649.819 560.864,-656.817"/>
+</g>
+<!-- 10,1 -->
+<g id="node114" class="node"><title>10,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3035" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-3046.17" font-family="Times Roman,serif" font-size="10.00">10,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-3027 459,-3041 510,-3041 510,-3027 459,-3027"/>
+<text text-anchor="start" x="466.5" y="-3031.67" font-family="Times Roman,serif" font-size="10.00">GGCAG</text>
+<polygon fill="#218559" stroke="#218559" points="459,-3013 459,-3027 510,-3027 510,-3013 459,-3013"/>
+<text text-anchor="start" x="467.5" y="-3017.67" font-family="Times Roman,serif" font-size="10.00">CTGCC</text>
+</g>
+<!-- 11,2->10,1 -->
+<g id="edge552" class="edge"><title>11,2->10,1</title>
+<path fill="none" stroke="#dd1e2f" d="M480.949,-696.137C467.359,-857.109 413,-1501 413,-1501 413,-1501 413,-2875 413,-2875 413,-2875 443.68,-2944.14 464.704,-2991.52"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="461.513,-2992.96 468.769,-3000.68 467.912,-2990.12 461.513,-2992.96"/>
+</g>
+<!-- 11,3->11,2 -->
+<g id="edge562" class="edge"><title>11,3->11,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-666.477C561.29,-666.749 551.041,-666.817 541.091,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-663.18 530.867,-666.471 540.792,-670.179 540.937,-663.18"/>
+</g>
+<!-- 11,4 -->
+<g id="node112" class="node"><title>11,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">11,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-652 727,-666 778,-666 778,-652 727,-652"/>
+<text text-anchor="start" x="734.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">GCAGA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-638 727,-652 778,-652 778,-638 727,-638"/>
+<text text-anchor="start" x="737" y="-642.667" font-family="Times Roman,serif" font-size="10.00">TCTGC</text>
+</g>
+<!-- 11,3->11,4 -->
+<g id="edge558" class="edge"><title>11,3->11,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-653.529C674.501,-653.254 684.748,-653.183 694.703,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-656.817 704.933,-653.523 695.007,-649.819 694.864,-656.817"/>
+</g>
+<!-- 12,4 -->
+<g id="node127" class="node"><title>12,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-564" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-575.167" font-family="Times Roman,serif" font-size="10.00">12,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-556 727,-570 778,-570 778,-556 727,-556"/>
+<text text-anchor="start" x="735.5" y="-560.667" font-family="Times Roman,serif" font-size="10.00">TGGCA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-542 727,-556 778,-556 778,-542 727,-542"/>
+<text text-anchor="start" x="735.5" y="-546.667" font-family="Times Roman,serif" font-size="10.00">TGCCA</text>
+</g>
+<!-- 11,3->12,4 -->
+<g id="edge560" class="edge"><title>11,3->12,4</title>
+<path fill="none" stroke="#218559" d="M655.58,-637.894C671.307,-628.643 686,-620 686,-620 686,-620 698.304,-609.561 712.286,-597.696"/>
+<polygon fill="#218559" stroke="#218559" points="714.799,-600.154 720.16,-591.016 710.27,-594.817 714.799,-600.154"/>
+</g>
+<!-- 11,4->11,3 -->
+<g id="edge566" class="edge"><title>11,4->11,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-666.477C695.29,-666.749 685.041,-666.817 675.091,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-663.18 664.867,-666.471 674.792,-670.179 674.937,-663.18"/>
+</g>
+<!-- 10,3 -->
+<g id="node116" class="node"><title>10,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3035" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-3046.17" font-family="Times Roman,serif" font-size="10.00">10,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-3027 727,-3041 778,-3041 778,-3027 727,-3027"/>
+<text text-anchor="start" x="736" y="-3031.67" font-family="Times Roman,serif" font-size="10.00">CAGAT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-3013 727,-3027 778,-3027 778,-3013 727,-3013"/>
+<text text-anchor="start" x="737" y="-3017.67" font-family="Times Roman,serif" font-size="10.00">ATCTG</text>
+</g>
+<!-- 11,4->10,3 -->
+<g id="edge564" class="edge"><title>11,4->10,3</title>
+<path fill="none" stroke="#dd1e2f" d="M720.07,-687.164C702.813,-701.845 685,-717 685,-717 685,-717 685,-2875 685,-2875 685,-2875 713.831,-2943.85 733.667,-2991.22"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730.536,-2992.8 737.627,-3000.68 736.993,-2990.1 730.536,-2992.8"/>
+</g>
+<!-- 10,1->11,2 -->
+<g id="edge128" class="edge"><title>10,1->11,2</title>
+<path fill="none" stroke="#218559" d="M468.769,-3000.68C447.907,-2953.66 413,-2875 413,-2875 413,-2875 413,-1501 413,-1501 413,-1501 465.257,-882.016 480.107,-706.113"/>
+<polygon fill="#218559" stroke="#218559" points="483.595,-706.396 480.949,-696.137 476.62,-705.807 483.595,-706.396"/>
+</g>
+<!-- 10,1->10,2 -->
+<g id="edge126" class="edge"><title>10,1->10,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-3028.53C540.501,-3028.25 550.748,-3028.18 560.703,-3028.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-3031.82 570.933,-3028.52 561.007,-3024.82 560.864,-3031.82"/>
+</g>
+<!-- 10,2->9,1 -->
+<g id="edge130" class="edge"><title>10,2->9,1</title>
+<path fill="none" stroke="#dd1e2f" d="M586.4,-3062.09C573.697,-3072.97 562,-3083 562,-3083 562,-3083 540,-3282 540,-3282 540,-3282 513.155,-3378.35 496.638,-3437.64"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="493.195,-3436.96 493.883,-3447.53 499.938,-3438.83 493.195,-3436.96"/>
+</g>
+<!-- 10,2->10,1 -->
+<g id="edge134" class="edge"><title>10,2->10,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-3041.48C561.29,-3041.75 551.041,-3041.82 541.091,-3041.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-3038.18 530.867,-3041.47 540.792,-3045.18 540.937,-3038.18"/>
+</g>
+<!-- 10,2->10,3 -->
+<g id="edge132" class="edge"><title>10,2->10,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-3028.53C674.501,-3028.25 684.748,-3028.18 694.703,-3028.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-3031.82 704.933,-3028.52 695.007,-3024.82 694.864,-3031.82"/>
+</g>
+<!-- 10,3->11,4 -->
+<g id="edge138" class="edge"><title>10,3->11,4</title>
+<path fill="none" stroke="#218559" d="M737.627,-3000.68C717.94,-2953.66 685,-2875 685,-2875 685,-2875 685,-717 685,-717 685,-717 697.917,-706.011 712.409,-693.682"/>
+<polygon fill="#218559" stroke="#218559" points="714.721,-696.31 720.07,-687.164 710.185,-690.979 714.721,-696.31"/>
+</g>
+<!-- 10,3->10,2 -->
+<g id="edge140" class="edge"><title>10,3->10,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-3041.48C695.29,-3041.75 685.041,-3041.82 675.091,-3041.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-3038.18 664.867,-3041.47 674.792,-3045.18 674.937,-3038.18"/>
+</g>
+<!-- 10,3->10,4 -->
+<g id="edge136" class="edge"><title>10,3->10,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-3028.53C808.501,-3028.25 818.748,-3028.18 828.703,-3028.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-3031.82 838.933,-3028.52 829.007,-3024.82 828.864,-3031.82"/>
+</g>
+<!-- 10,4->9,3 -->
+<g id="edge142" class="edge"><title>10,4->9,3</title>
+<path fill="none" stroke="#dd1e2f" d="M854.4,-3062.09C841.697,-3072.97 830,-3083 830,-3083 830,-3083 808,-3282 808,-3282 808,-3282 781.155,-3378.35 764.638,-3437.64"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="761.195,-3436.96 761.883,-3447.53 767.938,-3438.83 761.195,-3436.96"/>
+</g>
+<!-- 10,4->10,3 -->
+<g id="edge144" class="edge"><title>10,4->10,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-3041.48C829.29,-3041.75 819.041,-3041.82 809.091,-3041.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-3038.18 798.867,-3041.47 808.792,-3045.18 808.937,-3038.18"/>
+</g>
+<!-- 13,1 -->
+<g id="node119" class="node"><title>13,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-468" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-479.167" font-family="Times Roman,serif" font-size="10.00">13,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-460 325,-474 376,-474 376,-460 325,-460"/>
+<text text-anchor="start" x="336" y="-464.667" font-family="Times Roman,serif" font-size="10.00">ATCTC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-446 325,-460 376,-460 376,-446 325,-446"/>
+<text text-anchor="start" x="334" y="-450.667" font-family="Times Roman,serif" font-size="10.00">GAGAT</text>
+</g>
+<!-- 13,2 -->
+<g id="node120" class="node"><title>13,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-468" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-479.167" font-family="Times Roman,serif" font-size="10.00">13,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-460 459,-474 510,-474 510,-460 459,-460"/>
+<text text-anchor="start" x="470" y="-464.667" font-family="Times Roman,serif" font-size="10.00">TCTCT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-446 459,-460 510,-460 510,-446 459,-446"/>
+<text text-anchor="start" x="467" y="-450.667" font-family="Times Roman,serif" font-size="10.00">AGAGA</text>
+</g>
+<!-- 13,1->13,2 -->
+<g id="edge568" class="edge"><title>13,1->13,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-461.529C406.501,-461.254 416.748,-461.183 426.703,-461.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-464.817 436.933,-461.523 427.007,-457.819 426.864,-464.817"/>
+</g>
+<!-- 14,2 -->
+<g id="node135" class="node"><title>14,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-372" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-383.167" font-family="Times Roman,serif" font-size="10.00">14,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-364 459,-378 510,-378 510,-364 459,-364"/>
+<text text-anchor="start" x="469.5" y="-368.667" font-family="Times Roman,serif" font-size="10.00">CATCT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-350 459,-364 510,-364 510,-350 459,-350"/>
+<text text-anchor="start" x="468" y="-354.667" font-family="Times Roman,serif" font-size="10.00">AGATG</text>
+</g>
+<!-- 13,1->14,2 -->
+<g id="edge570" class="edge"><title>13,1->14,2</title>
+<path fill="none" stroke="#218559" d="M387.58,-445.894C403.307,-436.643 418,-428 418,-428 418,-428 430.304,-417.561 444.286,-405.696"/>
+<polygon fill="#218559" stroke="#218559" points="446.799,-408.154 452.16,-399.016 442.27,-402.817 446.799,-408.154"/>
+</g>
+<!-- 13,2->13,1 -->
+<g id="edge576" class="edge"><title>13,2->13,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-474.477C427.29,-474.749 417.041,-474.817 407.091,-474.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-471.18 396.867,-474.471 406.792,-478.179 406.937,-471.18"/>
+</g>
+<!-- 13,3 -->
+<g id="node121" class="node"><title>13,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-468" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-479.167" font-family="Times Roman,serif" font-size="10.00">13,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-460 593,-474 644,-474 644,-460 593,-460"/>
+<text text-anchor="start" x="603" y="-464.667" font-family="Times Roman,serif" font-size="10.00">CTCTG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-446 593,-460 644,-460 644,-446 593,-446"/>
+<text text-anchor="start" x="601" y="-450.667" font-family="Times Roman,serif" font-size="10.00">CAGAG</text>
+</g>
+<!-- 13,2->13,3 -->
+<g id="edge574" class="edge"><title>13,2->13,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-461.529C540.501,-461.254 550.748,-461.183 560.703,-461.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-464.817 570.933,-461.523 561.007,-457.819 560.864,-464.817"/>
+</g>
+<!-- 12,1 -->
+<g id="node124" class="node"><title>12,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-564" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-575.167" font-family="Times Roman,serif" font-size="10.00">12,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-556 325,-570 376,-570 376,-556 325,-556"/>
+<text text-anchor="start" x="335" y="-560.667" font-family="Times Roman,serif" font-size="10.00">CTCTG</text>
+<polygon fill="#218559" stroke="#218559" points="325,-542 325,-556 376,-556 376,-542 325,-542"/>
+<text text-anchor="start" x="333" y="-546.667" font-family="Times Roman,serif" font-size="10.00">CAGAG</text>
+</g>
+<!-- 13,2->12,1 -->
+<g id="edge572" class="edge"><title>13,2->12,1</title>
+<path fill="none" stroke="#dd1e2f" d="M452.16,-495.016C435.283,-509.336 418,-524 418,-524 418,-524 408.3,-529.706 396.227,-536.808"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="394.425,-533.807 387.58,-541.894 397.974,-539.841 394.425,-533.807"/>
+</g>
+<!-- 13,3->13,2 -->
+<g id="edge582" class="edge"><title>13,3->13,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-474.477C561.29,-474.749 551.041,-474.817 541.091,-474.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-471.18 530.867,-474.471 540.792,-478.179 540.937,-471.18"/>
+</g>
+<!-- 13,4 -->
+<g id="node122" class="node"><title>13,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-468" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-479.167" font-family="Times Roman,serif" font-size="10.00">13,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-460 727,-474 778,-474 778,-460 727,-460"/>
+<text text-anchor="start" x="736.5" y="-464.667" font-family="Times Roman,serif" font-size="10.00">TCTGG</text>
+<polygon fill="#218559" stroke="#218559" points="727,-446 727,-460 778,-460 778,-446 727,-446"/>
+<text text-anchor="start" x="735" y="-450.667" font-family="Times Roman,serif" font-size="10.00">CCAGA</text>
+</g>
+<!-- 13,3->13,4 -->
+<g id="edge578" class="edge"><title>13,3->13,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-461.529C674.501,-461.254 684.748,-461.183 694.703,-461.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-464.817 704.933,-461.523 695.007,-457.819 694.864,-464.817"/>
+</g>
+<!-- 14,4 -->
+<g id="node137" class="node"><title>14,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-372" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-383.167" font-family="Times Roman,serif" font-size="10.00">14,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-364 727,-378 778,-378 778,-364 727,-364"/>
+<text text-anchor="start" x="738" y="-368.667" font-family="Times Roman,serif" font-size="10.00">TCTCT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-350 727,-364 778,-364 778,-350 727,-350"/>
+<text text-anchor="start" x="735" y="-354.667" font-family="Times Roman,serif" font-size="10.00">AGAGA</text>
+</g>
+<!-- 13,3->14,4 -->
+<g id="edge580" class="edge"><title>13,3->14,4</title>
+<path fill="none" stroke="#218559" d="M655.58,-445.894C671.307,-436.643 686,-428 686,-428 686,-428 698.304,-417.561 712.286,-405.696"/>
+<polygon fill="#218559" stroke="#218559" points="714.799,-408.154 720.16,-399.016 710.27,-402.817 714.799,-408.154"/>
+</g>
+<!-- 13,4->13,3 -->
+<g id="edge586" class="edge"><title>13,4->13,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-474.477C695.29,-474.749 685.041,-474.817 675.091,-474.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-471.18 664.867,-474.471 674.792,-478.179 674.937,-471.18"/>
+</g>
+<!-- 12,3 -->
+<g id="node126" class="node"><title>12,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-564" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-575.167" font-family="Times Roman,serif" font-size="10.00">12,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-556 593,-570 644,-570 644,-556 593,-556"/>
+<text text-anchor="start" x="601.5" y="-560.667" font-family="Times Roman,serif" font-size="10.00">CTGGC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-542 593,-556 644,-556 644,-542 593,-542"/>
+<text text-anchor="start" x="600.5" y="-546.667" font-family="Times Roman,serif" font-size="10.00">GCCAG</text>
+</g>
+<!-- 13,4->12,3 -->
+<g id="edge584" class="edge"><title>13,4->12,3</title>
+<path fill="none" stroke="#dd1e2f" d="M720.16,-495.016C703.283,-509.336 686,-524 686,-524 686,-524 676.3,-529.706 664.227,-536.808"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="662.425,-533.807 655.58,-541.894 665.974,-539.841 662.425,-533.807"/>
+</g>
+<!-- 12,1->13,2 -->
+<g id="edge148" class="edge"><title>12,1->13,2</title>
+<path fill="none" stroke="#218559" d="M384.857,-539.028C402.072,-526.694 422.998,-511.703 441.18,-498.677"/>
+<polygon fill="#218559" stroke="#218559" points="443.227,-501.516 449.317,-492.847 439.15,-495.826 443.227,-501.516"/>
+</g>
+<!-- 12,1->12,2 -->
+<g id="edge146" class="edge"><title>12,1->12,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-557.529C406.501,-557.254 416.748,-557.183 426.703,-557.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-560.817 436.933,-557.523 427.007,-553.819 426.864,-560.817"/>
+</g>
+<!-- 12,2->11,1 -->
+<g id="edge150" class="edge"><title>12,2->11,1</title>
+<path fill="none" stroke="#dd1e2f" d="M449.317,-588.847C432.127,-601.162 411.205,-616.152 393.005,-629.191"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="390.948,-626.359 384.857,-635.028 395.025,-632.049 390.948,-626.359"/>
+</g>
+<!-- 12,2->12,1 -->
+<g id="edge154" class="edge"><title>12,2->12,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-570.477C427.29,-570.749 417.041,-570.817 407.091,-570.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-567.18 396.867,-570.471 406.792,-574.179 406.937,-567.18"/>
+</g>
+<!-- 12,2->12,3 -->
+<g id="edge152" class="edge"><title>12,2->12,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-557.529C540.501,-557.254 550.748,-557.183 560.703,-557.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-560.817 570.933,-557.523 561.007,-553.819 560.864,-560.817"/>
+</g>
+<!-- 12,3->13,4 -->
+<g id="edge158" class="edge"><title>12,3->13,4</title>
+<path fill="none" stroke="#218559" d="M652.857,-539.028C670.072,-526.694 690.998,-511.703 709.18,-498.677"/>
+<polygon fill="#218559" stroke="#218559" points="711.227,-501.516 717.317,-492.847 707.15,-495.826 711.227,-501.516"/>
+</g>
+<!-- 12,3->12,2 -->
+<g id="edge160" class="edge"><title>12,3->12,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-570.477C561.29,-570.749 551.041,-570.817 541.091,-570.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-567.18 530.867,-570.471 540.792,-574.179 540.937,-567.18"/>
+</g>
+<!-- 12,3->12,4 -->
+<g id="edge156" class="edge"><title>12,3->12,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-557.529C674.501,-557.254 684.748,-557.183 694.703,-557.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-560.817 704.933,-557.523 695.007,-553.819 694.864,-560.817"/>
+</g>
+<!-- 12,4->11,3 -->
+<g id="edge162" class="edge"><title>12,4->11,3</title>
+<path fill="none" stroke="#dd1e2f" d="M717.317,-588.847C700.127,-601.162 679.205,-616.152 661.005,-629.191"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="658.948,-626.359 652.857,-635.028 663.025,-632.049 658.948,-626.359"/>
+</g>
+<!-- 12,4->12,3 -->
+<g id="edge164" class="edge"><title>12,4->12,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-570.477C695.29,-570.749 685.041,-570.817 675.091,-570.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-567.18 664.867,-570.471 674.792,-574.179 674.937,-567.18"/>
+</g>
+<!-- 15,1 -->
+<g id="node129" class="node"><title>15,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-276" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-287.167" font-family="Times Roman,serif" font-size="10.00">15,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-268 325,-282 376,-282 376,-268 325,-268"/>
+<text text-anchor="start" x="332.5" y="-272.667" font-family="Times Roman,serif" font-size="10.00">CGGCA</text>
+<polygon fill="#218559" stroke="#218559" points="325,-254 325,-268 376,-268 376,-254 325,-254"/>
+<text text-anchor="start" x="333.5" y="-258.667" font-family="Times Roman,serif" font-size="10.00">TGCCG</text>
+</g>
+<!-- 15,2 -->
+<g id="node130" class="node"><title>15,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-276" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-287.167" font-family="Times Roman,serif" font-size="10.00">15,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-268 459,-282 510,-282 510,-268 459,-268"/>
+<text text-anchor="start" x="468" y="-272.667" font-family="Times Roman,serif" font-size="10.00">GGCAT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-254 459,-268 510,-268 510,-254 459,-254"/>
+<text text-anchor="start" x="468" y="-258.667" font-family="Times Roman,serif" font-size="10.00">ATGCC</text>
+</g>
+<!-- 15,1->15,2 -->
+<g id="edge588" class="edge"><title>15,1->15,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-269.529C406.501,-269.254 416.748,-269.183 426.703,-269.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-272.817 436.933,-269.523 427.007,-265.819 426.864,-272.817"/>
+</g>
+<!-- 16,2 -->
+<g id="node145" class="node"><title>16,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-148" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">16,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-140 459,-154 510,-154 510,-140 459,-140"/>
+<text text-anchor="start" x="466.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">ACGGC</text>
+<polygon fill="#218559" stroke="#218559" points="459,-126 459,-140 510,-140 510,-126 459,-126"/>
+<text text-anchor="start" x="467.5" y="-130.667" font-family="Times Roman,serif" font-size="10.00">GCCGT</text>
+</g>
+<!-- 15,1->16,2 -->
+<g id="edge590" class="edge"><title>15,1->16,2</title>
+<path fill="none" stroke="#218559" d="M384.398,-250.707C401.265,-238.305 418,-226 418,-226 418,-226 434.96,-205.956 451.686,-186.19"/>
+<polygon fill="#218559" stroke="#218559" points="454.506,-188.275 458.294,-178.38 449.162,-183.753 454.506,-188.275"/>
+</g>
+<!-- 15,2->15,1 -->
+<g id="edge596" class="edge"><title>15,2->15,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-282.477C427.29,-282.749 417.041,-282.817 407.091,-282.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-279.18 396.867,-282.471 406.792,-286.179 406.937,-279.18"/>
+</g>
+<!-- 15,3 -->
+<g id="node131" class="node"><title>15,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-276" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-287.167" font-family="Times Roman,serif" font-size="10.00">15,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-268 593,-282 644,-282 644,-268 593,-268"/>
+<text text-anchor="start" x="602.5" y="-272.667" font-family="Times Roman,serif" font-size="10.00">GCATC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-254 593,-268 644,-268 644,-254 593,-254"/>
+<text text-anchor="start" x="602" y="-258.667" font-family="Times Roman,serif" font-size="10.00">GATGC</text>
+</g>
+<!-- 15,2->15,3 -->
+<g id="edge594" class="edge"><title>15,2->15,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-269.529C540.501,-269.254 550.748,-269.183 560.703,-269.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-272.817 570.933,-269.523 561.007,-265.819 560.864,-272.817"/>
+</g>
+<!-- 14,1 -->
+<g id="node134" class="node"><title>14,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-372" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-383.167" font-family="Times Roman,serif" font-size="10.00">14,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-364 325,-378 376,-378 376,-364 325,-364"/>
+<text text-anchor="start" x="334.5" y="-368.667" font-family="Times Roman,serif" font-size="10.00">GCATC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-350 325,-364 376,-364 376,-350 325,-350"/>
+<text text-anchor="start" x="334" y="-354.667" font-family="Times Roman,serif" font-size="10.00">GATGC</text>
+</g>
+<!-- 15,2->14,1 -->
+<g id="edge592" class="edge"><title>15,2->14,1</title>
+<path fill="none" stroke="#dd1e2f" d="M452.16,-303.016C435.283,-317.336 418,-332 418,-332 418,-332 408.3,-337.706 396.227,-344.808"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="394.425,-341.807 387.58,-349.894 397.974,-347.841 394.425,-341.807"/>
+</g>
+<!-- 15,3->15,2 -->
+<g id="edge602" class="edge"><title>15,3->15,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-282.477C561.29,-282.749 551.041,-282.817 541.091,-282.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-279.18 530.867,-282.471 540.792,-286.179 540.937,-279.18"/>
+</g>
+<!-- 15,4 -->
+<g id="node132" class="node"><title>15,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-276" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-287.167" font-family="Times Roman,serif" font-size="10.00">15,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-268 727,-282 778,-282 778,-268 727,-268"/>
+<text text-anchor="start" x="737.5" y="-272.667" font-family="Times Roman,serif" font-size="10.00">CATCT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-254 727,-268 778,-268 778,-254 727,-254"/>
+<text text-anchor="start" x="736" y="-258.667" font-family="Times Roman,serif" font-size="10.00">AGATG</text>
+</g>
+<!-- 15,3->15,4 -->
+<g id="edge598" class="edge"><title>15,3->15,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-269.529C674.501,-269.254 684.748,-269.183 694.703,-269.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-272.817 704.933,-269.523 695.007,-265.819 694.864,-272.817"/>
+</g>
+<!-- 16,4 -->
+<g id="node147" class="node"><title>16,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-148" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">16,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-140 727,-154 778,-154 778,-140 727,-140"/>
+<text text-anchor="start" x="736" y="-144.667" font-family="Times Roman,serif" font-size="10.00">GGCAT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-126 727,-140 778,-140 778,-126 727,-126"/>
+<text text-anchor="start" x="736" y="-130.667" font-family="Times Roman,serif" font-size="10.00">ATGCC</text>
+</g>
+<!-- 15,3->16,4 -->
+<g id="edge600" class="edge"><title>15,3->16,4</title>
+<path fill="none" stroke="#218559" d="M652.398,-250.707C669.265,-238.305 686,-226 686,-226 686,-226 702.96,-205.956 719.686,-186.19"/>
+<polygon fill="#218559" stroke="#218559" points="722.506,-188.275 726.294,-178.38 717.162,-183.753 722.506,-188.275"/>
+</g>
+<!-- 15,4->15,3 -->
+<g id="edge606" class="edge"><title>15,4->15,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-282.477C695.29,-282.749 685.041,-282.817 675.091,-282.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-279.18 664.867,-282.471 674.792,-286.179 674.937,-279.18"/>
+</g>
+<!-- 14,3 -->
+<g id="node136" class="node"><title>14,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-372" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-383.167" font-family="Times Roman,serif" font-size="10.00">14,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-364 593,-378 644,-378 644,-364 593,-364"/>
+<text text-anchor="start" x="604" y="-368.667" font-family="Times Roman,serif" font-size="10.00">ATCTC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-350 593,-364 644,-364 644,-350 593,-350"/>
+<text text-anchor="start" x="602" y="-354.667" font-family="Times Roman,serif" font-size="10.00">GAGAT</text>
+</g>
+<!-- 15,4->14,3 -->
+<g id="edge604" class="edge"><title>15,4->14,3</title>
+<path fill="none" stroke="#dd1e2f" d="M720.16,-303.016C703.283,-317.336 686,-332 686,-332 686,-332 676.3,-337.706 664.227,-344.808"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="662.425,-341.807 655.58,-349.894 665.974,-347.841 662.425,-341.807"/>
+</g>
+<!-- 14,1->15,2 -->
+<g id="edge168" class="edge"><title>14,1->15,2</title>
+<path fill="none" stroke="#218559" d="M384.857,-347.028C402.072,-334.694 422.998,-319.703 441.18,-306.677"/>
+<polygon fill="#218559" stroke="#218559" points="443.227,-309.516 449.317,-300.847 439.15,-303.826 443.227,-309.516"/>
+</g>
+<!-- 14,1->14,2 -->
+<g id="edge166" class="edge"><title>14,1->14,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-365.529C406.501,-365.254 416.748,-365.183 426.703,-365.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-368.817 436.933,-365.523 427.007,-361.819 426.864,-368.817"/>
+</g>
+<!-- 14,2->13,1 -->
+<g id="edge170" class="edge"><title>14,2->13,1</title>
+<path fill="none" stroke="#dd1e2f" d="M449.317,-396.847C432.127,-409.162 411.205,-424.152 393.005,-437.191"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="390.948,-434.359 384.857,-443.028 395.025,-440.049 390.948,-434.359"/>
+</g>
+<!-- 14,2->14,1 -->
+<g id="edge174" class="edge"><title>14,2->14,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-378.477C427.29,-378.749 417.041,-378.817 407.091,-378.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-375.18 396.867,-378.471 406.792,-382.179 406.937,-375.18"/>
+</g>
+<!-- 14,2->14,3 -->
+<g id="edge172" class="edge"><title>14,2->14,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-365.529C540.501,-365.254 550.748,-365.183 560.703,-365.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-368.817 570.933,-365.523 561.007,-361.819 560.864,-368.817"/>
+</g>
+<!-- 14,3->15,4 -->
+<g id="edge178" class="edge"><title>14,3->15,4</title>
+<path fill="none" stroke="#218559" d="M652.857,-347.028C670.072,-334.694 690.998,-319.703 709.18,-306.677"/>
+<polygon fill="#218559" stroke="#218559" points="711.227,-309.516 717.317,-300.847 707.15,-303.826 711.227,-309.516"/>
+</g>
+<!-- 14,3->14,2 -->
+<g id="edge180" class="edge"><title>14,3->14,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-378.477C561.29,-378.749 551.041,-378.817 541.091,-378.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-375.18 530.867,-378.471 540.792,-382.179 540.937,-375.18"/>
+</g>
+<!-- 14,3->14,4 -->
+<g id="edge176" class="edge"><title>14,3->14,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-365.529C674.501,-365.254 684.748,-365.183 694.703,-365.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-368.817 704.933,-365.523 695.007,-361.819 694.864,-368.817"/>
+</g>
+<!-- 14,4->13,3 -->
+<g id="edge182" class="edge"><title>14,4->13,3</title>
+<path fill="none" stroke="#dd1e2f" d="M717.317,-396.847C700.127,-409.162 679.205,-424.152 661.005,-437.191"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="658.948,-434.359 652.857,-443.028 663.025,-440.049 658.948,-434.359"/>
+</g>
+<!-- 14,4->14,3 -->
+<g id="edge184" class="edge"><title>14,4->14,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-378.477C695.29,-378.749 685.041,-378.817 675.091,-378.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-375.18 664.867,-378.471 674.792,-382.179 674.937,-375.18"/>
+</g>
+<!-- 17,1->24,1 -->
+<g id="edge614" class="edge"><title>17,1->24,1</title>
+<path fill="none" stroke="#218559" d="M364.013,-3982.45C378.18,-4017.28 398,-4066 398,-4066 398,-4066 418,-4361 418,-4361 418,-4361 428,-5072 428,-5072 428,-5072 435.283,-5078.24 444.596,-5086.22"/>
+<polygon fill="#218559" stroke="#218559" points="442.529,-5089.06 452.4,-5092.91 447.085,-5083.75 442.529,-5089.06"/>
+</g>
+<!-- 17,1->23,2 -->
+<g id="edge610" class="edge"><title>17,1->23,2</title>
+<path fill="none" stroke="#06a2cb" d="M365.308,-3913.67C384.805,-3869.95 416,-3800 416,-3800 416,-3800 418,-3800 418,-3800 418,-3800 428,-4677 428,-4677 428,-4677 435.283,-4683.24 444.596,-4691.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="442.529,-4694.06 452.4,-4697.91 447.085,-4688.75 442.529,-4694.06"/>
+</g>
+<!-- 17,1->17,2 -->
+<g id="edge608" class="edge"><title>17,1->17,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-3941.53C406.501,-3941.25 416.748,-3941.18 426.703,-3941.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-3944.82 436.933,-3941.52 427.007,-3937.82 426.864,-3944.82"/>
+</g>
+<!-- 18,3 -->
+<g id="node156" class="node"><title>18,3</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-4463" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-4474.17" font-family="Times Roman,serif" font-size="10.00">18,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-4455 459,-4469 510,-4469 510,-4455 459,-4455"/>
+<text text-anchor="start" x="470" y="-4459.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-4441 459,-4455 510,-4455 510,-4441 459,-4441"/>
+<text text-anchor="start" x="467.5" y="-4445.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+</g>
+<!-- 17,1->18,3 -->
+<g id="edge612" class="edge"><title>17,1->18,3</title>
+<path fill="none" stroke="#06a2cb" d="M365.188,-3913.83C379.25,-3882.19 398,-3840 398,-3840 398,-3840 416,-3775 416,-3775 416,-3775 418,-3775 418,-3775 418,-3775 428,-4162 428,-4162 428,-4162 459.813,-4333 475.483,-4417.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="472.086,-4418.1 477.356,-4427.29 478.968,-4416.82 472.086,-4418.1"/>
+</g>
+<!-- 17,2->23,1 -->
+<g id="edge620" class="edge"><title>17,2->23,1</title>
+<path fill="none" stroke="#06a2cb" d="M453.052,-3975.63C440.1,-3987.2 428,-3998 428,-3998 428,-3998 416,-4190 416,-4190 416,-4190 398,-4511 398,-4511 398,-4511 374.399,-4616.22 360.296,-4679.1"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="356.808,-4678.66 358.034,-4689.18 363.638,-4680.19 356.808,-4678.66"/>
+</g>
+<!-- 17,2->17,1 -->
+<g id="edge622" class="edge"><title>17,2->17,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-3954.48C427.29,-3954.75 417.041,-3954.82 407.091,-3954.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-3951.18 396.867,-3954.47 406.792,-3958.18 406.937,-3951.18"/>
+</g>
+<!-- 17,3 -->
+<g id="node141" class="node"><title>17,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3948" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-3959.17" font-family="Times Roman,serif" font-size="10.00">17,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-3940 593,-3954 644,-3954 644,-3940 593,-3940"/>
+<text text-anchor="start" x="600.5" y="-3944.67" font-family="Times Roman,serif" font-size="10.00">AACGG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-3926 593,-3940 644,-3940 644,-3926 593,-3926"/>
+<text text-anchor="start" x="603" y="-3930.67" font-family="Times Roman,serif" font-size="10.00">CCGTT</text>
+</g>
+<!-- 17,2->17,3 -->
+<g id="edge618" class="edge"><title>17,2->17,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-3941.53C540.501,-3941.25 550.748,-3941.18 560.703,-3941.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-3944.82 570.933,-3941.52 561.007,-3937.82 560.864,-3944.82"/>
+</g>
+<!-- 16,1 -->
+<g id="node144" class="node"><title>16,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-148" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">16,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-140 325,-154 376,-154 376,-140 325,-140"/>
+<text text-anchor="start" x="332.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">AACGG</text>
+<polygon fill="#218559" stroke="#218559" points="325,-126 325,-140 376,-140 376,-126 325,-126"/>
+<text text-anchor="start" x="335" y="-130.667" font-family="Times Roman,serif" font-size="10.00">CCGTT</text>
+</g>
+<!-- 17,2->16,1 -->
+<g id="edge616" class="edge"><title>17,2->16,1</title>
+<path fill="none" stroke="#dd1e2f" d="M476.036,-3912.3C460.575,-3843.01 428,-3697 428,-3697 428,-3697 418,-2372 418,-2372 418,-2372 398,-228 398,-228 398,-228 386.635,-209.059 374.965,-189.609"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="377.947,-187.775 369.801,-181.001 371.944,-191.377 377.947,-187.775"/>
+</g>
+<!-- 17,3->17,2 -->
+<g id="edge628" class="edge"><title>17,3->17,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-3954.48C561.29,-3954.75 551.041,-3954.82 541.091,-3954.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-3951.18 530.867,-3954.47 540.792,-3958.18 540.937,-3951.18"/>
+</g>
+<!-- 17,4 -->
+<g id="node142" class="node"><title>17,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3948" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-3959.17" font-family="Times Roman,serif" font-size="10.00">17,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-3940 727,-3954 778,-3954 778,-3940 727,-3940"/>
+<text text-anchor="start" x="734.5" y="-3944.67" font-family="Times Roman,serif" font-size="10.00">ACGGC</text>
+<polygon fill="#218559" stroke="#218559" points="727,-3926 727,-3940 778,-3940 778,-3926 727,-3926"/>
+<text text-anchor="start" x="735.5" y="-3930.67" font-family="Times Roman,serif" font-size="10.00">GCCGT</text>
+</g>
+<!-- 17,3->17,4 -->
+<g id="edge624" class="edge"><title>17,3->17,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-3941.53C674.501,-3941.25 684.748,-3941.18 694.703,-3941.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-3944.82 704.933,-3941.52 695.007,-3937.82 694.864,-3944.82"/>
+</g>
+<!-- 17,3->18,1 -->
+<g id="edge626" class="edge"><title>17,3->18,1</title>
+<path fill="none" stroke="#06a2cb" d="M610.036,-3912.3C594.575,-3843.01 562,-3697 562,-3697 562,-3697 540,-3435 540,-3435 540,-3435 428,-3435 428,-3435 428,-3435 398,-3669 398,-3669 398,-3669 294,-3903 294,-3903 294,-3903 264,-4162 264,-4162 264,-4162 236.799,-4332.57 223.35,-4416.91"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="219.861,-4416.56 221.742,-4426.99 226.773,-4417.67 219.861,-4416.56"/>
+</g>
+<!-- 17,4->17,3 -->
+<g id="edge632" class="edge"><title>17,4->17,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-3954.48C695.29,-3954.75 685.041,-3954.82 675.091,-3954.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-3951.18 664.867,-3954.47 674.792,-3958.18 674.937,-3951.18"/>
+</g>
+<!-- 16,3 -->
+<g id="node146" class="node"><title>16,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-148" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">16,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-140 593,-154 644,-154 644,-140 593,-140"/>
+<text text-anchor="start" x="600.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">CGGCA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-126 593,-140 644,-140 644,-126 593,-126"/>
+<text text-anchor="start" x="601.5" y="-130.667" font-family="Times Roman,serif" font-size="10.00">TGCCG</text>
+</g>
+<!-- 17,4->16,3 -->
+<g id="edge630" class="edge"><title>17,4->16,3</title>
+<path fill="none" stroke="#dd1e2f" d="M744.036,-3912.3C728.575,-3843.01 696,-3697 696,-3697 696,-3697 686,-1855 686,-1855 686,-1855 674,-228 674,-228 674,-228 660.245,-208.35 646.369,-188.527"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="649.057,-186.263 640.455,-180.078 643.322,-190.278 649.057,-186.263"/>
+</g>
+<!-- 16,1->17,2 -->
+<g id="edge188" class="edge"><title>16,1->17,2</title>
+<path fill="none" stroke="#218559" d="M369.801,-181.001C383.023,-203.038 398,-228 398,-228 398,-228 428,-3697 428,-3697 428,-3697 457.714,-3830.18 473.853,-3902.52"/>
+<polygon fill="#218559" stroke="#218559" points="470.442,-3903.31 476.036,-3912.3 477.274,-3901.78 470.442,-3903.31"/>
+</g>
+<!-- 16,1->16,2 -->
+<g id="edge186" class="edge"><title>16,1->16,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-141.529C406.501,-141.254 416.748,-141.183 426.703,-141.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-144.817 436.933,-141.523 427.007,-137.819 426.864,-144.817"/>
+</g>
+<!-- 16,2->15,1 -->
+<g id="edge190" class="edge"><title>16,2->15,1</title>
+<path fill="none" stroke="#dd1e2f" d="M454.344,-176.328C434.498,-195.285 408.229,-220.378 387.013,-240.644"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="384.553,-238.154 379.739,-247.593 389.388,-243.216 384.553,-238.154"/>
+</g>
+<!-- 16,2->16,1 -->
+<g id="edge194" class="edge"><title>16,2->16,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-154.477C427.29,-154.749 417.041,-154.817 407.091,-154.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-151.18 396.867,-154.471 406.792,-158.179 406.937,-151.18"/>
+</g>
+<!-- 16,2->16,3 -->
+<g id="edge192" class="edge"><title>16,2->16,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-141.529C540.501,-141.254 550.748,-141.183 560.703,-141.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-144.817 570.933,-141.523 561.007,-137.819 560.864,-144.817"/>
+</g>
+<!-- 16,3->17,4 -->
+<g id="edge198" class="edge"><title>16,3->17,4</title>
+<path fill="none" stroke="#218559" d="M640.455,-180.078C656.034,-202.335 674,-228 674,-228 674,-228 696,-3697 696,-3697 696,-3697 725.714,-3830.18 741.853,-3902.52"/>
+<polygon fill="#218559" stroke="#218559" points="738.442,-3903.31 744.036,-3912.3 745.274,-3901.78 738.442,-3903.31"/>
+</g>
+<!-- 16,3->16,2 -->
+<g id="edge200" class="edge"><title>16,3->16,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-154.477C561.29,-154.749 551.041,-154.817 541.091,-154.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-151.18 530.867,-154.471 540.792,-158.179 540.937,-151.18"/>
+</g>
+<!-- 16,3->16,4 -->
+<g id="edge196" class="edge"><title>16,3->16,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-141.529C674.501,-141.254 684.748,-141.183 694.703,-141.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-144.817 704.933,-141.523 695.007,-137.819 694.864,-144.817"/>
+</g>
+<!-- 16,4->15,3 -->
+<g id="edge202" class="edge"><title>16,4->15,3</title>
+<path fill="none" stroke="#dd1e2f" d="M722.344,-176.328C702.498,-195.285 676.229,-220.378 655.013,-240.644"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="652.553,-238.154 647.739,-247.593 657.388,-243.216 652.553,-238.154"/>
+</g>
+<!-- 16,4->16,3 -->
+<g id="edge204" class="edge"><title>16,4->16,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-154.477C695.29,-154.749 685.041,-154.817 675.091,-154.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-151.18 664.867,-154.471 674.792,-158.179 674.937,-151.18"/>
+</g>
+<!-- 19,1->20,3 -->
+<g id="edge636" class="edge"><title>19,1->20,3</title>
+<path fill="none" stroke="#06a2cb" d="M71.2944,-5180.29C93.6974,-5070.61 160,-4746 160,-4746 160,-4746 294,-4541 294,-4541 294,-4541 398,-4511 398,-4511 398,-4511 451.557,-4263.76 474.142,-4159.51"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="477.596,-4160.09 476.292,-4149.58 470.755,-4158.61 477.596,-4160.09"/>
+</g>
+<!-- 19,2 -->
+<g id="node150" class="node"><title>19,2</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-5216" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="193.5" y="-5227.17" font-family="Times Roman,serif" font-size="10.00">19,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="191,-5208 191,-5222 242,-5222 242,-5208 191,-5208"/>
+<text text-anchor="start" x="201" y="-5212.67" font-family="Times Roman,serif" font-size="10.00">ATTGA</text>
+<polygon fill="#218559" stroke="#218559" points="191,-5194 191,-5208 242,-5208 242,-5194 191,-5194"/>
+<text text-anchor="start" x="201.5" y="-5198.67" font-family="Times Roman,serif" font-size="10.00">TCAAT</text>
+</g>
+<!-- 19,1->19,2 -->
+<g id="edge634" class="edge"><title>19,1->19,2</title>
+<path fill="none" stroke="#dd1e2f" d="M110.845,-5209.71C126.015,-5209.21 143.011,-5209.12 158.843,-5209.44"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="158.958,-5212.94 169.048,-5209.71 159.144,-5205.94 158.958,-5212.94"/>
+</g>
+<!-- 19,2->19,1 -->
+<g id="edge642" class="edge"><title>19,2->19,1</title>
+<path fill="none" stroke="#218559" d="M169.048,-5222.29C153.87,-5222.79 136.872,-5222.88 121.045,-5222.56"/>
+<polygon fill="#218559" stroke="#218559" points="120.935,-5219.06 110.845,-5222.29 120.748,-5226.05 120.935,-5219.06"/>
+</g>
+<!-- 19,2->19,3 -->
+<g id="edge638" class="edge"><title>19,2->19,3</title>
+<path fill="none" stroke="#dd1e2f" d="M262.867,-5209.53C272.501,-5209.25 282.748,-5209.18 292.703,-5209.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="292.864,-5212.82 302.933,-5209.52 293.007,-5205.82 292.864,-5212.82"/>
+</g>
+<!-- 19,2->18,4 -->
+<g id="edge640" class="edge"><title>19,2->18,4</title>
+<path fill="none" stroke="#ebb035" d="M227.425,-5180.84C249.091,-5114.18 294,-4976 294,-4976 294,-4976 540,-4801 540,-4801 540,-4801 562,-4513 562,-4513 562,-4513 569.684,-4506.14 579.359,-4497.5"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="581.923,-4499.9 587.052,-4490.63 577.261,-4494.68 581.923,-4499.9"/>
+</g>
+<!-- 19,3->24,1 -->
+<g id="edge644" class="edge"><title>19,3->24,1</title>
+<path fill="none" stroke="#dd1e2f" d="M383,-5190C399.5,-5177 416,-5164 416,-5164 416,-5164 426.392,-5157.28 439.051,-5149.08"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="441.117,-5151.92 447.611,-5143.55 437.314,-5146.04 441.117,-5151.92"/>
+</g>
+<!-- 19,3->20,1 -->
+<g id="edge648" class="edge"><title>19,3->20,1</title>
+<path fill="none" stroke="#06a2cb" d="M336.444,-5181.14C319.871,-5138.52 294,-5072 294,-5072 294,-5072 264,-4415 264,-4415 264,-4415 236.799,-4244.43 223.35,-4160.09"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="226.773,-4159.33 221.742,-4150.01 219.861,-4160.44 226.773,-4159.33"/>
+</g>
+<!-- 19,3->19,2 -->
+<g id="edge650" class="edge"><title>19,3->19,2</title>
+<path fill="none" stroke="#218559" d="M302.933,-5222.48C293.29,-5222.75 283.041,-5222.82 273.091,-5222.68"/>
+<polygon fill="#218559" stroke="#218559" points="272.937,-5219.18 262.867,-5222.47 272.792,-5226.18 272.937,-5219.18"/>
+</g>
+<!-- 19,3->19,4 -->
+<g id="edge646" class="edge"><title>19,3->19,4</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-5209.53C406.501,-5209.25 416.748,-5209.18 426.703,-5209.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-5212.82 436.933,-5209.52 427.007,-5205.82 426.864,-5212.82"/>
+</g>
+<!-- 19,4->24,2 -->
+<g id="edge654" class="edge"><title>19,4->24,2</title>
+<path fill="none" stroke="#dd1e2f" d="M531.615,-5217.44C542.023,-5217.76 550,-5218 550,-5218 550,-5218 552,-5218 552,-5218 552,-5218 572.47,-5187.6 590.61,-5160.67"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593.706,-5162.34 596.389,-5152.09 587.9,-5158.43 593.706,-5162.34"/>
+</g>
+<!-- 19,4->23,1 -->
+<g id="edge658" class="edge"><title>19,4->23,1</title>
+<path fill="none" stroke="#ebb035" d="M452.4,-5188.91C439.697,-5178.03 428,-5168 428,-5168 428,-5168 398,-4976 398,-4976 398,-4976 372.635,-4843.36 358.782,-4770.92"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="362.142,-4769.86 356.826,-4760.7 355.267,-4771.18 362.142,-4769.86"/>
+</g>
+<!-- 19,4->8,3 -->
+<g id="edge652" class="edge"><title>19,4->8,3</title>
+<path fill="none" stroke="#dd1e2f" d="M515.6,-5188.91C528.303,-5178.03 540,-5168 540,-5168 540,-5168 562,-5072 562,-5072 562,-5072 569.944,-5065.19 579.849,-5056.7"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="582.391,-5059.13 587.705,-5049.97 577.835,-5053.82 582.391,-5059.13"/>
+</g>
+<!-- 19,4->19,3 -->
+<g id="edge660" class="edge"><title>19,4->19,3</title>
+<path fill="none" stroke="#218559" d="M436.933,-5222.48C427.29,-5222.75 417.041,-5222.82 407.091,-5222.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-5219.18 396.867,-5222.47 406.792,-5226.18 406.937,-5219.18"/>
+</g>
+<!-- 19,4->18,2 -->
+<g id="edge656" class="edge"><title>19,4->18,2</title>
+<path fill="none" stroke="#ebb035" d="M452.4,-5188.91C439.697,-5178.03 428,-5168 428,-5168 428,-5168 398,-4677 398,-4677 398,-4677 374.399,-4571.78 360.296,-4508.9"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="363.638,-4507.81 358.034,-4498.82 356.808,-4509.34 363.638,-4507.81"/>
+</g>
+<!-- 18,1->23,1 -->
+<g id="edge206" class="edge"><title>18,1->23,1</title>
+<path fill="none" stroke="#dd1e2f" d="M233.244,-4496.72C257.516,-4544.17 301.748,-4630.66 328.249,-4682.47"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325.153,-4684.1 332.822,-4691.41 331.385,-4680.92 325.153,-4684.1"/>
+</g>
+<!-- 18,1->17,3 -->
+<g id="edge210" class="edge"><title>18,1->17,3</title>
+<path fill="none" stroke="#06a2cb" d="M221.742,-4426.99C234.483,-4347.1 264,-4162 264,-4162 264,-4162 294,-3812 294,-3812 294,-3812 428,-3405 428,-3405 428,-3405 552,-3405 552,-3405 552,-3405 562,-3697 562,-3697 562,-3697 591.714,-3830.18 607.853,-3902.52"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="604.442,-3903.31 610.036,-3912.3 611.274,-3901.78 604.442,-3903.31"/>
+</g>
+<!-- 18,1->18,2 -->
+<g id="edge208" class="edge"><title>18,1->18,2</title>
+<path fill="none" stroke="#dd1e2f" d="M262.867,-4456.53C272.501,-4456.25 282.748,-4456.18 292.703,-4456.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="292.864,-4459.82 302.933,-4456.52 293.007,-4452.82 292.864,-4459.82"/>
+</g>
+<!-- 18,2->7,1 -->
+<g id="edge212" class="edge"><title>18,2->7,1</title>
+<path fill="none" stroke="#dd1e2f" d="M368.035,-4429.39C387.576,-4392.97 416,-4340 416,-4340 416,-4340 418,-4340 418,-4340 418,-4340 428,-4511 428,-4511 428,-4511 447.673,-4552.45 463.699,-4586.22"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="460.653,-4587.97 468.102,-4595.5 466.977,-4584.97 460.653,-4587.97"/>
+</g>
+<!-- 18,2->19,4 -->
+<g id="edge216" class="edge"><title>18,2->19,4</title>
+<path fill="none" stroke="#ebb035" d="M371.611,-4430.91C390.859,-4402.33 416,-4365 416,-4365 416,-4365 418,-4365 418,-4365 418,-4365 428,-5168 428,-5168 428,-5168 435.283,-5174.24 444.596,-5182.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="442.529,-5185.06 452.4,-5188.91 447.085,-5179.75 442.529,-5185.06"/>
+</g>
+<!-- 18,2->18,1 -->
+<g id="edge218" class="edge"><title>18,2->18,1</title>
+<path fill="none" stroke="#218559" d="M302.933,-4469.48C293.29,-4469.75 283.041,-4469.82 273.091,-4469.68"/>
+<polygon fill="#218559" stroke="#218559" points="272.937,-4466.18 262.867,-4469.47 272.792,-4473.18 272.937,-4466.18"/>
+</g>
+<!-- 18,2->18,3 -->
+<g id="edge214" class="edge"><title>18,2->18,3</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-4456.53C406.501,-4456.25 416.748,-4456.18 426.703,-4456.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-4459.82 436.933,-4456.52 427.007,-4452.82 426.864,-4459.82"/>
+</g>
+<!-- 18,3->17,1 -->
+<g id="edge222" class="edge"><title>18,3->17,1</title>
+<path fill="none" stroke="#06a2cb" d="M477.356,-4427.29C462.522,-4347.56 428,-4162 428,-4162 428,-4162 418,-3750 418,-3750 418,-3750 416,-3750 416,-3750 416,-3750 398,-3840 398,-3840 398,-3840 382.733,-3874.35 369.42,-3904.31"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="366.051,-3903.27 365.188,-3913.83 372.447,-3906.11 366.051,-3903.27"/>
+</g>
+<!-- 18,3->18,2 -->
+<g id="edge224" class="edge"><title>18,3->18,2</title>
+<path fill="none" stroke="#218559" d="M436.933,-4469.48C427.29,-4469.75 417.041,-4469.82 407.091,-4469.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-4466.18 396.867,-4469.47 406.792,-4473.18 406.937,-4466.18"/>
+</g>
+<!-- 18,3->18,4 -->
+<g id="edge220" class="edge"><title>18,3->18,4</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-4456.53C540.501,-4456.25 550.748,-4456.18 560.703,-4456.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-4459.82 570.933,-4456.52 561.007,-4452.82 560.864,-4459.82"/>
+</g>
+<!-- 18,4->24,1 -->
+<g id="edge228" class="edge"><title>18,4->24,1</title>
+<path fill="none" stroke="#06a2cb" d="M601.802,-4497.13C585.264,-4531.98 562,-4581 562,-4581 562,-4581 550,-4848 550,-4848 550,-4848 540,-5072 540,-5072 540,-5072 532.717,-5078.24 523.404,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="520.915,-5083.75 515.6,-5092.91 525.471,-5089.06 520.915,-5083.75"/>
+</g>
+<!-- 18,4->19,2 -->
+<g id="edge226" class="edge"><title>18,4->19,2</title>
+<path fill="none" stroke="#ebb035" d="M587.052,-4490.63C574.1,-4502.2 562,-4513 562,-4513 562,-4513 550,-4556 550,-4556 550,-4556 540,-4773 540,-4773 540,-4773 282,-4836 282,-4836 282,-4836 241.471,-5069.35 223.932,-5170.33"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="220.472,-5169.8 222.209,-5180.25 227.369,-5171 220.472,-5169.8"/>
+</g>
+<!-- 18,4->18,3 -->
+<g id="edge230" class="edge"><title>18,4->18,3</title>
+<path fill="none" stroke="#218559" d="M570.933,-4469.48C561.29,-4469.75 551.041,-4469.82 541.091,-4469.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-4466.18 530.867,-4469.47 540.792,-4473.18 540.937,-4466.18"/>
+</g>
+<!-- 31,1 -->
+<g id="node159" class="node"><title>31,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1732" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1743.17" font-family="Times Roman,serif" font-size="10.00">31,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1724 593,-1738 644,-1738 644,-1724 593,-1724"/>
+<text text-anchor="start" x="602" y="-1728.67" font-family="Times Roman,serif" font-size="10.00">GCGTC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1710 593,-1724 644,-1724 644,-1710 593,-1710"/>
+<text text-anchor="start" x="600.5" y="-1714.67" font-family="Times Roman,serif" font-size="10.00">GACGC</text>
+</g>
+<!-- 31,2 -->
+<g id="node160" class="node"><title>31,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1732" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1743.17" font-family="Times Roman,serif" font-size="10.00">31,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1724 727,-1738 778,-1738 778,-1724 727,-1724"/>
+<text text-anchor="start" x="736" y="-1728.67" font-family="Times Roman,serif" font-size="10.00">CGTCA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1710 727,-1724 778,-1724 778,-1710 727,-1710"/>
+<text text-anchor="start" x="735.5" y="-1714.67" font-family="Times Roman,serif" font-size="10.00">TGACG</text>
+</g>
+<!-- 31,1->31,2 -->
+<g id="edge786" class="edge"><title>31,1->31,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1725.53C674.501,-1725.25 684.748,-1725.18 694.703,-1725.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1728.82 704.933,-1725.52 695.007,-1721.82 694.864,-1728.82"/>
+</g>
+<!-- 32,2 -->
+<g id="node195" class="node"><title>32,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1974" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1985.17" font-family="Times Roman,serif" font-size="10.00">32,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1966 727,-1980 778,-1980 778,-1966 727,-1966"/>
+<text text-anchor="start" x="735.5" y="-1970.67" font-family="Times Roman,serif" font-size="10.00">AGCGT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1952 727,-1966 778,-1966 778,-1952 727,-1952"/>
+<text text-anchor="start" x="736" y="-1956.67" font-family="Times Roman,serif" font-size="10.00">ACGCT</text>
+</g>
+<!-- 31,1->32,2 -->
+<g id="edge788" class="edge"><title>31,1->32,2</title>
+<path fill="none" stroke="#218559" d="M636.491,-1765.39C660.503,-1808.76 702.432,-1884.48 728.624,-1931.78"/>
+<polygon fill="#218559" stroke="#218559" points="725.577,-1933.51 733.483,-1940.56 731.701,-1930.12 725.577,-1933.51"/>
+</g>
+<!-- 31,2->31,1 -->
+<g id="edge796" class="edge"><title>31,2->31,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-1738.48C695.29,-1738.75 685.041,-1738.82 675.091,-1738.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1735.18 664.867,-1738.47 674.792,-1742.18 674.937,-1735.18"/>
+</g>
+<!-- 31,2->31,3 -->
+<g id="edge792" class="edge"><title>31,2->31,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1725.53C808.501,-1725.25 818.748,-1725.18 828.703,-1725.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1728.82 838.933,-1725.52 829.007,-1721.82 828.864,-1728.82"/>
+</g>
+<!-- 31,2->30,1 -->
+<g id="edge790" class="edge"><title>31,2->30,1</title>
+<path fill="none" stroke="#dd1e2f" d="M740.329,-1767.36C721.134,-1825.52 685,-1935 685,-1935 685,-1935 685,-2013 685,-2013 685,-2013 709.962,-2060.32 729.413,-2097.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="726.459,-2099.09 734.221,-2106.3 732.651,-2095.82 726.459,-2099.09"/>
+</g>
+<!-- 31,2->30,4 -->
+<g id="edge794" class="edge"><title>31,2->30,4</title>
+<path fill="none" stroke="#ebb035" d="M783.6,-1704.91C796.303,-1694.03 808,-1684 808,-1684 808,-1684 820,-1354 820,-1354 820,-1354 830,-1026 830,-1026 830,-1026 1076,-1026 1076,-1026 1076,-1026 1106,-1492 1106,-1492 1106,-1492 1139.58,-1945.29 1150.57,-2093.63"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1147.09,-2094.06 1151.32,-2103.77 1154.07,-2093.54 1147.09,-2094.06"/>
+</g>
+<!-- 31,3->28,4 -->
+<g id="edge802" class="edge"><title>31,3->28,4</title>
+<path fill="none" stroke="#218559" d="M896.271,-1767.58C912.438,-1823.59 942,-1926 942,-1926 942,-1926 964,-2546 964,-2546 964,-2546 990.308,-2637.14 1006.86,-2694.48"/>
+<polygon fill="#218559" stroke="#218559" points="1003.59,-2695.78 1009.73,-2704.42 1010.32,-2693.84 1003.59,-2695.78"/>
+</g>
+<!-- 31,3->31,2 -->
+<g id="edge804" class="edge"><title>31,3->31,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-1738.48C829.29,-1738.75 819.041,-1738.82 809.091,-1738.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1735.18 798.867,-1738.47 808.792,-1742.18 808.937,-1735.18"/>
+</g>
+<!-- 31,4 -->
+<g id="node162" class="node"><title>31,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1732" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-1743.17" font-family="Times Roman,serif" font-size="10.00">31,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-1724 995,-1738 1046,-1738 1046,-1724 995,-1724"/>
+<text text-anchor="start" x="1005" y="-1728.67" font-family="Times Roman,serif" font-size="10.00">TCATG</text>
+<polygon fill="#218559" stroke="#218559" points="995,-1710 995,-1724 1046,-1724 1046,-1710 995,-1710"/>
+<text text-anchor="start" x="1004" y="-1714.67" font-family="Times Roman,serif" font-size="10.00">CATGA</text>
+</g>
+<!-- 31,3->31,4 -->
+<g id="edge798" class="edge"><title>31,3->31,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-1725.53C942.501,-1725.25 952.748,-1725.18 962.703,-1725.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-1728.82 972.933,-1725.52 963.007,-1721.82 962.864,-1728.82"/>
+</g>
+<!-- 31,3->32,4 -->
+<g id="edge800" class="edge"><title>31,3->32,4</title>
+<path fill="none" stroke="#218559" d="M917.6,-1704.91C930.303,-1694.03 942,-1684 942,-1684 942,-1684 952,-1293 952,-1293 952,-1293 954,-1293 954,-1293 954,-1293 964,-1780 964,-1780 964,-1780 990.308,-1871.14 1006.86,-1928.48"/>
+<polygon fill="#218559" stroke="#218559" points="1003.59,-1929.78 1009.73,-1938.42 1010.32,-1927.84 1003.59,-1929.78"/>
+</g>
+<!-- 31,4->31,3 -->
+<g id="edge810" class="edge"><title>31,4->31,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-1738.48C963.29,-1738.75 953.041,-1738.82 943.091,-1738.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-1735.18 932.867,-1738.47 942.792,-1742.18 942.937,-1735.18"/>
+</g>
+<!-- 31,4->30,2 -->
+<g id="edge808" class="edge"><title>31,4->30,2</title>
+<path fill="none" stroke="#ebb035" d="M1009.73,-1767.58C993.562,-1823.59 964,-1926 964,-1926 964,-1926 942,-2022 942,-2022 942,-2022 922.563,-2062.96 906.591,-2096.61"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="903.323,-2095.33 902.198,-2105.87 909.647,-2098.34 903.323,-2095.33"/>
+</g>
+<!-- 31,4->30,3 -->
+<g id="edge806" class="edge"><title>31,4->30,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1008.33,-1767.36C989.134,-1825.52 953,-1935 953,-1935 953,-1935 953,-2013 953,-2013 953,-2013 977.962,-2060.32 997.413,-2097.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="994.459,-2099.09 1002.22,-2106.3 1000.65,-2095.82 994.459,-2099.09"/>
+</g>
+<!-- 30,1->29,3 -->
+<g id="edge358" class="edge"><title>30,1->29,3</title>
+<path fill="none" stroke="#06a2cb" d="M782.948,-2112.37C795.9,-2100.8 808,-2090 808,-2090 808,-2090 818,-1896 818,-1896 818,-1896 942,-1848 942,-1848 942,-1848 952,-1368 952,-1368 952,-1368 954,-1368 954,-1368 954,-1368 964,-2188 964,-2188 964,-2188 983.437,-2228.96 999.409,-2262.61"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="996.353,-2264.34 1003.8,-2271.87 1002.68,-2261.33 996.353,-2264.34"/>
+</g>
+<!-- 30,1->31,2 -->
+<g id="edge360" class="edge"><title>30,1->31,2</title>
+<path fill="none" stroke="#218559" d="M734.221,-2106.3C714.372,-2068.68 685,-2013 685,-2013 685,-2013 685,-1935 685,-1935 685,-1935 717.423,-1836.76 737.159,-1776.97"/>
+<polygon fill="#218559" stroke="#218559" points="740.519,-1777.95 740.329,-1767.36 733.872,-1775.76 740.519,-1777.95"/>
+</g>
+<!-- 30,1->30,2 -->
+<g id="edge356" class="edge"><title>30,1->30,2</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-2133.53C808.501,-2133.25 818.748,-2133.18 828.703,-2133.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-2136.82 838.933,-2133.52 829.007,-2129.82 828.864,-2136.82"/>
+</g>
+<!-- 30,2->29,1 -->
+<g id="edge362" class="edge"><title>30,2->29,1</title>
+<path fill="none" stroke="#dd1e2f" d="M861.016,-2170.95C839.056,-2198.15 807,-2237.87 783.329,-2267.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="780.448,-2265.19 776.89,-2275.17 785.895,-2269.58 780.448,-2265.19"/>
+</g>
+<!-- 30,2->31,4 -->
+<g id="edge366" class="edge"><title>30,2->31,4</title>
+<path fill="none" stroke="#ebb035" d="M902.198,-2105.87C918.736,-2071.02 942,-2022 942,-2022 942,-2022 952,-1898 952,-1898 952,-1898 981.876,-1825.07 1002.02,-1775.89"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1005.36,-1776.98 1005.91,-1766.4 998.881,-1774.32 1005.36,-1776.98"/>
+</g>
+<!-- 30,2->30,1 -->
+<g id="edge368" class="edge"><title>30,2->30,1</title>
+<path fill="none" stroke="#218559" d="M838.933,-2146.48C829.29,-2146.75 819.041,-2146.82 809.091,-2146.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-2143.18 798.867,-2146.47 808.792,-2150.18 808.937,-2143.18"/>
+</g>
+<!-- 30,2->30,3 -->
+<g id="edge364" class="edge"><title>30,2->30,3</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-2133.53C942.501,-2133.25 952.748,-2133.18 962.703,-2133.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-2136.82 972.933,-2133.52 963.007,-2129.82 962.864,-2136.82"/>
+</g>
+<!-- 30,3->29,1 -->
+<g id="edge372" class="edge"><title>30,3->29,1</title>
+<path fill="none" stroke="#06a2cb" d="M1003.8,-2105.87C987.264,-2071.02 964,-2022 964,-2022 964,-2022 954,-1876 954,-1876 954,-1876 952,-1876 952,-1876 952,-1876 942,-2022 942,-2022 942,-2022 830,-2062 830,-2062 830,-2062 808,-2188 808,-2188 808,-2188 788.563,-2228.96 772.591,-2262.61"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="769.323,-2261.33 768.198,-2271.87 775.647,-2264.34 769.323,-2261.33"/>
+</g>
+<!-- 30,3->31,4 -->
+<g id="edge374" class="edge"><title>30,3->31,4</title>
+<path fill="none" stroke="#218559" d="M1002.22,-2106.3C982.372,-2068.68 953,-2013 953,-2013 953,-2013 953,-1935 953,-1935 953,-1935 985.423,-1836.76 1005.16,-1776.97"/>
+<polygon fill="#218559" stroke="#218559" points="1008.52,-1777.95 1008.33,-1767.36 1001.87,-1775.76 1008.52,-1777.95"/>
+</g>
+<!-- 30,3->30,2 -->
+<g id="edge376" class="edge"><title>30,3->30,2</title>
+<path fill="none" stroke="#218559" d="M972.933,-2146.48C963.29,-2146.75 953.041,-2146.82 943.091,-2146.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-2143.18 932.867,-2146.47 942.792,-2150.18 942.937,-2143.18"/>
+</g>
+<!-- 30,3->30,4 -->
+<g id="edge370" class="edge"><title>30,3->30,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1066.87,-2133.53C1076.5,-2133.25 1086.75,-2133.18 1096.7,-2133.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1096.86,-2136.82 1106.93,-2133.52 1097.01,-2129.82 1096.86,-2136.82"/>
+</g>
+<!-- 30,4->29,3 -->
+<g id="edge378" class="edge"><title>30,4->29,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1129.02,-2170.95C1107.06,-2198.15 1075,-2237.87 1051.33,-2267.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1048.45,-2265.19 1044.89,-2275.17 1053.89,-2269.58 1048.45,-2265.19"/>
+</g>
+<!-- 30,4->31,2 -->
+<g id="edge380" class="edge"><title>30,4->31,2</title>
+<path fill="none" stroke="#ebb035" d="M1151.32,-2103.77C1141.21,-1967.31 1106,-1492 1106,-1492 1106,-1492 1088,-996 1088,-996 1088,-996 830,-996 830,-996 830,-996 808,-1684 808,-1684 808,-1684 800.717,-1690.24 791.404,-1698.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="788.915,-1695.75 783.6,-1704.91 793.471,-1701.06 788.915,-1695.75"/>
+</g>
+<!-- 30,4->30,3 -->
+<g id="edge382" class="edge"><title>30,4->30,3</title>
+<path fill="none" stroke="#218559" d="M1106.93,-2146.48C1097.29,-2146.75 1087.04,-2146.82 1077.09,-2146.68"/>
+<polygon fill="#218559" stroke="#218559" points="1076.94,-2143.18 1066.87,-2146.47 1076.79,-2150.18 1076.94,-2143.18"/>
+</g>
+<!-- 37,1 -->
+<g id="node169" class="node"><title>37,1</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">37,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-652 995,-666 1046,-666 1046,-652 995,-652"/>
+<text text-anchor="start" x="1003.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">CCACA</text>
+<polygon fill="#218559" stroke="#218559" points="995,-638 995,-652 1046,-652 1046,-638 995,-638"/>
+<text text-anchor="start" x="1004" y="-642.667" font-family="Times Roman,serif" font-size="10.00">TGTGG</text>
+</g>
+<!-- 37,2 -->
+<g id="node170" class="node"><title>37,2</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1131.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">37,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1129,-652 1129,-666 1180,-666 1180,-652 1129,-652"/>
+<text text-anchor="start" x="1137.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">CACAC</text>
+<polygon fill="#218559" stroke="#218559" points="1129,-638 1129,-652 1180,-652 1180,-638 1129,-638"/>
+<text text-anchor="start" x="1138" y="-642.667" font-family="Times Roman,serif" font-size="10.00">GTGTG</text>
+</g>
+<!-- 37,1->37,2 -->
+<g id="edge860" class="edge"><title>37,1->37,2</title>
+<path fill="none" stroke="#dd1e2f" d="M1066.87,-653.529C1076.5,-653.254 1086.75,-653.183 1096.7,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1096.86,-656.817 1106.93,-653.523 1097.01,-649.819 1096.86,-656.817"/>
+</g>
+<!-- 37,2->37,1 -->
+<g id="edge866" class="edge"><title>37,2->37,1</title>
+<path fill="none" stroke="#218559" d="M1106.93,-666.477C1097.29,-666.749 1087.04,-666.817 1077.09,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="1076.94,-663.18 1066.87,-666.471 1076.79,-670.179 1076.94,-663.18"/>
+</g>
+<!-- 37,3 -->
+<g id="node171" class="node"><title>37,3</title>
+<ellipse fill="none" stroke="black" cx="1288" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1265.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">37,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1263,-652 1263,-666 1314,-666 1314,-652 1263,-652"/>
+<text text-anchor="start" x="1271" y="-656.667" font-family="Times Roman,serif" font-size="10.00">ACACG</text>
+<polygon fill="#218559" stroke="#218559" points="1263,-638 1263,-652 1314,-652 1314,-638 1263,-638"/>
+<text text-anchor="start" x="1272.5" y="-642.667" font-family="Times Roman,serif" font-size="10.00">CGTGT</text>
+</g>
+<!-- 37,2->37,3 -->
+<g id="edge862" class="edge"><title>37,2->37,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1200.87,-653.529C1210.5,-653.254 1220.75,-653.183 1230.7,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1230.86,-656.817 1240.93,-653.523 1231.01,-649.819 1230.86,-656.817"/>
+</g>
+<!-- 36,4 -->
+<g id="node177" class="node"><title>36,4</title>
+<ellipse fill="none" stroke="black" cx="1288" cy="-1074" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1265.5" y="-1085.17" font-family="Times Roman,serif" font-size="10.00">36,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1263,-1066 1263,-1080 1314,-1080 1314,-1066 1263,-1066"/>
+<text text-anchor="start" x="1272.5" y="-1070.67" font-family="Times Roman,serif" font-size="10.00">CGTGT</text>
+<polygon fill="#218559" stroke="#218559" points="1263,-1052 1263,-1066 1314,-1066 1314,-1052 1263,-1052"/>
+<text text-anchor="start" x="1271" y="-1056.67" font-family="Times Roman,serif" font-size="10.00">ACACG</text>
+</g>
+<!-- 37,2->36,4 -->
+<g id="edge864" class="edge"><title>37,2->36,4</title>
+<path fill="none" stroke="#ebb035" d="M1165.42,-695.297C1189.75,-770.458 1246.64,-946.204 1273.48,-1029.15"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1270.19,-1030.36 1276.6,-1038.79 1276.85,-1028.2 1270.19,-1030.36"/>
+</g>
+<!-- 37,3->37,2 -->
+<g id="edge870" class="edge"><title>37,3->37,2</title>
+<path fill="none" stroke="#218559" d="M1240.93,-666.477C1231.29,-666.749 1221.04,-666.817 1211.09,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="1210.94,-663.18 1200.87,-666.471 1210.79,-670.179 1210.94,-663.18"/>
+</g>
+<!-- 37,4 -->
+<g id="node172" class="node"><title>37,4</title>
+<ellipse fill="none" stroke="black" cx="1422" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1399.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">37,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1397,-652 1397,-666 1448,-666 1448,-652 1397,-652"/>
+<text text-anchor="start" x="1405" y="-656.667" font-family="Times Roman,serif" font-size="10.00">CACGC</text>
+<polygon fill="#218559" stroke="#218559" points="1397,-638 1397,-652 1448,-652 1448,-638 1397,-638"/>
+<text text-anchor="start" x="1405" y="-642.667" font-family="Times Roman,serif" font-size="10.00">GCGTG</text>
+</g>
+<!-- 37,3->37,4 -->
+<g id="edge868" class="edge"><title>37,3->37,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1334.87,-653.529C1344.5,-653.254 1354.75,-653.183 1364.7,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1364.86,-656.817 1374.93,-653.523 1365.01,-649.819 1364.86,-656.817"/>
+</g>
+<!-- 37,4->37,3 -->
+<g id="edge874" class="edge"><title>37,4->37,3</title>
+<path fill="none" stroke="#218559" d="M1374.93,-666.477C1365.29,-666.749 1355.04,-666.817 1345.09,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="1344.94,-663.18 1334.87,-666.471 1344.79,-670.179 1344.94,-663.18"/>
+</g>
+<!-- 36,2 -->
+<g id="node175" class="node"><title>36,2</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1074" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-1085.17" font-family="Times Roman,serif" font-size="10.00">36,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-1066 995,-1080 1046,-1080 1046,-1066 995,-1066"/>
+<text text-anchor="start" x="1003.5" y="-1070.67" font-family="Times Roman,serif" font-size="10.00">AGCGT</text>
+<polygon fill="#218559" stroke="#218559" points="995,-1052 995,-1066 1046,-1066 1046,-1052 995,-1052"/>
+<text text-anchor="start" x="1004" y="-1056.67" font-family="Times Roman,serif" font-size="10.00">ACGCT</text>
+</g>
+<!-- 37,4->36,2 -->
+<g id="edge872" class="edge"><title>37,4->36,2</title>
+<path fill="none" stroke="#ebb035" d="M1404.3,-693.583C1381.29,-737.25 1344,-808 1344,-808 1344,-808 1210,-946 1210,-946 1210,-946 1120.23,-1006.48 1064.1,-1044.29"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1062.08,-1041.43 1055.74,-1049.92 1065.99,-1047.24 1062.08,-1041.43"/>
+</g>
+<!-- 36,1 -->
+<g id="node174" class="node"><title>36,1</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1074" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1085.17" font-family="Times Roman,serif" font-size="10.00">36,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1066 861,-1080 912,-1080 912,-1066 861,-1066"/>
+<text text-anchor="start" x="868.5" y="-1070.67" font-family="Times Roman,serif" font-size="10.00">AAGCG</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1052 861,-1066 912,-1066 912,-1052 861,-1052"/>
+<text text-anchor="start" x="870.5" y="-1056.67" font-family="Times Roman,serif" font-size="10.00">CGCTT</text>
+</g>
+<!-- 36,1->36,2 -->
+<g id="edge434" class="edge"><title>36,1->36,2</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-1067.53C942.501,-1067.25 952.748,-1067.18 962.703,-1067.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-1070.82 972.933,-1067.52 963.007,-1063.82 962.864,-1070.82"/>
+</g>
+<!-- 35,3 -->
+<g id="node181" class="node"><title>35,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1636" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1647.17" font-family="Times Roman,serif" font-size="10.00">35,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1628 727,-1642 778,-1642 778,-1628 727,-1628"/>
+<text text-anchor="start" x="737" y="-1632.67" font-family="Times Roman,serif" font-size="10.00">GCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1614 727,-1628 778,-1628 778,-1614 727,-1614"/>
+<text text-anchor="start" x="736" y="-1618.67" font-family="Times Roman,serif" font-size="10.00">TAAGC</text>
+</g>
+<!-- 36,1->35,3 -->
+<g id="edge438" class="edge"><title>36,1->35,3</title>
+<path fill="none" stroke="#06a2cb" d="M854.4,-1101.09C841.697,-1111.97 830,-1122 830,-1122 830,-1122 818,-1321 818,-1321 818,-1321 808,-1588 808,-1588 808,-1588 800.717,-1594.24 791.404,-1602.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="788.915,-1599.75 783.6,-1608.91 793.471,-1605.06 788.915,-1599.75"/>
+</g>
+<!-- 33,3 -->
+<g id="node191" class="node"><title>33,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1540" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1551.17" font-family="Times Roman,serif" font-size="10.00">33,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1532 727,-1546 778,-1546 778,-1532 727,-1532"/>
+<text text-anchor="start" x="737" y="-1536.67" font-family="Times Roman,serif" font-size="10.00">GCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1518 727,-1532 778,-1532 778,-1518 727,-1518"/>
+<text text-anchor="start" x="736" y="-1522.67" font-family="Times Roman,serif" font-size="10.00">TAAGC</text>
+</g>
+<!-- 36,1->33,3 -->
+<g id="edge436" class="edge"><title>36,1->33,3</title>
+<path fill="none" stroke="#06a2cb" d="M854.4,-1101.09C841.697,-1111.97 830,-1122 830,-1122 830,-1122 780.859,-1385.34 760.587,-1493.98"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="757.112,-1493.53 758.718,-1504 763.993,-1494.81 757.112,-1493.53"/>
+</g>
+<!-- 36,2->37,4 -->
+<g id="edge442" class="edge"><title>36,2->37,4</title>
+<path fill="none" stroke="#ebb035" d="M1048.27,-1044.89C1119.77,-971.25 1307.74,-777.671 1386.49,-696.569"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1389.31,-698.692 1393.76,-689.08 1384.29,-693.816 1389.31,-698.692"/>
+</g>
+<!-- 36,2->36,1 -->
+<g id="edge444" class="edge"><title>36,2->36,1</title>
+<path fill="none" stroke="#218559" d="M972.933,-1080.48C963.29,-1080.75 953.041,-1080.82 943.091,-1080.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-1077.18 932.867,-1080.47 942.792,-1084.18 942.937,-1077.18"/>
+</g>
+<!-- 36,3 -->
+<g id="node176" class="node"><title>36,3</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-1074" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1131.5" y="-1085.17" font-family="Times Roman,serif" font-size="10.00">36,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1129,-1066 1129,-1080 1180,-1080 1180,-1066 1129,-1066"/>
+<text text-anchor="start" x="1137" y="-1070.67" font-family="Times Roman,serif" font-size="10.00">GCGTG</text>
+<polygon fill="#218559" stroke="#218559" points="1129,-1052 1129,-1066 1180,-1066 1180,-1052 1129,-1052"/>
+<text text-anchor="start" x="1137" y="-1056.67" font-family="Times Roman,serif" font-size="10.00">CACGC</text>
+</g>
+<!-- 36,2->36,3 -->
+<g id="edge440" class="edge"><title>36,2->36,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1066.87,-1067.53C1076.5,-1067.25 1086.75,-1067.18 1096.7,-1067.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1096.86,-1070.82 1106.93,-1067.52 1097.01,-1063.82 1096.86,-1070.82"/>
+</g>
+<!-- 36,3->36,2 -->
+<g id="edge448" class="edge"><title>36,3->36,2</title>
+<path fill="none" stroke="#218559" d="M1106.93,-1080.48C1097.29,-1080.75 1087.04,-1080.82 1077.09,-1080.68"/>
+<polygon fill="#218559" stroke="#218559" points="1076.94,-1077.18 1066.87,-1080.47 1076.79,-1084.18 1076.94,-1077.18"/>
+</g>
+<!-- 36,3->36,4 -->
+<g id="edge446" class="edge"><title>36,3->36,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1200.87,-1067.53C1210.5,-1067.25 1220.75,-1067.18 1230.7,-1067.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1230.86,-1070.82 1240.93,-1067.52 1231.01,-1063.82 1230.86,-1070.82"/>
+</g>
+<!-- 36,4->37,2 -->
+<g id="edge450" class="edge"><title>36,4->37,2</title>
+<path fill="none" stroke="#ebb035" d="M1274.73,-1039.06C1254.94,-986.97 1220,-895 1220,-895 1220,-895 1185.83,-773.346 1166.67,-705.097"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1170.03,-704.117 1163.95,-695.436 1163.29,-706.01 1170.03,-704.117"/>
+</g>
+<!-- 36,4->36,3 -->
+<g id="edge452" class="edge"><title>36,4->36,3</title>
+<path fill="none" stroke="#218559" d="M1240.93,-1080.48C1231.29,-1080.75 1221.04,-1080.82 1211.09,-1080.68"/>
+<polygon fill="#218559" stroke="#218559" points="1210.94,-1077.18 1200.87,-1080.47 1210.79,-1084.18 1210.94,-1077.18"/>
+</g>
+<!-- 35,1 -->
+<g id="node179" class="node"><title>35,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-1636" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-1647.17" font-family="Times Roman,serif" font-size="10.00">35,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-1628 459,-1642 510,-1642 510,-1628 459,-1628"/>
+<text text-anchor="start" x="469" y="-1632.67" font-family="Times Roman,serif" font-size="10.00">TCGCT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-1614 459,-1628 510,-1628 510,-1614 459,-1614"/>
+<text text-anchor="start" x="466.5" y="-1618.67" font-family="Times Roman,serif" font-size="10.00">AGCGA</text>
+</g>
+<!-- 35,2 -->
+<g id="node180" class="node"><title>35,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1636" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1647.17" font-family="Times Roman,serif" font-size="10.00">35,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1628 593,-1642 644,-1642 644,-1628 593,-1628"/>
+<text text-anchor="start" x="602.5" y="-1632.67" font-family="Times Roman,serif" font-size="10.00">CGCTT</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1614 593,-1628 644,-1628 644,-1614 593,-1614"/>
+<text text-anchor="start" x="600.5" y="-1618.67" font-family="Times Roman,serif" font-size="10.00">AAGCG</text>
+</g>
+<!-- 35,1->35,2 -->
+<g id="edge836" class="edge"><title>35,1->35,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-1629.53C540.501,-1629.25 550.748,-1629.18 560.703,-1629.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-1632.82 570.933,-1629.52 561.007,-1625.82 560.864,-1632.82"/>
+</g>
+<!-- 35,2->35,1 -->
+<g id="edge844" class="edge"><title>35,2->35,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-1642.48C561.29,-1642.75 551.041,-1642.82 541.091,-1642.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-1639.18 530.867,-1642.47 540.792,-1646.18 540.937,-1639.18"/>
+</g>
+<!-- 35,2->35,3 -->
+<g id="edge840" class="edge"><title>35,2->35,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1629.53C674.501,-1629.25 684.748,-1629.18 694.703,-1629.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1632.82 704.933,-1629.52 695.007,-1625.82 694.864,-1632.82"/>
+</g>
+<!-- 34,1 -->
+<g id="node184" class="node"><title>34,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-756" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-767.167" font-family="Times Roman,serif" font-size="10.00">34,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-748 593,-762 644,-762 644,-748 593,-748"/>
+<text text-anchor="start" x="603" y="-752.667" font-family="Times Roman,serif" font-size="10.00">GCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-734 593,-748 644,-748 644,-734 593,-734"/>
+<text text-anchor="start" x="602" y="-738.667" font-family="Times Roman,serif" font-size="10.00">TAAGC</text>
+</g>
+<!-- 35,2->34,1 -->
+<g id="edge838" class="edge"><title>35,2->34,1</title>
+<path fill="none" stroke="#dd1e2f" d="M586.07,-1608.84C568.813,-1594.15 551,-1579 551,-1579 551,-1579 551,-1131 551,-1131 551,-1131 591.863,-902.29 609.764,-802.095"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="613.262,-802.416 611.576,-791.957 606.371,-801.185 613.262,-802.416"/>
+</g>
+<!-- 34,4 -->
+<g id="node187" class="node"><title>34,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-756" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-767.167" font-family="Times Roman,serif" font-size="10.00">34,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-748 995,-762 1046,-762 1046,-748 995,-748"/>
+<text text-anchor="start" x="1004" y="-752.667" font-family="Times Roman,serif" font-size="10.00">TAAGC</text>
+<polygon fill="#218559" stroke="#218559" points="995,-734 995,-748 1046,-748 1046,-734 995,-734"/>
+<text text-anchor="start" x="1005" y="-738.667" font-family="Times Roman,serif" font-size="10.00">GCTTA</text>
+</g>
+<!-- 35,2->34,4 -->
+<g id="edge842" class="edge"><title>35,2->34,4</title>
+<path fill="none" stroke="#ebb035" d="M649.6,-1608.91C662.303,-1598.03 674,-1588 674,-1588 674,-1588 696,-1122 696,-1122 696,-1122 808,-1060 808,-1060 808,-1060 830,-992 830,-992 830,-992 942,-911 942,-911 942,-911 975.191,-845.043 998.271,-799.18"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1001.51,-800.521 1002.88,-790.015 995.261,-797.375 1001.51,-800.521"/>
+</g>
+<!-- 35,3->36,1 -->
+<g id="edge848" class="edge"><title>35,3->36,1</title>
+<path fill="none" stroke="#06a2cb" d="M783.6,-1608.91C796.303,-1598.03 808,-1588 808,-1588 808,-1588 830,-1122 830,-1122 830,-1122 837.283,-1115.76 846.596,-1107.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="849.085,-1110.25 854.4,-1101.09 844.529,-1104.94 849.085,-1110.25"/>
+</g>
+<!-- 35,3->35,2 -->
+<g id="edge852" class="edge"><title>35,3->35,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-1642.48C695.29,-1642.75 685.041,-1642.82 675.091,-1642.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1639.18 664.867,-1642.47 674.792,-1646.18 674.937,-1639.18"/>
+</g>
+<!-- 35,4 -->
+<g id="node182" class="node"><title>35,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1636" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1647.17" font-family="Times Roman,serif" font-size="10.00">35,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1628 861,-1642 912,-1642 912,-1628 861,-1628"/>
+<text text-anchor="start" x="871" y="-1632.67" font-family="Times Roman,serif" font-size="10.00">CTTAA</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1614 861,-1628 912,-1628 912,-1614 861,-1614"/>
+<text text-anchor="start" x="871" y="-1618.67" font-family="Times Roman,serif" font-size="10.00">TTAAG</text>
+</g>
+<!-- 35,3->35,4 -->
+<g id="edge846" class="edge"><title>35,3->35,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1629.53C808.501,-1629.25 818.748,-1629.18 828.703,-1629.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1632.82 838.933,-1629.52 829.007,-1625.82 828.864,-1632.82"/>
+</g>
+<!-- 32,1 -->
+<g id="node194" class="node"><title>32,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1974" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1985.17" font-family="Times Roman,serif" font-size="10.00">32,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1966 593,-1980 644,-1980 644,-1966 593,-1966"/>
+<text text-anchor="start" x="600.5" y="-1970.67" font-family="Times Roman,serif" font-size="10.00">AAGCG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1952 593,-1966 644,-1966 644,-1952 593,-1952"/>
+<text text-anchor="start" x="602.5" y="-1956.67" font-family="Times Roman,serif" font-size="10.00">CGCTT</text>
+</g>
+<!-- 35,3->32,1 -->
+<g id="edge850" class="edge"><title>35,3->32,1</title>
+<path fill="none" stroke="#06a2cb" d="M720.4,-1663.09C707.697,-1673.97 696,-1684 696,-1684 696,-1684 686,-1878 686,-1878 686,-1878 665.176,-1907.4 646.575,-1933.66"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="643.567,-1931.85 640.643,-1942.03 649.279,-1935.9 643.567,-1931.85"/>
+</g>
+<!-- 35,4->35,3 -->
+<g id="edge858" class="edge"><title>35,4->35,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-1642.48C829.29,-1642.75 819.041,-1642.82 809.091,-1642.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1639.18 798.867,-1642.47 808.792,-1646.18 808.937,-1639.18"/>
+</g>
+<!-- 34,2 -->
+<g id="node185" class="node"><title>34,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-756" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-767.167" font-family="Times Roman,serif" font-size="10.00">34,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-748 727,-762 778,-762 778,-748 727,-748"/>
+<text text-anchor="start" x="737" y="-752.667" font-family="Times Roman,serif" font-size="10.00">CTTAA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-734 727,-748 778,-748 778,-734 727,-734"/>
+<text text-anchor="start" x="737" y="-738.667" font-family="Times Roman,serif" font-size="10.00">TTAAG</text>
+</g>
+<!-- 35,4->34,2 -->
+<g id="edge856" class="edge"><title>35,4->34,2</title>
+<path fill="none" stroke="#ebb035" d="M854.4,-1608.91C841.697,-1598.03 830,-1588 830,-1588 830,-1588 820,-1343 820,-1343 820,-1343 808,-1122 808,-1122 808,-1122 774.093,-900.394 759.047,-802.057"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="762.495,-801.451 757.523,-792.095 755.576,-802.509 762.495,-801.451"/>
+</g>
+<!-- 34,3 -->
+<g id="node186" class="node"><title>34,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-756" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-767.167" font-family="Times Roman,serif" font-size="10.00">34,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-748 861,-762 912,-762 912,-748 861,-748"/>
+<text text-anchor="start" x="871" y="-752.667" font-family="Times Roman,serif" font-size="10.00">TTAAG</text>
+<polygon fill="#218559" stroke="#218559" points="861,-734 861,-748 912,-748 912,-734 861,-734"/>
+<text text-anchor="start" x="871" y="-738.667" font-family="Times Roman,serif" font-size="10.00">CTTAA</text>
+</g>
+<!-- 35,4->34,3 -->
+<g id="edge854" class="edge"><title>35,4->34,3</title>
+<path fill="none" stroke="#dd1e2f" d="M854.07,-1608.84C836.813,-1594.15 819,-1579 819,-1579 819,-1579 819,-1035 819,-1035 819,-1035 855.988,-880.975 874.999,-801.809"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="878.514,-802.16 877.446,-791.619 871.708,-800.525 878.514,-802.16"/>
+</g>
+<!-- 34,1->35,2 -->
+<g id="edge410" class="edge"><title>34,1->35,2</title>
+<path fill="none" stroke="#218559" d="M611.576,-791.957C594.806,-885.816 551,-1131 551,-1131 551,-1131 551,-1579 551,-1579 551,-1579 563.917,-1589.99 578.409,-1602.32"/>
+<polygon fill="#218559" stroke="#218559" points="576.185,-1605.02 586.07,-1608.84 580.721,-1599.69 576.185,-1605.02"/>
+</g>
+<!-- 34,1->34,2 -->
+<g id="edge406" class="edge"><title>34,1->34,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-749.529C674.501,-749.254 684.748,-749.183 694.703,-749.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-752.817 704.933,-749.523 695.007,-745.819 694.864,-752.817"/>
+</g>
+<!-- 33,2 -->
+<g id="node190" class="node"><title>33,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1540" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1551.17" font-family="Times Roman,serif" font-size="10.00">33,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1532 593,-1546 644,-1546 644,-1532 593,-1532"/>
+<text text-anchor="start" x="602.5" y="-1536.67" font-family="Times Roman,serif" font-size="10.00">CGCTT</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1518 593,-1532 644,-1532 644,-1518 593,-1518"/>
+<text text-anchor="start" x="600.5" y="-1522.67" font-family="Times Roman,serif" font-size="10.00">AAGCG</text>
+</g>
+<!-- 34,1->33,2 -->
+<g id="edge408" class="edge"><title>34,1->33,2</title>
+<path fill="none" stroke="#218559" d="M611.576,-791.957C594.806,-885.816 551,-1131 551,-1131 551,-1131 551,-1209 551,-1209 551,-1209 590.35,-1403.4 608.737,-1494.24"/>
+<polygon fill="#218559" stroke="#218559" points="605.352,-1495.16 610.766,-1504.26 612.213,-1493.77 605.352,-1495.16"/>
+</g>
+<!-- 34,2->35,4 -->
+<g id="edge414" class="edge"><title>34,2->35,4</title>
+<path fill="none" stroke="#ebb035" d="M759.934,-791.701C777.871,-872.42 820,-1062 820,-1062 820,-1062 830,-1588 830,-1588 830,-1588 837.283,-1594.24 846.596,-1602.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="844.529,-1605.06 854.4,-1608.91 849.085,-1599.75 844.529,-1605.06"/>
+</g>
+<!-- 34,2->34,1 -->
+<g id="edge418" class="edge"><title>34,2->34,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-762.477C695.29,-762.749 685.041,-762.817 675.091,-762.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-759.18 664.867,-762.471 674.792,-766.179 674.937,-759.18"/>
+</g>
+<!-- 34,2->34,3 -->
+<g id="edge412" class="edge"><title>34,2->34,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-749.529C808.501,-749.254 818.748,-749.183 828.703,-749.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-752.817 838.933,-749.523 829.007,-745.819 828.864,-752.817"/>
+</g>
+<!-- 33,4 -->
+<g id="node192" class="node"><title>33,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1540" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1551.17" font-family="Times Roman,serif" font-size="10.00">33,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1532 861,-1546 912,-1546 912,-1532 861,-1532"/>
+<text text-anchor="start" x="871" y="-1536.67" font-family="Times Roman,serif" font-size="10.00">CTTAA</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1518 861,-1532 912,-1532 912,-1518 861,-1518"/>
+<text text-anchor="start" x="871" y="-1522.67" font-family="Times Roman,serif" font-size="10.00">TTAAG</text>
+</g>
+<!-- 34,2->33,4 -->
+<g id="edge416" class="edge"><title>34,2->33,4</title>
+<path fill="none" stroke="#ebb035" d="M762.034,-791.413C780.949,-858.173 820,-996 820,-996 820,-996 830,-1492 830,-1492 830,-1492 837.283,-1498.24 846.596,-1506.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="844.529,-1509.06 854.4,-1512.91 849.085,-1503.75 844.529,-1509.06"/>
+</g>
+<!-- 34,3->35,4 -->
+<g id="edge422" class="edge"><title>34,3->35,4</title>
+<path fill="none" stroke="#218559" d="M877.446,-791.619C859.384,-866.834 819,-1035 819,-1035 819,-1035 819,-1579 819,-1579 819,-1579 831.917,-1589.99 846.409,-1602.32"/>
+<polygon fill="#218559" stroke="#218559" points="844.185,-1605.02 854.07,-1608.84 848.721,-1599.69 844.185,-1605.02"/>
+</g>
+<!-- 34,3->34,2 -->
+<g id="edge426" class="edge"><title>34,3->34,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-762.477C829.29,-762.749 819.041,-762.817 809.091,-762.684"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-759.18 798.867,-762.471 808.792,-766.179 808.937,-759.18"/>
+</g>
+<!-- 34,3->34,4 -->
+<g id="edge420" class="edge"><title>34,3->34,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-749.529C942.501,-749.254 952.748,-749.183 962.703,-749.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-752.817 972.933,-749.523 963.007,-745.819 962.864,-752.817"/>
+</g>
+<!-- 34,3->33,4 -->
+<g id="edge424" class="edge"><title>34,3->33,4</title>
+<path fill="none" stroke="#218559" d="M877.446,-791.619C859.384,-866.834 819,-1035 819,-1035 819,-1035 819,-1483 819,-1483 819,-1483 831.917,-1493.99 846.409,-1506.32"/>
+<polygon fill="#218559" stroke="#218559" points="844.185,-1509.02 854.07,-1512.84 848.721,-1503.69 844.185,-1509.02"/>
+</g>
+<!-- 34,4->35,2 -->
+<g id="edge430" class="edge"><title>34,4->35,2</title>
+<path fill="none" stroke="#ebb035" d="M998.48,-788.28C975.392,-822.912 942,-873 942,-873 942,-873 830,-920 830,-920 830,-920 808,-1000 808,-1000 808,-1000 696,-1091 696,-1091 696,-1091 686,-1262 686,-1262 686,-1262 684,-1296 684,-1296 684,-1296 674,-1588 674,-1588 674,-1588 666.717,-1594.24 657.404,-1602.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="654.915,-1599.75 649.6,-1608.91 659.471,-1605.06 654.915,-1599.75"/>
+</g>
+<!-- 34,4->34,3 -->
+<g id="edge432" class="edge"><title>34,4->34,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-762.477C963.29,-762.749 953.041,-762.817 943.091,-762.684"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-759.18 932.867,-762.471 942.792,-766.179 942.937,-759.18"/>
+</g>
+<!-- 34,4->33,2 -->
+<g id="edge428" class="edge"><title>34,4->33,2</title>
+<path fill="none" stroke="#ebb035" d="M994.294,-786.38C975.762,-808.281 954,-834 954,-834 954,-834 818,-883 818,-883 818,-883 808,-929 808,-929 808,-929 696,-1042 696,-1042 696,-1042 686,-1243 686,-1243 686,-1243 647.466,-1411.3 628.413,-1494.52"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="624.955,-1493.94 626.135,-1504.47 631.778,-1495.5 624.955,-1493.94"/>
+</g>
+<!-- 33,1 -->
+<g id="node189" class="node"><title>33,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-1540" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-1551.17" font-family="Times Roman,serif" font-size="10.00">33,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-1532 459,-1546 510,-1546 510,-1532 459,-1532"/>
+<text text-anchor="start" x="469" y="-1536.67" font-family="Times Roman,serif" font-size="10.00">TCGCT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-1518 459,-1532 510,-1532 510,-1518 459,-1518"/>
+<text text-anchor="start" x="466.5" y="-1522.67" font-family="Times Roman,serif" font-size="10.00">AGCGA</text>
+</g>
+<!-- 33,1->33,2 -->
+<g id="edge812" class="edge"><title>33,1->33,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-1533.53C540.501,-1533.25 550.748,-1533.18 560.703,-1533.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-1536.82 570.933,-1533.52 561.007,-1529.82 560.864,-1536.82"/>
+</g>
+<!-- 33,2->34,1 -->
+<g id="edge814" class="edge"><title>33,2->34,1</title>
+<path fill="none" stroke="#dd1e2f" d="M610.766,-1504.26C593.441,-1418.67 551,-1209 551,-1209 551,-1209 551,-1131 551,-1131 551,-1131 591.863,-902.29 609.764,-802.095"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="613.262,-802.416 611.576,-791.957 606.371,-801.185 613.262,-802.416"/>
+</g>
+<!-- 33,2->34,4 -->
+<g id="edge818" class="edge"><title>33,2->34,4</title>
+<path fill="none" stroke="#ebb035" d="M624.261,-1504C638.874,-1419.98 674,-1218 674,-1218 674,-1218 696,-929 696,-929 696,-929 830,-835 830,-835 830,-835 942,-801 942,-801 942,-801 956.586,-792.585 973.143,-783.033"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="975.001,-786.002 981.914,-777.973 971.503,-779.938 975.001,-786.002"/>
+</g>
+<!-- 33,2->33,1 -->
+<g id="edge820" class="edge"><title>33,2->33,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-1546.48C561.29,-1546.75 551.041,-1546.82 541.091,-1546.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-1543.18 530.867,-1546.47 540.792,-1550.18 540.937,-1543.18"/>
+</g>
+<!-- 33,2->33,3 -->
+<g id="edge816" class="edge"><title>33,2->33,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1533.53C674.501,-1533.25 684.748,-1533.18 694.703,-1533.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1536.82 704.933,-1533.52 695.007,-1529.82 694.864,-1536.82"/>
+</g>
+<!-- 33,3->36,1 -->
+<g id="edge824" class="edge"><title>33,3->36,1</title>
+<path fill="none" stroke="#06a2cb" d="M759.085,-1504.26C776.501,-1416.41 820,-1197 820,-1197 820,-1197 830,-1122 830,-1122 830,-1122 837.283,-1115.76 846.596,-1107.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="849.085,-1110.25 854.4,-1101.09 844.529,-1104.94 849.085,-1110.25"/>
+</g>
+<!-- 33,3->33,2 -->
+<g id="edge828" class="edge"><title>33,3->33,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-1546.48C695.29,-1546.75 685.041,-1546.82 675.091,-1546.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1543.18 664.867,-1546.47 674.792,-1550.18 674.937,-1543.18"/>
+</g>
+<!-- 33,3->33,4 -->
+<g id="edge822" class="edge"><title>33,3->33,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1533.53C808.501,-1533.25 818.748,-1533.18 828.703,-1533.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1536.82 838.933,-1533.52 829.007,-1529.82 828.864,-1536.82"/>
+</g>
+<!-- 33,3->32,1 -->
+<g id="edge826" class="edge"><title>33,3->32,1</title>
+<path fill="none" stroke="#06a2cb" d="M720.4,-1567.09C707.697,-1577.97 696,-1588 696,-1588 696,-1588 686,-1698 686,-1698 686,-1698 674,-1780 674,-1780 674,-1780 647.692,-1871.14 631.139,-1928.48"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="627.682,-1927.84 628.271,-1938.42 634.407,-1929.78 627.682,-1927.84"/>
+</g>
+<!-- 33,4->34,2 -->
+<g id="edge832" class="edge"><title>33,4->34,2</title>
+<path fill="none" stroke="#ebb035" d="M854.4,-1512.91C841.697,-1502.03 830,-1492 830,-1492 830,-1492 820,-1032 820,-1032 820,-1032 782.554,-880.014 763.238,-801.612"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="766.541,-800.389 760.751,-791.517 759.745,-802.064 766.541,-800.389"/>
+</g>
+<!-- 33,4->34,3 -->
+<g id="edge830" class="edge"><title>33,4->34,3</title>
+<path fill="none" stroke="#dd1e2f" d="M854.07,-1512.84C836.813,-1498.15 819,-1483 819,-1483 819,-1483 819,-1035 819,-1035 819,-1035 855.988,-880.975 874.999,-801.809"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="878.514,-802.16 877.446,-791.619 871.708,-800.525 878.514,-802.16"/>
+</g>
+<!-- 33,4->33,3 -->
+<g id="edge834" class="edge"><title>33,4->33,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-1546.48C829.29,-1546.75 819.041,-1546.82 809.091,-1546.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1543.18 798.867,-1546.47 808.792,-1550.18 808.937,-1543.18"/>
+</g>
+<!-- 32,1->35,3 -->
+<g id="edge388" class="edge"><title>32,1->35,3</title>
+<path fill="none" stroke="#06a2cb" d="M638.034,-1941C658.093,-1907.96 686,-1862 686,-1862 686,-1862 696,-1684 696,-1684 696,-1684 703.283,-1677.76 712.596,-1669.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="715.085,-1672.25 720.4,-1663.09 710.529,-1666.94 715.085,-1672.25"/>
+</g>
+<!-- 32,1->33,3 -->
+<g id="edge386" class="edge"><title>32,1->33,3</title>
+<path fill="none" stroke="#06a2cb" d="M628.271,-1938.42C644.438,-1882.41 674,-1780 674,-1780 674,-1780 696,-1588 696,-1588 696,-1588 703.283,-1581.76 712.596,-1573.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="715.085,-1576.25 720.4,-1567.09 710.529,-1570.94 715.085,-1576.25"/>
+</g>
+<!-- 32,1->32,2 -->
+<g id="edge384" class="edge"><title>32,1->32,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1967.53C674.501,-1967.25 684.748,-1967.18 694.703,-1967.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1970.82 704.933,-1967.52 695.007,-1963.82 694.864,-1970.82"/>
+</g>
+<!-- 32,2->31,1 -->
+<g id="edge390" class="edge"><title>32,2->31,1</title>
+<path fill="none" stroke="#dd1e2f" d="M719.991,-1947.17C702.354,-1932.39 684,-1917 684,-1917 684,-1917 653.327,-1831.02 633.801,-1776.29"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="637.071,-1775.04 630.414,-1766.8 630.478,-1777.39 637.071,-1775.04"/>
+</g>
+<!-- 32,2->32,1 -->
+<g id="edge394" class="edge"><title>32,2->32,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-1980.48C695.29,-1980.75 685.041,-1980.82 675.091,-1980.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1977.18 664.867,-1980.47 674.792,-1984.18 674.937,-1977.18"/>
+</g>
+<!-- 32,3 -->
+<g id="node196" class="node"><title>32,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1974" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1985.17" font-family="Times Roman,serif" font-size="10.00">32,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1966 861,-1980 912,-1980 912,-1966 861,-1966"/>
+<text text-anchor="start" x="870" y="-1970.67" font-family="Times Roman,serif" font-size="10.00">GCGTC</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1952 861,-1966 912,-1966 912,-1952 861,-1952"/>
+<text text-anchor="start" x="868.5" y="-1956.67" font-family="Times Roman,serif" font-size="10.00">GACGC</text>
+</g>
+<!-- 32,2->32,3 -->
+<g id="edge392" class="edge"><title>32,2->32,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1967.53C808.501,-1967.25 818.748,-1967.18 828.703,-1967.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1970.82 838.933,-1967.52 829.007,-1963.82 828.864,-1970.82"/>
+</g>
+<!-- 32,3->32,2 -->
+<g id="edge398" class="edge"><title>32,3->32,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-1980.48C829.29,-1980.75 819.041,-1980.82 809.091,-1980.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1977.18 798.867,-1980.47 808.792,-1984.18 808.937,-1977.18"/>
+</g>
+<!-- 32,3->32,4 -->
+<g id="edge396" class="edge"><title>32,3->32,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-1967.53C942.501,-1967.25 952.748,-1967.18 962.703,-1967.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-1970.82 972.933,-1967.52 963.007,-1963.82 962.864,-1970.82"/>
+</g>
+<!-- 32,4->29,2 -->
+<g id="edge402" class="edge"><title>32,4->29,2</title>
+<path fill="none" stroke="#ebb035" d="M1003.8,-2008.13C987.264,-2042.98 964,-2092 964,-2092 964,-2092 942,-2188 942,-2188 942,-2188 922.563,-2228.96 906.591,-2262.61"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="903.323,-2261.33 902.198,-2271.87 909.647,-2264.34 903.323,-2261.33"/>
+</g>
+<!-- 32,4->31,3 -->
+<g id="edge400" class="edge"><title>32,4->31,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1009.73,-1938.42C993.562,-1882.41 964,-1780 964,-1780 964,-1780 954,-1246 954,-1246 954,-1246 952,-1246 952,-1246 952,-1246 942,-1684 942,-1684 942,-1684 934.717,-1690.24 925.404,-1698.22"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="922.915,-1695.75 917.6,-1704.91 927.471,-1701.06 922.915,-1695.75"/>
+</g>
+<!-- 32,4->32,3 -->
+<g id="edge404" class="edge"><title>32,4->32,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-1980.48C963.29,-1980.75 953.041,-1980.82 943.091,-1980.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-1977.18 932.867,-1980.47 942.792,-1984.18 942.937,-1977.18"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/.part-0.crc
new file mode 100644
index 0000000..32c39ff
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/.part-1.crc
new file mode 100644
index 0000000..72c5a6b
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/part-0
new file mode 100755
index 0000000..7db79d9
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/part-1
new file mode 100755
index 0000000..54cde64
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq1/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2.txt
new file mode 100644
index 0000000..474c862
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2.txt
@@ -0,0 +1,24 @@
+((2,1) [(2,2)] [] [(3,3)] [] CTAGC) (null)
+((2,2) [(6,1),(2,3)] [(1,4)] [] [(2,1)] TAGCG) (null)
+((2,3) [(2,4)] [] [(3,1)] [(2,2)] AGCGC) (null)
+((2,4) [(6,3)] [(1,2)] [] [(2,3)] GCGCA) (null)
+((4,1) [(4,2)] [] [] [(3,2)] CTAGG) (null)
+((4,2) [(5,1),(4,3)] [] [] [(4,1)] TAGGA) (null)
+((4,3) [(4,4)] [] [] [(3,4),(4,2)] AGGAG) (null)
+((4,4) [(5,3)] [] [] [(4,3)] GGAGT) (null)
+((6,1) [(6,2)] [] [] [(2,2)] AGCGC) (null)
+((6,2) [(6,3)] [] [] [(6,1)] GCGCA) (null)
+((6,3) [(6,4)] [] [] [(2,4),(6,2)] CGCAT) (null)
+((6,4) [] [] [] [(6,3)] GCATT) (null)
+((1,1) [(1,2)] [] [] [] AATGC) (null)
+((1,2) [(1,3)] [(2,4)] [] [(1,1)] ATGCG) (null)
+((1,3) [(1,4)] [] [] [(1,2)] TGCGC) (null)
+((1,4) [] [(2,2)] [] [(1,3)] GCGCT) (null)
+((3,1) [(3,2)] [] [(2,3)] [] CGCTA) (null)
+((3,2) [(4,1),(3,3)] [] [] [(3,1)] GCTAG) (null)
+((3,3) [(3,4)] [] [(2,1)] [(3,2)] CTAGG) (null)
+((3,4) [(4,3)] [] [] [(3,3)] TAGGA) (null)
+((5,1) [(5,2)] [] [] [(4,2)] AGGAG) (null)
+((5,2) [(5,3)] [] [] [(5,1)] GGAGT) (null)
+((5,3) [(5,4)] [] [] [(4,4),(5,2)] GAGTT) (null)
+((5,4) [] [] [] [(5,3)] AGTTG) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2.txt.svg
new file mode 100644
index 0000000..70ffb5c
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2.txt.svg
@@ -0,0 +1,587 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: walk_random_seq2_txt Pages: 1 -->
+<svg width="1260pt" height="669pt"
+ viewBox="0.00 0.00 1260.00 669.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 665)">
+<title>walk_random_seq2_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-665 1257,-665 1257,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-130 49,-331 211,-331 211,-130 49,-130"/>
+<text text-anchor="middle" x="130" y="-314.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-558 8,-646 500,-646 500,-558 8,-558"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="274,-200 274,-288 748,-288 748,-200 274,-200"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="150,-462 150,-550 624,-550 624,-462 150,-462"/>
+</g>
+<g id="graph6" class="cluster"><title>cluster_5</title>
+<polygon fill="none" stroke="black" points="770,-8 770,-96 1244,-96 1244,-8 770,-8"/>
+</g>
+<g id="graph7" class="cluster"><title>cluster_4</title>
+<polygon fill="none" stroke="black" points="522,-104 522,-192 996,-192 996,-104 522,-104"/>
+</g>
+<g id="graph8" class="cluster"><title>cluster_6</title>
+<polygon fill="none" stroke="black" points="398,-366 398,-454 872,-454 872,-366 398,-366"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-279" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-279" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-279C74.8673,-279 156.744,-279 188.46,-279"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-282.5 198.862,-279 188.861,-275.5 188.862,-282.5"/>
+<text text-anchor="middle" x="130" y="-284.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-238" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-238" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-238C74.8673,-238 156.744,-238 188.46,-238"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-241.5 198.862,-238 188.861,-234.5 188.862,-241.5"/>
+<text text-anchor="middle" x="130" y="-243.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-197" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-197" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-197C74.8673,-197 156.744,-197 188.46,-197"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-200.5 198.862,-197 188.861,-193.5 188.862,-200.5"/>
+<text text-anchor="middle" x="130" y="-202.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-156" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-156" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-156C74.8673,-156 156.744,-156 188.46,-156"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-159.5 198.862,-156 188.861,-152.5 188.862,-159.5"/>
+<text text-anchor="middle" x="130" y="-161.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-602" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-613.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-594 37,-608 82,-608 82,-594 37,-594"/>
+<text text-anchor="start" x="43" y="-598.667" font-family="Times Roman,serif" font-size="10.00">AATGC</text>
+<polygon fill="#218559" stroke="#218559" points="37,-580 37,-594 82,-594 82,-580 37,-580"/>
+<text text-anchor="start" x="44" y="-584.667" font-family="Times Roman,serif" font-size="10.00">GCATT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-602" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-613.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-594 179,-608 224,-608 224,-594 179,-594"/>
+<text text-anchor="start" x="185" y="-598.667" font-family="Times Roman,serif" font-size="10.00">ATGCG</text>
+<polygon fill="#218559" stroke="#218559" points="179,-580 179,-594 224,-594 224,-580 179,-580"/>
+<text text-anchor="start" x="185" y="-584.667" font-family="Times Roman,serif" font-size="10.00">CGCAT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge77" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-595.755C116.207,-595.208 132.729,-595.105 148.049,-595.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-598.957 158.425,-595.756 148.534,-591.96 148.326,-598.957"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge83" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-608.244C143.825,-608.792 127.305,-608.895 111.982,-608.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-605.043 101.605,-608.245 111.497,-612.04 111.704,-605.043"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-602" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-613.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-594 303,-608 348,-608 348,-594 303,-594"/>
+<text text-anchor="start" x="308.5" y="-598.667" font-family="Times Roman,serif" font-size="10.00">TGCGC</text>
+<polygon fill="#218559" stroke="#218559" points="303,-580 303,-594 348,-594 348,-580 303,-580"/>
+<text text-anchor="start" x="307.5" y="-584.667" font-family="Times Roman,serif" font-size="10.00">GCGCA</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge79" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-595.562C252.601,-595.258 262.531,-595.176 272.159,-595.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-598.822 282.443,-595.554 272.527,-591.823 272.364,-598.822"/>
+</g>
+<!-- 2,4 -->
+<g id="node28" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-506" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-517.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-498 551,-512 596,-512 596,-498 551,-498"/>
+<text text-anchor="start" x="555.5" y="-502.667" font-family="Times Roman,serif" font-size="10.00">GCGCA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-484 551,-498 596,-498 596,-484 551,-484"/>
+<text text-anchor="start" x="556.5" y="-488.667" font-family="Times Roman,serif" font-size="10.00">TGCGC</text>
+</g>
+<!-- 1,2->2,4 -->
+<g id="edge81" class="edge"><title>1,2->2,4</title>
+<path fill="none" stroke="#ebb035" d="M231.143,-627.695C246.511,-640.796 262,-654 262,-654 262,-654 274,-661 274,-661 274,-661 500,-661 500,-661 500,-661 512,-639 512,-639 512,-639 535.266,-588.272 553.061,-549.474"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="556.462,-550.454 557.449,-539.906 550.099,-547.536 556.462,-550.454"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge87" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M282.443,-608.446C273.158,-608.745 263.225,-608.824 253.602,-608.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-605.175 243.327,-608.438 253.242,-612.173 253.407,-605.175"/>
+</g>
+<!-- 1,4 -->
+<g id="node18" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-602" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-613.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-594 427,-608 472,-608 472,-594 427,-594"/>
+<text text-anchor="start" x="432.5" y="-598.667" font-family="Times Roman,serif" font-size="10.00">GCGCT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-580 427,-594 472,-594 472,-580 427,-580"/>
+<text text-anchor="start" x="431.5" y="-584.667" font-family="Times Roman,serif" font-size="10.00">AGCGC</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge85" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-595.562C376.601,-595.258 386.531,-595.176 396.159,-595.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-598.822 406.443,-595.554 396.527,-591.823 396.364,-598.822"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge91" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M406.443,-608.446C397.158,-608.745 387.225,-608.824 377.602,-608.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-605.175 367.327,-608.438 377.242,-612.173 377.407,-605.175"/>
+</g>
+<!-- 2,2 -->
+<g id="node26" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-506" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-517.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-498 303,-512 348,-512 348,-498 303,-498"/>
+<text text-anchor="start" x="309" y="-502.667" font-family="Times Roman,serif" font-size="10.00">TAGCG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-484 303,-498 348,-498 348,-484 303,-484"/>
+<text text-anchor="start" x="309" y="-488.667" font-family="Times Roman,serif" font-size="10.00">CGCTA</text>
+</g>
+<!-- 1,4->2,2 -->
+<g id="edge89" class="edge"><title>1,4->2,2</title>
+<path fill="none" stroke="#ebb035" d="M414.551,-580.127C399.843,-570.789 386,-562 386,-562 386,-562 374.667,-551.596 361.771,-539.757"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="363.804,-536.872 354.071,-532.688 359.07,-542.029 363.804,-536.872"/>
+</g>
+<!-- 3,1 -->
+<g id="node20" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-244" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-255.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-236 303,-250 348,-250 348,-236 303,-236"/>
+<text text-anchor="start" x="309" y="-240.667" font-family="Times Roman,serif" font-size="10.00">CGCTA</text>
+<polygon fill="#218559" stroke="#218559" points="303,-222 303,-236 348,-236 348,-222 303,-222"/>
+<text text-anchor="start" x="309" y="-226.667" font-family="Times Roman,serif" font-size="10.00">TAGCG</text>
+</g>
+<!-- 3,2 -->
+<g id="node21" class="node"><title>3,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-244" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-255.167" font-family="Times Roman,serif" font-size="10.00">3,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-236 427,-250 472,-250 472,-236 427,-236"/>
+<text text-anchor="start" x="433" y="-240.667" font-family="Times Roman,serif" font-size="10.00">GCTAG</text>
+<polygon fill="#218559" stroke="#218559" points="427,-222 427,-236 472,-236 472,-222 427,-222"/>
+<text text-anchor="start" x="433" y="-226.667" font-family="Times Roman,serif" font-size="10.00">CTAGC</text>
+</g>
+<!-- 3,1->3,2 -->
+<g id="edge93" class="edge"><title>3,1->3,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-237.562C376.601,-237.258 386.531,-237.176 396.159,-237.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-240.822 406.443,-237.554 396.527,-233.823 396.364,-240.822"/>
+</g>
+<!-- 2,3 -->
+<g id="node27" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-506" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-517.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-498 427,-512 472,-512 472,-498 427,-498"/>
+<text text-anchor="start" x="431.5" y="-502.667" font-family="Times Roman,serif" font-size="10.00">AGCGC</text>
+<polygon fill="#218559" stroke="#218559" points="427,-484 427,-498 472,-498 472,-484 427,-484"/>
+<text text-anchor="start" x="432.5" y="-488.667" font-family="Times Roman,serif" font-size="10.00">GCGCT</text>
+</g>
+<!-- 3,1->2,3 -->
+<g id="edge95" class="edge"><title>3,1->2,3</title>
+<path fill="none" stroke="#06a2cb" d="M336.891,-278.859C357.577,-339.499 398,-458 398,-458 398,-458 404.502,-464.119 412.863,-471.988"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="410.54,-474.609 420.221,-478.914 415.338,-469.511 410.54,-474.609"/>
+</g>
+<!-- 3,2->3,1 -->
+<g id="edge101" class="edge"><title>3,2->3,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-250.446C397.158,-250.745 387.225,-250.824 377.602,-250.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-247.175 367.327,-250.438 377.242,-254.173 377.407,-247.175"/>
+</g>
+<!-- 3,3 -->
+<g id="node22" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-244" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-255.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-236 551,-250 596,-250 596,-236 551,-236"/>
+<text text-anchor="start" x="557" y="-240.667" font-family="Times Roman,serif" font-size="10.00">CTAGG</text>
+<polygon fill="#218559" stroke="#218559" points="551,-222 551,-236 596,-236 596,-222 551,-222"/>
+<text text-anchor="start" x="557" y="-226.667" font-family="Times Roman,serif" font-size="10.00">CCTAG</text>
+</g>
+<!-- 3,2->3,3 -->
+<g id="edge99" class="edge"><title>3,2->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-237.562C500.601,-237.258 510.531,-237.176 520.159,-237.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-240.822 530.443,-237.554 520.527,-233.823 520.364,-240.822"/>
+</g>
+<!-- 4,1 -->
+<g id="node35" class="node"><title>4,1</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-148" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">4,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-140 551,-154 596,-154 596,-140 551,-140"/>
+<text text-anchor="start" x="557" y="-144.667" font-family="Times Roman,serif" font-size="10.00">CTAGG</text>
+<polygon fill="#218559" stroke="#218559" points="551,-126 551,-140 596,-140 596,-126 551,-126"/>
+<text text-anchor="start" x="557" y="-130.667" font-family="Times Roman,serif" font-size="10.00">CCTAG</text>
+</g>
+<!-- 3,2->4,1 -->
+<g id="edge97" class="edge"><title>3,2->4,1</title>
+<path fill="none" stroke="#dd1e2f" d="M479.143,-218.305C494.511,-205.204 510,-192 510,-192 510,-192 519.601,-185.295 531.307,-177.119"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="533.461,-179.884 539.655,-171.288 529.453,-174.145 533.461,-179.884"/>
+</g>
+<!-- 3,3->3,2 -->
+<g id="edge107" class="edge"><title>3,3->3,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-250.446C521.158,-250.745 511.225,-250.824 501.602,-250.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-247.175 491.327,-250.438 501.242,-254.173 501.407,-247.175"/>
+</g>
+<!-- 3,4 -->
+<g id="node23" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-244" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-255.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-236 675,-250 720,-250 720,-236 675,-236"/>
+<text text-anchor="start" x="681" y="-240.667" font-family="Times Roman,serif" font-size="10.00">TAGGA</text>
+<polygon fill="#218559" stroke="#218559" points="675,-222 675,-236 720,-236 720,-222 675,-222"/>
+<text text-anchor="start" x="682.5" y="-226.667" font-family="Times Roman,serif" font-size="10.00">TCCTA</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge103" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-237.562C624.601,-237.258 634.531,-237.176 644.159,-237.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-240.822 654.443,-237.554 644.527,-233.823 644.364,-240.822"/>
+</g>
+<!-- 2,1 -->
+<g id="node25" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-506" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-517.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-498 179,-512 224,-512 224,-498 179,-498"/>
+<text text-anchor="start" x="185" y="-502.667" font-family="Times Roman,serif" font-size="10.00">CTAGC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-484 179,-498 224,-498 224,-484 179,-484"/>
+<text text-anchor="start" x="185" y="-488.667" font-family="Times Roman,serif" font-size="10.00">GCTAG</text>
+</g>
+<!-- 3,3->2,1 -->
+<g id="edge105" class="edge"><title>3,3->2,1</title>
+<path fill="none" stroke="#06a2cb" d="M544.148,-271.271C523.744,-290.557 500,-313 500,-313 500,-313 398,-362 398,-362 398,-362 299.419,-434.059 241.729,-476.229"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="239.538,-473.494 233.531,-482.221 243.669,-479.146 239.538,-473.494"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge111" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M654.443,-250.446C645.158,-250.745 635.225,-250.824 625.602,-250.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-247.175 615.327,-250.438 625.242,-254.173 625.407,-247.175"/>
+</g>
+<!-- 4,3 -->
+<g id="node37" class="node"><title>4,3</title>
+<ellipse fill="none" stroke="black" cx="821" cy="-148" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="801.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">4,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="799,-140 799,-154 844,-154 844,-140 799,-140"/>
+<text text-anchor="start" x="803.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">AGGAG</text>
+<polygon fill="#218559" stroke="#218559" points="799,-126 799,-140 844,-140 844,-126 799,-126"/>
+<text text-anchor="start" x="806" y="-130.667" font-family="Times Roman,serif" font-size="10.00">CTCCT</text>
+</g>
+<!-- 3,4->4,3 -->
+<g id="edge109" class="edge"><title>3,4->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M733.282,-224.419C747.287,-216.861 760,-210 760,-210 760,-210 772.484,-197.311 786.157,-183.414"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="788.837,-185.681 793.356,-176.098 783.847,-180.771 788.837,-185.681"/>
+</g>
+<!-- 2,1->3,3 -->
+<g id="edge19" class="edge"><title>2,1->3,3</title>
+<path fill="none" stroke="#06a2cb" d="M213.198,-471.207C230.999,-420.429 262,-332 262,-332 262,-332 500,-289 500,-289 500,-289 513.817,-280.483 529.429,-270.859"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="531.534,-273.673 538.21,-265.446 527.861,-267.714 531.534,-273.673"/>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge17" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-499.562C252.601,-499.258 262.531,-499.176 272.159,-499.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-502.822 282.443,-499.554 272.527,-495.823 272.364,-502.822"/>
+</g>
+<!-- 2,2->1,4 -->
+<g id="edge25" class="edge"><title>2,2->1,4</title>
+<path fill="none" stroke="#ebb035" d="M356.611,-530.473C372.521,-542.79 391.976,-557.853 408.924,-570.973"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="406.965,-573.883 417.015,-577.238 411.251,-568.348 406.965,-573.883"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge27" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M282.443,-512.446C273.158,-512.745 263.225,-512.824 253.602,-512.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-509.175 243.327,-512.438 253.242,-516.173 253.407,-509.175"/>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge23" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-499.562C376.601,-499.258 386.531,-499.176 396.159,-499.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-502.822 406.443,-499.554 396.527,-495.823 396.364,-502.822"/>
+</g>
+<!-- 6,1 -->
+<g id="node40" class="node"><title>6,1</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-410" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-421.167" font-family="Times Roman,serif" font-size="10.00">6,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-402 427,-416 472,-416 472,-402 427,-402"/>
+<text text-anchor="start" x="431.5" y="-406.667" font-family="Times Roman,serif" font-size="10.00">AGCGC</text>
+<polygon fill="#218559" stroke="#218559" points="427,-388 427,-402 472,-402 472,-388 427,-388"/>
+<text text-anchor="start" x="432.5" y="-392.667" font-family="Times Roman,serif" font-size="10.00">GCGCT</text>
+</g>
+<!-- 2,2->6,1 -->
+<g id="edge21" class="edge"><title>2,2->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M356.611,-481.527C372.521,-469.21 391.976,-454.147 408.924,-441.027"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="411.251,-443.652 417.015,-434.762 406.965,-438.117 411.251,-443.652"/>
+</g>
+<!-- 2,3->3,1 -->
+<g id="edge31" class="edge"><title>2,3->3,1</title>
+<path fill="none" stroke="#06a2cb" d="M419.713,-479.502C403.261,-464.617 386,-449 386,-449 386,-449 356.323,-349.267 338.369,-288.928"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="341.693,-287.827 335.486,-279.241 334.984,-289.824 341.693,-287.827"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge33" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M406.443,-512.446C397.158,-512.745 387.225,-512.824 377.602,-512.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-509.175 367.327,-512.438 377.242,-516.173 377.407,-509.175"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge29" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-499.562C500.601,-499.258 510.531,-499.176 520.159,-499.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-502.822 530.443,-499.554 520.527,-495.823 520.364,-502.822"/>
+</g>
+<!-- 2,4->1,2 -->
+<g id="edge37" class="edge"><title>2,4->1,2</title>
+<path fill="none" stroke="#ebb035" d="M555.885,-539.058C534.308,-580.734 500,-647 500,-647 500,-647 274,-647 274,-647 274,-647 260.183,-638.483 244.571,-628.859"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="246.139,-625.714 235.79,-623.446 242.466,-631.673 246.139,-625.714"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge39" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M530.443,-512.446C521.158,-512.745 511.225,-512.824 501.602,-512.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-509.175 491.327,-512.438 501.242,-516.173 501.407,-509.175"/>
+</g>
+<!-- 6,3 -->
+<g id="node42" class="node"><title>6,3</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-410" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-421.167" font-family="Times Roman,serif" font-size="10.00">6,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-402 675,-416 720,-416 720,-402 675,-402"/>
+<text text-anchor="start" x="681" y="-406.667" font-family="Times Roman,serif" font-size="10.00">CGCAT</text>
+<polygon fill="#218559" stroke="#218559" points="675,-388 675,-402 720,-402 720,-388 675,-388"/>
+<text text-anchor="start" x="681" y="-392.667" font-family="Times Roman,serif" font-size="10.00">ATGCG</text>
+</g>
+<!-- 2,4->6,3 -->
+<g id="edge35" class="edge"><title>2,4->6,3</title>
+<path fill="none" stroke="#dd1e2f" d="M607.817,-484.447C622.387,-475.427 636,-467 636,-467 636,-467 647.721,-456.047 660.888,-443.744"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="663.369,-446.216 668.286,-436.831 658.59,-441.101 663.369,-446.216"/>
+</g>
+<!-- 5,1 -->
+<g id="node30" class="node"><title>5,1</title>
+<ellipse fill="none" stroke="black" cx="821" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="801.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">5,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="799,-44 799,-58 844,-58 844,-44 799,-44"/>
+<text text-anchor="start" x="803.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">AGGAG</text>
+<polygon fill="#218559" stroke="#218559" points="799,-30 799,-44 844,-44 844,-30 799,-30"/>
+<text text-anchor="start" x="806" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">CTCCT</text>
+</g>
+<!-- 5,2 -->
+<g id="node31" class="node"><title>5,2</title>
+<ellipse fill="none" stroke="black" cx="945" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="925.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">5,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="923,-44 923,-58 968,-58 968,-44 923,-44"/>
+<text text-anchor="start" x="928.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">GGAGT</text>
+<polygon fill="#218559" stroke="#218559" points="923,-30 923,-44 968,-44 968,-30 923,-30"/>
+<text text-anchor="start" x="929.5" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">ACTCC</text>
+</g>
+<!-- 5,1->5,2 -->
+<g id="edge113" class="edge"><title>5,1->5,2</title>
+<path fill="none" stroke="#dd1e2f" d="M863.327,-45.5616C872.601,-45.2583 882.531,-45.1764 892.159,-45.3159"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="892.364,-48.8215 902.443,-45.5541 892.527,-41.8234 892.364,-48.8215"/>
+</g>
+<!-- 4,2 -->
+<g id="node36" class="node"><title>4,2</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-148" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">4,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-140 675,-154 720,-154 720,-140 675,-140"/>
+<text text-anchor="start" x="681" y="-144.667" font-family="Times Roman,serif" font-size="10.00">TAGGA</text>
+<polygon fill="#218559" stroke="#218559" points="675,-126 675,-140 720,-140 720,-126 675,-126"/>
+<text text-anchor="start" x="682.5" y="-130.667" font-family="Times Roman,serif" font-size="10.00">TCCTA</text>
+</g>
+<!-- 5,1->4,2 -->
+<g id="edge115" class="edge"><title>5,1->4,2</title>
+<path fill="none" stroke="#218559" d="M790.857,-77.6953C775.489,-90.7961 760,-104 760,-104 760,-104 750.399,-110.705 738.693,-118.881"/>
+<polygon fill="#218559" stroke="#218559" points="736.539,-116.116 730.345,-124.712 740.547,-121.855 736.539,-116.116"/>
+</g>
+<!-- 5,2->5,1 -->
+<g id="edge119" class="edge"><title>5,2->5,1</title>
+<path fill="none" stroke="#218559" d="M902.443,-58.4459C893.158,-58.7455 883.225,-58.8237 873.602,-58.6806"/>
+<polygon fill="#218559" stroke="#218559" points="873.407,-55.1751 863.327,-58.4384 873.242,-62.1732 873.407,-55.1751"/>
+</g>
+<!-- 5,3 -->
+<g id="node32" class="node"><title>5,3</title>
+<ellipse fill="none" stroke="black" cx="1069" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1049.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">5,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1047,-44 1047,-58 1092,-58 1092,-44 1047,-44"/>
+<text text-anchor="start" x="1053.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">GAGTT</text>
+<polygon fill="#218559" stroke="#218559" points="1047,-30 1047,-44 1092,-44 1092,-30 1047,-30"/>
+<text text-anchor="start" x="1053.5" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">AACTC</text>
+</g>
+<!-- 5,2->5,3 -->
+<g id="edge117" class="edge"><title>5,2->5,3</title>
+<path fill="none" stroke="#dd1e2f" d="M987.327,-45.5616C996.601,-45.2583 1006.53,-45.1764 1016.16,-45.3159"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1016.36,-48.8215 1026.44,-45.5541 1016.53,-41.8234 1016.36,-48.8215"/>
+</g>
+<!-- 5,3->5,2 -->
+<g id="edge125" class="edge"><title>5,3->5,2</title>
+<path fill="none" stroke="#218559" d="M1026.44,-58.4459C1017.16,-58.7455 1007.23,-58.8237 997.602,-58.6806"/>
+<polygon fill="#218559" stroke="#218559" points="997.407,-55.1751 987.327,-58.4384 997.242,-62.1732 997.407,-55.1751"/>
+</g>
+<!-- 5,4 -->
+<g id="node33" class="node"><title>5,4</title>
+<ellipse fill="none" stroke="black" cx="1193" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1173.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">5,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1171,-44 1171,-58 1216,-58 1216,-44 1171,-44"/>
+<text text-anchor="start" x="1177.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">AGTTG</text>
+<polygon fill="#218559" stroke="#218559" points="1171,-30 1171,-44 1216,-44 1216,-30 1171,-30"/>
+<text text-anchor="start" x="1177" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">CAACT</text>
+</g>
+<!-- 5,3->5,4 -->
+<g id="edge121" class="edge"><title>5,3->5,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1111.33,-45.5616C1120.6,-45.2583 1130.53,-45.1764 1140.16,-45.3159"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1140.36,-48.8215 1150.44,-45.5541 1140.53,-41.8234 1140.36,-48.8215"/>
+</g>
+<!-- 4,4 -->
+<g id="node38" class="node"><title>4,4</title>
+<ellipse fill="none" stroke="black" cx="945" cy="-148" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="925.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">4,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="923,-140 923,-154 968,-154 968,-140 923,-140"/>
+<text text-anchor="start" x="928.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">GGAGT</text>
+<polygon fill="#218559" stroke="#218559" points="923,-126 923,-140 968,-140 968,-126 923,-126"/>
+<text text-anchor="start" x="929.5" y="-130.667" font-family="Times Roman,serif" font-size="10.00">ACTCC</text>
+</g>
+<!-- 5,3->4,4 -->
+<g id="edge123" class="edge"><title>5,3->4,4</title>
+<path fill="none" stroke="#218559" d="M1041.36,-80.0975C1025.22,-96.502 1008,-114 1008,-114 1008,-114 1000.24,-118.188 990.168,-123.624"/>
+<polygon fill="#218559" stroke="#218559" points="988.42,-120.59 981.282,-128.419 991.745,-126.75 988.42,-120.59"/>
+</g>
+<!-- 5,4->5,3 -->
+<g id="edge127" class="edge"><title>5,4->5,3</title>
+<path fill="none" stroke="#218559" d="M1150.44,-58.4459C1141.16,-58.7455 1131.23,-58.8237 1121.6,-58.6806"/>
+<polygon fill="#218559" stroke="#218559" points="1121.41,-55.1751 1111.33,-58.4384 1121.24,-62.1732 1121.41,-55.1751"/>
+</g>
+<!-- 4,1->3,2 -->
+<g id="edge43" class="edge"><title>4,1->3,2</title>
+<path fill="none" stroke="#218559" d="M541.015,-172.762C525.051,-185.122 505.587,-200.19 488.68,-213.28"/>
+<polygon fill="#218559" stroke="#218559" points="486.376,-210.637 480.611,-219.527 490.661,-216.173 486.376,-210.637"/>
+</g>
+<!-- 4,1->4,2 -->
+<g id="edge41" class="edge"><title>4,1->4,2</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-141.562C624.601,-141.258 634.531,-141.176 644.159,-141.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-144.822 654.443,-141.554 644.527,-137.823 644.364,-144.822"/>
+</g>
+<!-- 4,2->5,1 -->
+<g id="edge45" class="edge"><title>4,2->5,1</title>
+<path fill="none" stroke="#dd1e2f" d="M728.611,-123.527C744.521,-111.21 763.976,-96.1473 780.924,-83.0268"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="783.251,-85.6517 789.015,-76.7624 778.965,-80.1166 783.251,-85.6517"/>
+</g>
+<!-- 4,2->4,1 -->
+<g id="edge49" class="edge"><title>4,2->4,1</title>
+<path fill="none" stroke="#218559" d="M654.443,-154.446C645.158,-154.745 635.225,-154.824 625.602,-154.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-151.175 615.327,-154.438 625.242,-158.173 625.407,-151.175"/>
+</g>
+<!-- 4,2->4,3 -->
+<g id="edge47" class="edge"><title>4,2->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M739.327,-141.562C748.601,-141.258 758.531,-141.176 768.159,-141.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="768.364,-144.822 778.443,-141.554 768.527,-137.823 768.364,-144.822"/>
+</g>
+<!-- 4,3->3,4 -->
+<g id="edge53" class="edge"><title>4,3->3,4</title>
+<path fill="none" stroke="#218559" d="M789.015,-172.762C773.051,-185.122 753.587,-200.19 736.68,-213.28"/>
+<polygon fill="#218559" stroke="#218559" points="734.376,-210.637 728.611,-219.527 738.661,-216.173 734.376,-210.637"/>
+</g>
+<!-- 4,3->4,2 -->
+<g id="edge55" class="edge"><title>4,3->4,2</title>
+<path fill="none" stroke="#218559" d="M778.443,-154.446C769.158,-154.745 759.225,-154.824 749.602,-154.681"/>
+<polygon fill="#218559" stroke="#218559" points="749.407,-151.175 739.327,-154.438 749.242,-158.173 749.407,-151.175"/>
+</g>
+<!-- 4,3->4,4 -->
+<g id="edge51" class="edge"><title>4,3->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M863.327,-141.562C872.601,-141.258 882.531,-141.176 892.159,-141.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="892.364,-144.822 902.443,-141.554 892.527,-137.823 892.364,-144.822"/>
+</g>
+<!-- 4,4->5,3 -->
+<g id="edge57" class="edge"><title>4,4->5,3</title>
+<path fill="none" stroke="#dd1e2f" d="M976.611,-123.527C992.521,-111.21 1011.98,-96.1473 1028.92,-83.0268"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1031.25,-85.6517 1037.02,-76.7624 1026.97,-80.1166 1031.25,-85.6517"/>
+</g>
+<!-- 4,4->4,3 -->
+<g id="edge59" class="edge"><title>4,4->4,3</title>
+<path fill="none" stroke="#218559" d="M902.443,-154.446C893.158,-154.745 883.225,-154.824 873.602,-154.681"/>
+<polygon fill="#218559" stroke="#218559" points="873.407,-151.175 863.327,-154.438 873.242,-158.173 873.407,-151.175"/>
+</g>
+<!-- 6,1->2,2 -->
+<g id="edge63" class="edge"><title>6,1->2,2</title>
+<path fill="none" stroke="#218559" d="M415.655,-433.288C400.544,-443.843 386,-454 386,-454 386,-454 375.378,-463.055 362.998,-473.608"/>
+<polygon fill="#218559" stroke="#218559" points="360.482,-471.154 355.143,-480.305 365.023,-476.481 360.482,-471.154"/>
+</g>
+<!-- 6,2 -->
+<g id="node41" class="node"><title>6,2</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-410" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-421.167" font-family="Times Roman,serif" font-size="10.00">6,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-402 551,-416 596,-416 596,-402 551,-402"/>
+<text text-anchor="start" x="555.5" y="-406.667" font-family="Times Roman,serif" font-size="10.00">GCGCA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-388 551,-402 596,-402 596,-388 551,-388"/>
+<text text-anchor="start" x="556.5" y="-392.667" font-family="Times Roman,serif" font-size="10.00">TGCGC</text>
+</g>
+<!-- 6,1->6,2 -->
+<g id="edge61" class="edge"><title>6,1->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-403.562C500.601,-403.258 510.531,-403.176 520.159,-403.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-406.822 530.443,-403.554 520.527,-399.823 520.364,-406.822"/>
+</g>
+<!-- 6,2->6,1 -->
+<g id="edge67" class="edge"><title>6,2->6,1</title>
+<path fill="none" stroke="#218559" d="M530.443,-416.446C521.158,-416.745 511.225,-416.824 501.602,-416.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-413.175 491.327,-416.438 501.242,-420.173 501.407,-413.175"/>
+</g>
+<!-- 6,2->6,3 -->
+<g id="edge65" class="edge"><title>6,2->6,3</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-403.562C624.601,-403.258 634.531,-403.176 644.159,-403.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-406.822 654.443,-403.554 644.527,-399.823 644.364,-406.822"/>
+</g>
+<!-- 6,3->2,4 -->
+<g id="edge71" class="edge"><title>6,3->2,4</title>
+<path fill="none" stroke="#218559" d="M665.015,-434.762C649.051,-447.122 629.587,-462.19 612.68,-475.28"/>
+<polygon fill="#218559" stroke="#218559" points="610.376,-472.637 604.611,-481.527 614.661,-478.173 610.376,-472.637"/>
+</g>
+<!-- 6,3->6,2 -->
+<g id="edge73" class="edge"><title>6,3->6,2</title>
+<path fill="none" stroke="#218559" d="M654.443,-416.446C645.158,-416.745 635.225,-416.824 625.602,-416.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-413.175 615.327,-416.438 625.242,-420.173 625.407,-413.175"/>
+</g>
+<!-- 6,4 -->
+<g id="node43" class="node"><title>6,4</title>
+<ellipse fill="none" stroke="black" cx="821" cy="-410" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="801.5" y="-421.167" font-family="Times Roman,serif" font-size="10.00">6,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="799,-402 799,-416 844,-416 844,-402 799,-402"/>
+<text text-anchor="start" x="806" y="-406.667" font-family="Times Roman,serif" font-size="10.00">GCATT</text>
+<polygon fill="#218559" stroke="#218559" points="799,-388 799,-402 844,-402 844,-388 799,-388"/>
+<text text-anchor="start" x="805" y="-392.667" font-family="Times Roman,serif" font-size="10.00">AATGC</text>
+</g>
+<!-- 6,3->6,4 -->
+<g id="edge69" class="edge"><title>6,3->6,4</title>
+<path fill="none" stroke="#dd1e2f" d="M739.327,-403.562C748.601,-403.258 758.531,-403.176 768.159,-403.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="768.364,-406.822 778.443,-403.554 768.527,-399.823 768.364,-406.822"/>
+</g>
+<!-- 6,4->6,3 -->
+<g id="edge75" class="edge"><title>6,4->6,3</title>
+<path fill="none" stroke="#218559" d="M778.443,-416.446C769.158,-416.745 759.225,-416.824 749.602,-416.681"/>
+<polygon fill="#218559" stroke="#218559" points="749.407,-413.175 739.327,-416.438 749.242,-420.173 749.407,-413.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/.part-0.crc
new file mode 100644
index 0000000..2372965
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/.part-1.crc
new file mode 100644
index 0000000..dc540d5
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/part-0
new file mode 100755
index 0000000..f05a165
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/part-1
new file mode 100755
index 0000000..54201ec
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/synthetic/walk_random_seq2/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip.txt b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip.txt
new file mode 100644
index 0000000..84f6828
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip.txt
@@ -0,0 +1,6 @@
+((2,1) [(2,3)] [] [] [] GGAATA) (null)
+((2,3) [(2,4)] [] [] [(2,1)] AATAC) (null)
+((2,4) [] [(1,2)] [] [(2,3)] ATACG) (null)
+((1,1) [(1,2)] [] [] [] AACGT) (null)
+((1,2) [(1,3)] [(2,4)] [] [(1,1)] ACGTA) (null)
+((1,3) [] [] [] [(1,2)] CGTATA) (null)
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip.txt.svg b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip.txt.svg
new file mode 100644
index 0000000..9f13c3f
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip.txt.svg
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: fr_with_tip_txt Pages: 1 -->
+<svg width="640pt" height="417pt"
+ viewBox="0.00 0.00 640.00 417.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 413)">
+<title>fr_with_tip_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-413 637,-413 637,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="274,-313 274,-401 624,-401 624,-313 274,-313"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-349 303,-363 348,-363 348,-349 303,-349"/>
+<text text-anchor="start" x="309" y="-353.667" font-family="Times Roman,serif" font-size="10.00">AACGT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-335 303,-349 348,-349 348,-335 303,-335"/>
+<text text-anchor="start" x="310" y="-339.667" font-family="Times Roman,serif" font-size="10.00">ACGTT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-349 427,-363 472,-363 472,-349 427,-349"/>
+<text text-anchor="start" x="433.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+<polygon fill="#218559" stroke="#218559" points="427,-335 427,-349 472,-349 472,-335 427,-335"/>
+<text text-anchor="start" x="434" y="-339.667" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge23" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-350.562C376.601,-350.258 386.531,-350.176 396.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-353.822 406.443,-350.554 396.527,-346.823 396.364,-353.822"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge29" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-363.446C397.158,-363.745 387.225,-363.824 377.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-360.175 367.327,-363.438 377.242,-367.173 377.407,-360.175"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-349 551,-363 596,-363 596,-349 551,-349"/>
+<text text-anchor="start" x="555.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">CGTATA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-335 551,-349 596,-349 596,-335 551,-335"/>
+<text text-anchor="start" x="555.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">TATACG</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge25" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-350.562C500.601,-350.258 510.531,-350.176 520.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-353.822 530.443,-350.554 520.527,-346.823 520.364,-353.822"/>
+</g>
+<!-- 2,4 -->
+<g id="node21" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="309.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="310.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 1,2->2,4 -->
+<g id="edge27" class="edge"><title>1,2->2,4</title>
+<path fill="none" stroke="#ebb035" d="M415.655,-333.712C400.544,-323.157 386,-313 386,-313 386,-313 375.378,-303.945 362.998,-293.392"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="365.023,-290.519 355.143,-286.695 360.482,-295.846 365.023,-290.519"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge31" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-363.446C521.158,-363.745 511.225,-363.824 501.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-360.175 491.327,-363.438 501.242,-367.173 501.407,-360.175"/>
+</g>
+<!-- 2,1 -->
+<g id="node19" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="39.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">GGAATA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="42.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TATTCC</text>
+</g>
+<!-- 2,3 -->
+<g id="node20" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="186" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="187.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 2,1->2,3 -->
+<g id="edge13" class="edge"><title>2,1->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 2,3->2,1 -->
+<g id="edge17" class="edge"><title>2,3->2,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge15" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 2,4->1,2 -->
+<g id="edge19" class="edge"><title>2,4->1,2</title>
+<path fill="none" stroke="#ebb035" d="M356.611,-285.473C372.521,-297.79 391.976,-312.853 408.924,-325.973"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="406.965,-328.883 417.015,-332.238 411.251,-323.348 406.965,-328.883"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge21" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/.part-0.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/.part-0.crc
new file mode 100644
index 0000000..35486b9
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/.part-1.crc b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/.part-1.crc
new file mode 100644
index 0000000..53a0483
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/part-0 b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/part-0
new file mode 100755
index 0000000..6077d6e
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/part-0
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/part-1 b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/part-1
new file mode 100755
index 0000000..5e8d3f9
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/graphs/tipremove/fr_with_tip/part-1
Binary files differ
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/five_ff_bubbles.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/five_ff_bubbles.txt
new file mode 100644
index 0000000..63a8e55
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/five_ff_bubbles.txt
@@ -0,0 +1,4 @@
+1 ACGTCCTT
+2 CGTCCTTA
+3 GTCCTTAG
+4 GTCCTTAG
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/five_length1_bubbles.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/five_length1_bubbles.txt
new file mode 100644
index 0000000..13190dd
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/five_length1_bubbles.txt
@@ -0,0 +1,6 @@
+1 AATAGAAG
+2 AATAGAAG
+3 AATAGAAG
+4 AATAGAAG
+5 AATAGAAG
+6 AGAAGAAG
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/fr_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/fr_bubble.txt
new file mode 100644
index 0000000..4026c2c
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/fr_bubble.txt
@@ -0,0 +1,2 @@
+1 AAACGTAT
+2 GGAATACG
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/fr_bubble_and_ff_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/fr_bubble_and_ff_bubble.txt
new file mode 100644
index 0000000..e166418
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/fr_bubble_and_ff_bubble.txt
@@ -0,0 +1,3 @@
+1 AAACGTAT
+2 CGTATTCC
+3 GGAATACG
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/rf_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/rf_bubble.txt
new file mode 100644
index 0000000..154dc8c
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/rf_bubble.txt
@@ -0,0 +1,3 @@
+1 ACGGTGTA
+2 ACCGTGGT
+
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/small_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/small_bubble.txt
new file mode 100644
index 0000000..3e3bf7b
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/small_bubble.txt
@@ -0,0 +1,2 @@
+1 AATAGAAG
+2 AGAAGCCC
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/tip_and_bubble.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/tip_and_bubble.txt
new file mode 100644
index 0000000..958ccff
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/bubblemerge/tip_and_bubble.txt
@@ -0,0 +1,3 @@
+1 AATAGAAG
+2 ATAGACTA
+3 TAGACTAC
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/pathmerge/singleread.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/pathmerge/singleread.txt
new file mode 100644
index 0000000..63a95ad
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/pathmerge/singleread.txt
@@ -0,0 +1 @@
+1 AATAGAAG
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/synthetic/walk_random_seq1.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/synthetic/walk_random_seq1.txt
new file mode 100644
index 0000000..35f1c49
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/synthetic/walk_random_seq1.txt
@@ -0,0 +1,37 @@
+1 TAGTGCGA
+2 CCTCGCAC
+3 GCTAGGGT
+4 GAGGGTTG
+5 AGCAACCC
+6 GTTGCTGA
+7 TTTCAGCA
+8 CTGAAATC
+9 CAGATTTC
+10 GGCAGATT
+11 CTGGCAGA
+12 CTCTGGCA
+13 ATCTCTGG
+14 GCATCTCT
+15 CGGCATCT
+16 AACGGCAT
+17 GAAACGGC
+18 CGTTTCAA
+19 TATTGAAA
+20 TCAATACG
+21 AATACGTG
+22 TACGTGAA
+23 GTTTCACG
+24 TGAAACTA
+25 AAACTATT
+26 GTAATAGT
+27 TATTACGT
+28 TTACGTCA
+29 CATGACGT
+30 GTCATGAC
+31 GCGTCATG
+32 AAGCGTCA
+33 TCGCTTAA
+34 GCTTAAGC
+35 TCGCTTAA
+36 AAGCGTGT
+37 CCACACGC
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/synthetic/walk_random_seq2.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/synthetic/walk_random_seq2.txt
new file mode 100644
index 0000000..d65f7c0
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/synthetic/walk_random_seq2.txt
@@ -0,0 +1,6 @@
+1 AATGCGCT
+2 CTAGCGCA
+3 CGCTAGGA
+4 CTAGGAGT
+5 AGGAGTTG
+6 AGCGCATT
diff --git a/genomix/genomix-hadoop/src/test/resources/input/reads/tipremove/fr_with_tip.txt b/genomix/genomix-hadoop/src/test/resources/input/reads/tipremove/fr_with_tip.txt
new file mode 100644
index 0000000..b6e1640
--- /dev/null
+++ b/genomix/genomix-hadoop/src/test/resources/input/reads/tipremove/fr_with_tip.txt
@@ -0,0 +1,2 @@
+1 AACGTATA
+2 GGAATACG
diff --git a/genomix/genomix-hyracks/HyracksCodeFormatProfile.xml b/genomix/genomix-hyracks/HyracksCodeFormatProfile.xml
new file mode 100644
index 0000000..733ca5c
--- /dev/null
+++ b/genomix/genomix-hyracks/HyracksCodeFormatProfile.xml
@@ -0,0 +1,784 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<profiles version="11">
+ <profile kind="CodeFormatterProfile" name="HyracksCodeFormatProfile"
+ version="11">
+ <setting
+ id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.formatter.disabling_tag"
+ value="@formatter:off" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration"
+ value="end_of_line" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field"
+ value="0" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line"
+ value="false" />
+ <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression"
+ value="80" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer"
+ value="end_of_line" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package"
+ value="1" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.formatter.continuation_indentation"
+ value="2" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk"
+ value="1" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package"
+ value="0" />
+ <setting id="org.eclipse.jdt.core.compiler.source" value="1.5" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type"
+ value="1" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.align_type_members_on_columns"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment"
+ value="false" />
+ <setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration"
+ value="0" />
+ <setting id="org.eclipse.jdt.core.formatter.indentation.size"
+ value="4" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.enabling_tag"
+ value="@formatter:on" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration"
+ value="16" />
+ <setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment"
+ value="0" />
+ <setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier"
+ value="error" />
+ <setting id="org.eclipse.jdt.core.formatter.tabulation.char"
+ value="space" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body"
+ value="true" />
+ <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method"
+ value="1" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration"
+ value="end_of_line" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration"
+ value="0" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch"
+ value="end_of_line" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier"
+ value="error" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch"
+ value="true" />
+ <setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block"
+ value="end_of_line" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration"
+ value="end_of_line" />
+ <setting id="org.eclipse.jdt.core.formatter.compact_else_if"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant"
+ value="end_of_line" />
+ <setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.tabulation.size"
+ value="4" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.formatter.indent_empty_lines"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case"
+ value="end_of_line" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve"
+ value="1" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression"
+ value="16" />
+ <setting id="org.eclipse.jdt.core.compiler.compliance" value="1.5" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer"
+ value="2" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration"
+ value="end_of_line" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode"
+ value="enabled" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line"
+ value="false" />
+ <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant"
+ value="48" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments"
+ value="true" />
+ <setting id="org.eclipse.jdt.core.formatter.comment.line_length"
+ value="9999" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups"
+ value="1" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration"
+ value="end_of_line" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body"
+ value="0" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations"
+ value="1" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration"
+ value="16" />
+ <setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports"
+ value="1" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.formatter.comment.format_html"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.comment.format_source_code"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration"
+ value="16" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform"
+ value="1.5" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation"
+ value="0" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member"
+ value="insert" />
+ <setting id="org.eclipse.jdt.core.formatter.comment.format_header"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.comment.format_block_comments"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant"
+ value="do not insert" />
+ <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants"
+ value="49" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration"
+ value="end_of_line" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries"
+ value="true" />
+ <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports"
+ value="1" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header"
+ value="true" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for"
+ value="insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments"
+ value="do not insert" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column"
+ value="false" />
+ <setting
+ id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line"
+ value="false" />
+ </profile>
+</profiles>
diff --git a/genomix/genomix-hyracks/expected/HighSplitRepeat_k3.txt b/genomix/genomix-hyracks/expected/HighSplitRepeat_k3.txt
new file mode 100644
index 0000000..d6fd380
--- /dev/null
+++ b/genomix/genomix-hyracks/expected/HighSplitRepeat_k3.txt
@@ -0,0 +1,13 @@
+CCA {[{CAC:[1]}] [] [] [{GCC:[1]}] {5':[], ~5':[]} 1.0x}
+CAC {[{ACT:[2]}, {ACA:[1]}] [] [] [{CCA:[1]}, {GCA:[2]}] {5':[], ~5':[]} 2.0x}
+CGC {[{GCC:[3]}] [] [] [] {5':[(3-0_0)], ~5':[]} 1.0x}
+CCG {[] [{ACG:[3]}] [] [{GCC:[3]}] {5':[], ~5':[]} 1.0x}
+GCA {[{CAC:[2]}] [] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+GAC {[] [] [] [{ACG:[3]}] {5':[], ~5':[]} 1.0x}
+GCC {[{CCG:[3]}, {CCA:[1]}] [] [] [{AGC:[1]}, {CGC:[3]}] {5':[], ~5':[]} 2.0x}
+AAA {[] [] [] [{AAG:[2]}] {5':[], ~5':[]} 1.0x}
+ACA {[] [] [] [{CAC:[1]}] {5':[], ~5':[]} 1.0x}
+AGC {[{GCC:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+AAG {[] [{ACT:[2]}] [] [{AAA:[2]}] {5':[], ~5':[]} 1.0x}
+ACG {[] [{CCG:[3]}] [] [{GAC:[3]}] {5':[], ~5':[]} 1.0x}
+ACT {[] [{AAG:[2]}] [] [{CAC:[2]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-hyracks/expected/LowSplitRepeat_k3.txt b/genomix/genomix-hyracks/expected/LowSplitRepeat_k3.txt
new file mode 100755
index 0000000..fd0f006
--- /dev/null
+++ b/genomix/genomix-hyracks/expected/LowSplitRepeat_k3.txt
@@ -0,0 +1,6 @@
+CCA {[] [] [] [{GCC:[1]}] {5':[], ~5':[]} 1.0x}
+CCG {[] [] [] [{GCC:[2]}] {5':[], ~5':[]} 1.0x}
+GCC {[{CCG:[2]}, {CCA:[1]}] [{AGG:[3]}] [] [{AGC:[1,2]}] {5':[(3-0_0)], ~5':[]} 3.0x}
+AGC {[{GCC:[1,2]}] [] [] [] {5':[(2-0_0),(1-0_0)], ~5':[]} 2.0x}
+AAG {[] [] [] [{AGG:[3]}] {5':[], ~5':[]} 1.0x}
+AGG {[] [{GCC:[3]}] [] [{AAG:[3]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-hyracks/expected/MidSplitRepeat_k3.txt b/genomix/genomix-hyracks/expected/MidSplitRepeat_k3.txt
new file mode 100644
index 0000000..ea57e0c
--- /dev/null
+++ b/genomix/genomix-hyracks/expected/MidSplitRepeat_k3.txt
@@ -0,0 +1,6 @@
+CCA {[] [] [] [{GCC:[1]}] {5':[], ~5':[]} 1.0x}
+CGC {[{GCC:[2]}] [] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+CCG {[] [{CCG:[3]}] [] [{GCC:[3]}] {5':[], ~5':[]} 2.0x}
+GCC {[{CCG:[3]}, {CCA:[1]}] [{AGG:[2]}] [] [{AGC:[1]}, {CGC:[2]}] {5':[(3-0_0)], ~5':[]} 3.0x}
+AGC {[{GCC:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+AGG {[] [{GCC:[2]}] [] [] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-hyracks/expected/Tips1_k3.txt b/genomix/genomix-hyracks/expected/Tips1_k3.txt
new file mode 100644
index 0000000..daf6179
--- /dev/null
+++ b/genomix/genomix-hyracks/expected/Tips1_k3.txt
@@ -0,0 +1,7 @@
+CCA {[] [] [] [{GCC:[1]}] {5':[], ~5':[]} 1.0x}
+CAG {[{AGC:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+CCG {[] [{ACG:[2]}] [] [{GCC:[2]}] {5':[], ~5':[]} 1.0x}
+GTA {[] [] [{ACG:[2]}] [] {5':[], ~5':[]} 1.0x}
+GCC {[{CCG:[2]}, {CCA:[1]}] [] [] [{AGC:[1]}] {5':[(2-0_0)], ~5':[]} 2.0x}
+AGC {[{GCC:[1]}] [] [] [{CAG:[1]}] {5':[], ~5':[]} 1.0x}
+ACG {[] [{CCG:[2]}] [{GTA:[2]}] [] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-hyracks/expected/Tips2_k3.txt b/genomix/genomix-hyracks/expected/Tips2_k3.txt
new file mode 100644
index 0000000..8aee172
--- /dev/null
+++ b/genomix/genomix-hyracks/expected/Tips2_k3.txt
@@ -0,0 +1,7 @@
+CGA {[{GAA:[2]}] [] [{CGC:[2]}] [] {5':[], ~5':[]} 1.0x}
+CGC {[] [{AGC:[1]}] [{CGA:[2]}] [{GCC:[2]}] {5':[], ~5':[]} 2.0x}
+CAG {[{AGC:[1]}] [] [] [{ACA:[1]}] {5':[], ~5':[]} 1.0x}
+GAA {[] [] [] [{CGA:[2]}] {5':[], ~5':[]} 1.0x}
+GCC {[] [] [] [{CGC:[2]}] {5':[], ~5':[(2-0_0)]} 1.0x}
+ACA {[{CAG:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+AGC {[] [{CGC:[1]}] [] [{CAG:[1]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-hyracks/expected/Tips3_k3.txt b/genomix/genomix-hyracks/expected/Tips3_k3.txt
new file mode 100644
index 0000000..e1008bf
--- /dev/null
+++ b/genomix/genomix-hyracks/expected/Tips3_k3.txt
@@ -0,0 +1,5 @@
+CCA {[] [] [] [{GCC:[2]}] {5':[], ~5':[]} 1.0x}
+CAG {[{AGC:[1,2]}] [] [] [] {5':[(2-0_0),(1-0_0)], ~5':[]} 2.0x}
+GCC {[{CCA:[2]}] [{AGG:[1]}] [] [{AGC:[1,2]}] {5':[], ~5':[]} 2.0x}
+AGC {[{GCC:[1,2]}] [] [] [{CAG:[1,2]}] {5':[], ~5':[]} 2.0x}
+AGG {[] [{GCC:[1]}] [] [] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-hyracks/expected/Tips4_k3.txt b/genomix/genomix-hyracks/expected/Tips4_k3.txt
new file mode 100644
index 0000000..ff994ce
--- /dev/null
+++ b/genomix/genomix-hyracks/expected/Tips4_k3.txt
@@ -0,0 +1,4 @@
+CAG {[{AGG:[1,2]}] [] [] [] {5':[(2-0_0),(1-0_0)], ~5':[]} 2.0x}
+GCA {[] [] [{GCC:[1]}] [] {5':[], ~5':[]} 1.0x}
+GCC {[] [{AGG:[1,2]}] [{GCC:[2]}, {GCA:[1]}] [] {5':[], ~5':[]} 3.0x}
+AGG {[] [{GCC:[1,2]}] [] [{CAG:[1,2]}] {5':[], ~5':[]} 2.0x}
diff --git a/genomix/genomix-hyracks/pom.xml b/genomix/genomix-hyracks/pom.xml
new file mode 100644
index 0000000..f7595fa
--- /dev/null
+++ b/genomix/genomix-hyracks/pom.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>genomix-hyracks</artifactId>
+ <name>genomix-hyracks</name>
+
+ <parent>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>genomix</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ </parent>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.7</source>
+ <target>1.7</target>
+ <fork>true</fork>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>appassembler-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <configuration>
+ <programs>
+ <program>
+ <mainClass>edu.uci.ics.genomix.hyracks.driver.Driver</mainClass>
+ <name>genomix</name>
+ </program>
+ <program>
+ <mainClass>edu.uci.ics.hyracks.control.cc.CCDriver</mainClass>
+ <name>genomixcc</name>
+ </program>
+ <program>
+ <mainClass>edu.uci.ics.hyracks.control.nc.NCDriver</mainClass>
+ <name>genomixnc</name>
+ </program>
+ </programs>
+ <repositoryLayout>flat</repositoryLayout>
+ <repositoryName>lib</repositoryName>
+ </configuration>
+ <phase>package</phase>
+ <goals>
+ <goal>assemble</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-5</version>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ <executions>
+ <execution>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
+ </descriptors>
+ </configuration>
+ <phase>package</phase>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>make-my-jar-with-dependencies</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.7.2</version>
+ <configuration>
+ <forkMode>pertest</forkMode>
+ <argLine>-enableassertions -Xmx512m -XX:MaxPermSize=300m
+ -Dfile.encoding=UTF-8
+ -Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
+ <includes>
+ <include>**/*TestSuite.java</include>
+ <include>**/*Test.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>.</directory>
+ <includes>
+ <include>teststore*</include>
+ <include>edu*</include>
+ <include>actual*</include>
+ <include>build*</include>
+ <include>expect*</include>
+ <include>ClusterController*</include>
+ </includes>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.2</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.5</version>
+ <executions>
+ <execution>
+ <id>copy-scripts</id>
+ <!-- here the phase you need -->
+ <phase>package</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>target/appassembler/bin</outputDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/resources/scripts</directory>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-conf</id>
+ <!-- here the phase you need -->
+ <phase>package</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>target/appassembler/conf</outputDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/resources/conf</directory>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.6</version>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-dataflow-std</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-api</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-dataflow-common</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-data-std</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-control-cc</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-control-nc</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.kenai.nbpwr</groupId>
+ <artifactId>org-apache-commons-io</artifactId>
+ <version>1.3.1-201002241208</version>
+ <type>nbm</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks.examples</groupId>
+ <artifactId>hyracks-integration-tests</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-ipc</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-core</artifactId>
+ <version>0.20.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-test</artifactId>
+ <version>0.20.2</version>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>genomix-data</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-hdfs-core</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-hdfs-core</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/genomix/genomix-hyracks/src/main/assembly/binary-assembly.xml b/genomix/genomix-hyracks/src/main/assembly/binary-assembly.xml
new file mode 100644
index 0000000..68d424a
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/assembly/binary-assembly.xml
@@ -0,0 +1,19 @@
+<assembly>
+ <id>binary-assembly</id>
+ <formats>
+ <format>zip</format>
+ <format>dir</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/appassembler/bin</directory>
+ <outputDirectory>bin</outputDirectory>
+ <fileMode>0755</fileMode>
+ </fileSet>
+ <fileSet>
+ <directory>target/appassembler/lib</directory>
+ <outputDirectory>lib</outputDirectory>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/ByteSerializerDeserializer.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/ByteSerializerDeserializer.java
new file mode 100644
index 0000000..257d5a3
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/ByteSerializerDeserializer.java
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.data.accessors;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+
+public class ByteSerializerDeserializer implements ISerializerDeserializer<Byte> {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final ByteSerializerDeserializer INSTANCE = new ByteSerializerDeserializer();
+
+ private ByteSerializerDeserializer() {
+ }
+
+ @Override
+ public Byte deserialize(DataInput in) throws HyracksDataException {
+ try {
+ return in.readByte();
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ @Override
+ public void serialize(Byte instance, DataOutput out) throws HyracksDataException {
+ try {
+ out.writeByte(instance.intValue());
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ public static byte getByte(byte[] bytes, int offset) {
+ return bytes[offset];
+ }
+
+ public static void putByte(byte val, byte[] bytes, int offset) {
+ bytes[offset] = val;
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/KmerBinaryHashFunctionFamily.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/KmerBinaryHashFunctionFamily.java
new file mode 100644
index 0000000..130d5ab
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/KmerBinaryHashFunctionFamily.java
@@ -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.
+ */
+
+package edu.uci.ics.genomix.hyracks.data.accessors;
+
+import edu.uci.ics.genomix.hyracks.data.primitive.KmerPointable;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunction;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunctionFamily;
+
+public class KmerBinaryHashFunctionFamily implements IBinaryHashFunctionFamily {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public IBinaryHashFunction createBinaryHashFunction(final int seed) {
+
+ return new IBinaryHashFunction() {
+ private KmerPointable p = new KmerPointable();
+
+ @Override
+ public int hash(byte[] bytes, int offset, int length) {
+ if (length + offset >= bytes.length)
+ throw new IllegalStateException("out of bound");
+ p.set(bytes, offset, length);
+ int hash = p.hash() * (seed + 1);
+ if (hash < 0) {
+ hash = -(hash + 1);
+ }
+ return hash;
+ }
+ };
+ }
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/KmerHashPartitioncomputerFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/KmerHashPartitioncomputerFactory.java
new file mode 100644
index 0000000..f8d4f84
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/KmerHashPartitioncomputerFactory.java
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.data.accessors;
+
+import java.nio.ByteBuffer;
+
+import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
+import edu.uci.ics.hyracks.api.dataflow.value.ITuplePartitionComputer;
+import edu.uci.ics.hyracks.api.dataflow.value.ITuplePartitionComputerFactory;
+
+public class KmerHashPartitioncomputerFactory implements ITuplePartitionComputerFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public static int hashBytes(byte[] bytes, int offset, int length) {
+ int hash = 1;
+ for (int i = offset; i < offset + length; i++)
+ hash = (31 * hash) + (int) bytes[i];
+ return hash;
+ }
+
+ @Override
+ public ITuplePartitionComputer createPartitioner() {
+ return new ITuplePartitionComputer() {
+ @Override
+ public int partition(IFrameTupleAccessor accessor, int tIndex, int nParts) {
+ int startOffset = accessor.getTupleStartOffset(tIndex);
+ int fieldOffset = accessor.getFieldStartOffset(tIndex, 0);
+ int slotLength = accessor.getFieldSlotsLength();
+ int fieldLength = accessor.getFieldLength(tIndex, 0);
+
+ ByteBuffer buf = accessor.getBuffer();
+
+ int hash = hashBytes(buf.array(), startOffset + fieldOffset + slotLength, fieldLength);
+ if (hash < 0) {
+ hash = -(hash + 1);
+ }
+
+ return hash % nParts;
+ }
+ };
+ }
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/KmerNormarlizedComputerFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/KmerNormarlizedComputerFactory.java
new file mode 100644
index 0000000..7dd3b14
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/KmerNormarlizedComputerFactory.java
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.data.accessors;
+
+import edu.uci.ics.genomix.hyracks.data.primitive.KmerPointable;
+import edu.uci.ics.hyracks.api.dataflow.value.INormalizedKeyComputer;
+import edu.uci.ics.hyracks.api.dataflow.value.INormalizedKeyComputerFactory;
+
+public class KmerNormarlizedComputerFactory implements INormalizedKeyComputerFactory {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public INormalizedKeyComputer createNormalizedKeyComputer() {
+ return new INormalizedKeyComputer() {
+ /**
+ * read one int from Kmer, make sure this int is consistent whith Kmer compartor
+ */
+ @Override
+ public int normalize(byte[] bytes, int start, int length) {
+ return KmerPointable.getIntReverse(bytes, start, length);
+ }
+ };
+ }
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/ReadIDPartitionComputerFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/ReadIDPartitionComputerFactory.java
new file mode 100644
index 0000000..6773a73
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/accessors/ReadIDPartitionComputerFactory.java
@@ -0,0 +1,53 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.data.accessors;
+
+import java.nio.ByteBuffer;
+
+import edu.uci.ics.genomix.data.Marshal;
+import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
+import edu.uci.ics.hyracks.api.dataflow.value.ITuplePartitionComputer;
+import edu.uci.ics.hyracks.api.dataflow.value.ITuplePartitionComputerFactory;
+
+public class ReadIDPartitionComputerFactory implements ITuplePartitionComputerFactory {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public ITuplePartitionComputer createPartitioner() {
+ return new ITuplePartitionComputer() {
+ @Override
+ public int partition(IFrameTupleAccessor accessor, int tIndex, int nParts) {
+ int startOffset = accessor.getTupleStartOffset(tIndex);
+ int fieldOffset = accessor.getFieldStartOffset(tIndex, 0);
+ int slotLength = accessor.getFieldSlotsLength();
+
+ ByteBuffer buf = accessor.getBuffer();
+
+ int hash = Marshal.getInt(buf.array(), startOffset + fieldOffset + slotLength);
+ if (hash < 0) {
+ hash = -(hash + 1);
+ }
+
+ return hash % nParts;
+ }
+ };
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/primitive/KmerPointable.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/primitive/KmerPointable.java
new file mode 100644
index 0000000..0457de9
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/data/primitive/KmerPointable.java
@@ -0,0 +1,145 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.data.primitive;
+
+import edu.uci.ics.genomix.hyracks.data.accessors.KmerHashPartitioncomputerFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
+import edu.uci.ics.hyracks.data.std.api.AbstractPointable;
+import edu.uci.ics.hyracks.data.std.api.IComparable;
+import edu.uci.ics.hyracks.data.std.api.IHashable;
+import edu.uci.ics.hyracks.data.std.api.INumeric;
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+import edu.uci.ics.hyracks.data.std.api.IPointableFactory;
+
+public final class KmerPointable extends AbstractPointable implements IHashable, IComparable, INumeric {
+ public static final ITypeTraits TYPE_TRAITS = new ITypeTraits() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public boolean isFixedLength() {
+ return false;
+ }
+
+ @Override
+ public int getFixedLength() {
+ return -1;
+ }
+ };
+
+ public static final IPointableFactory FACTORY = new IPointableFactory() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public IPointable createPointable() {
+ return new KmerPointable();
+ }
+
+ @Override
+ public ITypeTraits getTypeTraits() {
+ return TYPE_TRAITS;
+ }
+ };
+
+ public static short getShortReverse(byte[] bytes, int offset, int length) {
+ if (length < 2) {
+ return (short) (bytes[offset] & 0xff);
+ }
+ return (short) (((bytes[offset + length - 1] & 0xff) << 8) + (bytes[offset + length - 2] & 0xff));
+ }
+
+ public static int getIntReverse(byte[] bytes, int offset, int length) {
+ int shortValue = getShortReverse(bytes, offset, length) & 0xffff;
+
+ if (length < 3) {
+ return shortValue;
+ }
+ if (length == 3) {
+ return (((bytes[offset + 2] & 0xff) << 16) + ((bytes[offset + 1] & 0xff) << 8) + ((bytes[offset] & 0xff)));
+ }
+ return ((bytes[offset + length - 1] & 0xff) << 24) + ((bytes[offset + length - 2] & 0xff) << 16)
+ + ((bytes[offset + length - 3] & 0xff) << 8) + ((bytes[offset + length - 4] & 0xff) << 0);
+ }
+
+ public static long getLongReverse(byte[] bytes, int offset, int length) {
+ if (length < 8) {
+ return ((long) getIntReverse(bytes, offset, length)) & 0x0ffffffffL;
+ }
+ return (((long) (bytes[offset + length - 1] & 0xff)) << 56)
+ + (((long) (bytes[offset + length - 2] & 0xff)) << 48)
+ + (((long) (bytes[offset + length - 3] & 0xff)) << 40)
+ + (((long) (bytes[offset + length - 4] & 0xff)) << 32)
+ + (((long) (bytes[offset + length - 5] & 0xff)) << 24)
+ + (((long) (bytes[offset + length - 6] & 0xff)) << 16)
+ + (((long) (bytes[offset + length - 7] & 0xff)) << 8) + (((long) (bytes[offset + length - 8] & 0xff)));
+ }
+
+ @Override
+ public int compareTo(IPointable pointer) {
+ return compareTo(pointer.getByteArray(), pointer.getStartOffset(), pointer.getLength());
+ }
+
+ @Override
+ public int compareTo(byte[] bytes, int offset, int length) {
+
+ if (this.length != length) {
+ return this.length - length;
+ }
+ for (int i = length - 1; i >= 0; i--) {
+ int cmp = (this.bytes[this.start + i] & 0xff) - (bytes[offset + i] & 0xff);
+ if (cmp != 0) {
+ return cmp;
+ }
+ }
+
+ return 0;
+ }
+
+ @Override
+ public int hash() {
+ int hash = KmerHashPartitioncomputerFactory.hashBytes(bytes, start, length);
+ return hash;
+ }
+
+ @Override
+ public byte byteValue() {
+ return bytes[start + length - 1];
+ }
+
+ @Override
+ public short shortValue() {
+ return getShortReverse(bytes, start, length);
+ }
+
+ @Override
+ public int intValue() {
+ return getIntReverse(bytes, start, length);
+ }
+
+ @Override
+ public long longValue() {
+ return getLongReverse(bytes, start, length);
+ }
+
+ @Override
+ public float floatValue() {
+ return Float.intBitsToFloat(intValue());
+ }
+
+ @Override
+ public double doubleValue() {
+ return Double.longBitsToDouble(longValue());
+ }
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/AssembleKeyIntoNodeOperator.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/AssembleKeyIntoNodeOperator.java
new file mode 100644
index 0000000..bea09be
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/AssembleKeyIntoNodeOperator.java
@@ -0,0 +1,161 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.dataflow;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.dataflow.IOperatorNodePushable;
+import edu.uci.ics.hyracks.api.dataflow.value.IRecordDescriptorProvider;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.api.job.IOperatorDescriptorRegistry;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAppender;
+import edu.uci.ics.hyracks.dataflow.common.comm.util.FrameUtils;
+import edu.uci.ics.hyracks.dataflow.std.base.AbstractSingleActivityOperatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.base.AbstractUnaryInputUnaryOutputOperatorNodePushable;
+
+public class AssembleKeyIntoNodeOperator extends AbstractSingleActivityOperatorDescriptor {
+
+ public AssembleKeyIntoNodeOperator(IOperatorDescriptorRegistry spec, RecordDescriptor outRecDesc, int kmerSize) {
+ super(spec, 1, 1);
+ recordDescriptors[0] = outRecDesc;
+ this.kmerSize = kmerSize;
+ KmerBytesWritable.setGlobalKmerLength(this.kmerSize);
+ }
+
+ private static final long serialVersionUID = 1L;
+ private final int kmerSize;
+
+ public static final int InputKmerField = 0;
+ public static final int InputtempNodeField = 1;
+ public static final int OutputNodeField = 0;
+
+ public static final RecordDescriptor nodeOutputRec = new RecordDescriptor(new ISerializerDeserializer[1]);
+
+ public class MapReadToNodePushable extends AbstractUnaryInputUnaryOutputOperatorNodePushable {
+ public static final int INT_LENGTH = 4;
+ private final IHyracksTaskContext ctx;
+ private final RecordDescriptor inputRecDesc;
+ private final RecordDescriptor outputRecDesc;
+
+ private FrameTupleAccessor accessor;
+ private ByteBuffer writeBuffer;
+ private ArrayTupleBuilder builder;
+ private FrameTupleAppender appender;
+
+ NodeWritable readNode;
+ KmerBytesWritable readKmer;
+
+ public MapReadToNodePushable(IHyracksTaskContext ctx, RecordDescriptor inputRecDesc,
+ RecordDescriptor outputRecDesc) {
+ this.ctx = ctx;
+ this.inputRecDesc = inputRecDesc;
+ this.outputRecDesc = outputRecDesc;
+
+ readNode = new NodeWritable();
+ readKmer = new KmerBytesWritable();
+ }
+
+ @Override
+ public void open() throws HyracksDataException {
+ accessor = new FrameTupleAccessor(ctx.getFrameSize(), inputRecDesc);
+ writeBuffer = ctx.allocateFrame();
+ builder = new ArrayTupleBuilder(outputRecDesc.getFieldCount());
+ appender = new FrameTupleAppender(ctx.getFrameSize());
+ appender.reset(writeBuffer, true);
+ writer.open();
+ }
+
+ @Override
+ public void nextFrame(ByteBuffer buffer) throws HyracksDataException {
+ accessor.reset(buffer);
+ int tupleCount = accessor.getTupleCount();
+ for (int i = 0; i < tupleCount; i++) {
+ generateNodeFromKmer(i);
+ }
+ }
+
+ private void generateNodeFromKmer(int tIndex) throws HyracksDataException {
+ int offsetPoslist = accessor.getTupleStartOffset(tIndex) + accessor.getFieldSlotsLength();
+ setKmer(readKmer, offsetPoslist + accessor.getFieldStartOffset(tIndex, InputKmerField));
+ readNode.reset();
+ setNode(readNode, offsetPoslist + accessor.getFieldStartOffset(tIndex, InputtempNodeField));
+ readNode.getInternalKmer().setAsCopy(readKmer);
+ outputNode(readNode);
+ }
+
+
+ private void setKmer(KmerBytesWritable kmer, int offset) {
+ ByteBuffer buffer = accessor.getBuffer();
+ kmer.setAsCopy(buffer.array(), offset);
+ }
+
+ private void setNode(NodeWritable node, int offset) {
+ ByteBuffer buffer = accessor.getBuffer();
+ node.setAsCopy(buffer.array(), offset);
+ }
+
+
+ private void outputNode(NodeWritable node) throws HyracksDataException {
+
+ try {
+ builder.reset();
+ builder.addField(node.marshalToByteArray(), 0, node.getSerializedLength());
+
+ if (!appender.append(builder.getFieldEndOffsets(), builder.getByteArray(), 0, builder.getSize())) {
+ FrameUtils.flushFrame(writeBuffer, writer);
+ appender.reset(writeBuffer, true);
+ if (!appender.append(builder.getFieldEndOffsets(), builder.getByteArray(), 0, builder.getSize())) {
+ throw new IllegalStateException("Failed to append tuplebuilder to frame");
+ }
+ }
+ } catch (IOException e) {
+ throw new IllegalStateException("Failed to Add a field to the tupleBuilder.");
+ }
+ }
+
+ @Override
+ public void fail() throws HyracksDataException {
+ writer.fail();
+ }
+
+ @Override
+ public void close() throws HyracksDataException {
+ if (appender.getTupleCount() > 0) {
+ FrameUtils.flushFrame(writeBuffer, writer);
+ }
+ writer.close();
+ }
+
+ }
+
+ @Override
+ public IOperatorNodePushable createPushRuntime(IHyracksTaskContext ctx,
+ IRecordDescriptorProvider recordDescProvider, int partition, int nPartitions) throws HyracksDataException {
+ return new MapReadToNodePushable(ctx, recordDescProvider.getInputRecordDescriptor(getActivityId(), 0),
+ recordDescriptors[0]);
+ }
+
+}
+
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ConnectorPolicyAssignmentPolicy.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ConnectorPolicyAssignmentPolicy.java
new file mode 100644
index 0000000..fd05fad
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ConnectorPolicyAssignmentPolicy.java
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.dataflow;
+
+import edu.uci.ics.hyracks.api.dataflow.IConnectorDescriptor;
+import edu.uci.ics.hyracks.api.dataflow.connectors.IConnectorPolicy;
+import edu.uci.ics.hyracks.api.dataflow.connectors.IConnectorPolicyAssignmentPolicy;
+import edu.uci.ics.hyracks.api.dataflow.connectors.PipeliningConnectorPolicy;
+import edu.uci.ics.hyracks.api.dataflow.connectors.SendSideMaterializedPipeliningConnectorPolicy;
+import edu.uci.ics.hyracks.dataflow.std.connectors.MToNPartitioningMergingConnectorDescriptor;
+
+/**
+ * used by precluster groupby
+ */
+public class ConnectorPolicyAssignmentPolicy implements IConnectorPolicyAssignmentPolicy {
+ private static final long serialVersionUID = 1L;
+ private IConnectorPolicy senderSideMaterializePolicy = new SendSideMaterializedPipeliningConnectorPolicy();
+ private IConnectorPolicy pipeliningPolicy = new PipeliningConnectorPolicy();
+
+ @Override
+ public IConnectorPolicy getConnectorPolicyAssignment(IConnectorDescriptor c, int nProducers, int nConsumers,
+ int[] fanouts) {
+ if (c instanceof MToNPartitioningMergingConnectorDescriptor) {
+ return senderSideMaterializePolicy;
+ } else {
+ return pipeliningPolicy;
+ }
+ }
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ReadsKeyValueParserFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ReadsKeyValueParserFactory.java
new file mode 100644
index 0000000..e84b1bd
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/ReadsKeyValueParserFactory.java
@@ -0,0 +1,238 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.dataflow;
+
+import java.nio.ByteBuffer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.io.LongWritable;
+import org.apache.hadoop.io.Text;
+
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.PositionListWritable;
+import edu.uci.ics.genomix.type.PositionWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.hyracks.api.comm.IFrameWriter;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.FrameTupleAppender;
+import edu.uci.ics.hyracks.dataflow.common.comm.util.FrameUtils;
+import edu.uci.ics.hyracks.hdfs.api.IKeyValueParser;
+import edu.uci.ics.hyracks.hdfs.api.IKeyValueParserFactory;
+import edu.uci.ics.hyracks.hdfs.dataflow.ConfFactory;
+
+public class ReadsKeyValueParserFactory implements IKeyValueParserFactory<LongWritable, Text> {
+ private static final long serialVersionUID = 1L;
+ private static final Log LOG = LogFactory.getLog(ReadsKeyValueParserFactory.class);
+
+ public static final int OutputKmerField = 0;
+ public static final int OutputNodeField = 1;
+
+ private final int kmerSize;
+ protected ConfFactory confFac;
+
+ public static final RecordDescriptor readKmerOutputRec = new RecordDescriptor(new ISerializerDeserializer[] { null,
+ null });
+
+ public ReadsKeyValueParserFactory(int k) {
+ this.kmerSize = k;
+ }
+
+ public enum KmerDir {
+ FORWARD,
+ REVERSE,
+ }
+
+ @Override
+ public IKeyValueParser<LongWritable, Text> createKeyValueParser(final IHyracksTaskContext ctx) throws HyracksDataException {
+ final ArrayTupleBuilder tupleBuilder = new ArrayTupleBuilder(2);
+ final ByteBuffer outputBuffer = ctx.allocateFrame();
+ final FrameTupleAppender outputAppender = new FrameTupleAppender(ctx.getFrameSize());
+ outputAppender.reset(outputBuffer, true);
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+
+ return new IKeyValueParser<LongWritable, Text>() {
+
+ private PositionWritable readId = new PositionWritable();
+ private PositionListWritable readIdList = new PositionListWritable();
+ private NodeWritable curNode = new NodeWritable();
+ private NodeWritable nextNode = new NodeWritable();
+
+ private KmerBytesWritable curForwardKmer = new KmerBytesWritable();
+ private KmerBytesWritable curReverseKmer = new KmerBytesWritable();
+ private KmerBytesWritable nextForwardKmer = new KmerBytesWritable();
+ private KmerBytesWritable nextReverseKmer = new KmerBytesWritable();
+ private EdgeWritable tempEdge = new EdgeWritable();
+ private KmerDir curKmerDir = KmerDir.FORWARD;
+ private KmerDir nextKmerDir = KmerDir.FORWARD;
+
+ byte mateId = (byte) 0;
+
+ @Override
+ public void parse(LongWritable key, Text value, IFrameWriter writer) throws HyracksDataException {
+ String[] geneLine = value.toString().split("\\t"); // Read the Real Gene Line
+ if (geneLine.length != 2) {
+ return;
+ }
+ int readID = 0;
+ try {
+ readID = Integer.parseInt(geneLine[0]);
+ } catch (NumberFormatException e) {
+ LOG.warn("Invalid data ");
+ return;
+ }
+
+ Pattern genePattern = Pattern.compile("[AGCT]+");
+ Matcher geneMatcher = genePattern.matcher(geneLine[1]);
+ boolean isValid = geneMatcher.matches();
+ if (isValid) {
+ SplitReads(readID, geneLine[1].getBytes(), writer);
+ }
+ }
+
+ private void SplitReads(int readID, byte[] array, IFrameWriter writer) {
+ /*first kmer*/
+ if (kmerSize >= array.length) {
+ return;
+ }
+ curNode.reset();
+ nextNode.reset();
+ tempEdge.reset();
+ curNode.setAvgCoverage(1);
+ nextNode.setAvgCoverage(1);
+ curForwardKmer.setByRead(array, 0);
+ curReverseKmer.setByReadReverse(array, 0);
+ curKmerDir = curForwardKmer.compareTo(curReverseKmer) <= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
+ nextForwardKmer.setAsCopy(curForwardKmer);
+ nextKmerDir = setNextKmer(nextForwardKmer, nextReverseKmer, array[kmerSize]);
+ setThisReadId(readIdList, readId, mateId, readID, 0);
+ if(curKmerDir == KmerDir.FORWARD)
+ curNode.getStartReads().append(readId);
+ else
+ curNode.getEndReads().append(readId);
+ setEdgeAndThreadListForCurAndNextKmer(curKmerDir, curNode, nextKmerDir, nextNode, readIdList, tempEdge);
+ writeToFrame(curForwardKmer, curReverseKmer, curKmerDir, curNode, writer);
+ /*middle kmer*/
+ int i = kmerSize + 1;
+ for (; i < array.length; i++) {
+ curForwardKmer.setAsCopy(nextForwardKmer);
+ curReverseKmer.setAsCopy(nextReverseKmer);
+ curKmerDir = nextKmerDir;
+ curNode.setAsCopy(nextNode);
+ nextNode.reset();
+ nextNode.setAvgCoverage(1);
+ nextKmerDir = setNextKmer(nextForwardKmer, nextReverseKmer, array[i]);
+ setEdgeAndThreadListForCurAndNextKmer(curKmerDir, curNode, nextKmerDir, nextNode, readIdList, tempEdge);
+ writeToFrame(curForwardKmer, curReverseKmer, curKmerDir, curNode, writer);
+ }
+
+ /*last kmer*/
+ writeToFrame(nextForwardKmer, nextReverseKmer, nextKmerDir, nextNode, writer);
+ }
+
+ public void setThisReadId(PositionListWritable readIdList, PositionWritable readId, byte mateId, long readID, int posId) {
+ readId.set(mateId, readID, posId);
+ readIdList.reset();
+ readIdList.append(readId);
+ }
+
+ public KmerDir setNextKmer(KmerBytesWritable forwardKmer, KmerBytesWritable ReverseKmer,
+ byte nextChar) {
+ forwardKmer.shiftKmerWithNextChar(nextChar);
+ ReverseKmer.setByReadReverse(forwardKmer.toString().getBytes(), forwardKmer.getOffset());
+ return forwardKmer.compareTo(ReverseKmer) <= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
+ }
+
+ public void writeToFrame(KmerBytesWritable forwardKmer, KmerBytesWritable reverseKmer, KmerDir curKmerDir,
+ NodeWritable node, IFrameWriter writer) {
+ switch (curKmerDir) {
+ case FORWARD:
+ InsertToFrame(forwardKmer, node, writer);
+ break;
+ case REVERSE:
+ InsertToFrame(reverseKmer, node, writer);
+ break;
+ }
+ }
+
+ public void setEdgeAndThreadListForCurAndNextKmer(KmerDir curKmerDir, NodeWritable curNode, KmerDir nextKmerDir,
+ NodeWritable nextNode, PositionListWritable readIdList, EdgeWritable tempEdge) {
+ if (curKmerDir == KmerDir.FORWARD && nextKmerDir == KmerDir.FORWARD) {
+ tempEdge.setAsCopy(nextForwardKmer, readIdList);
+ curNode.getEdgeList(DirectionFlag.DIR_FF).add(tempEdge);
+ tempEdge.setAsCopy(curForwardKmer, readIdList);
+ nextNode.getEdgeList(DirectionFlag.DIR_RR).add(tempEdge);
+ }
+ if (curKmerDir == KmerDir.FORWARD && nextKmerDir == KmerDir.REVERSE) {
+ tempEdge.setAsCopy(nextReverseKmer, readIdList);
+ curNode.getEdgeList(DirectionFlag.DIR_FR).add(tempEdge);
+ tempEdge.setAsCopy(curForwardKmer, readIdList);
+ nextNode.getEdgeList(DirectionFlag.DIR_FR).add(tempEdge);
+ }
+ if (curKmerDir == KmerDir.REVERSE && nextKmerDir == KmerDir.FORWARD) {
+ tempEdge.setAsCopy(nextForwardKmer, readIdList);
+ curNode.getEdgeList(DirectionFlag.DIR_RF).add(tempEdge);
+ tempEdge.setAsCopy(curReverseKmer, readIdList);
+ nextNode.getEdgeList(DirectionFlag.DIR_RF).add(tempEdge);
+ }
+ if (curKmerDir == KmerDir.REVERSE && nextKmerDir == KmerDir.REVERSE) {
+ tempEdge.setAsCopy(nextReverseKmer, readIdList);
+ curNode.getEdgeList(DirectionFlag.DIR_RR).add(tempEdge);
+ tempEdge.setAsCopy(curReverseKmer, readIdList);
+ nextNode.getEdgeList(DirectionFlag.DIR_RR).add(tempEdge);
+ }
+ }
+
+ private void InsertToFrame(KmerBytesWritable kmer, NodeWritable node, IFrameWriter writer) {
+ try {
+ tupleBuilder.reset();
+ tupleBuilder.addField(kmer.getBytes(), kmer.getOffset(), kmer.getLength());
+ tupleBuilder.addField(node.marshalToByteArray(), 0, node.getSerializedLength());
+
+ if (!outputAppender.append(tupleBuilder.getFieldEndOffsets(), tupleBuilder.getByteArray(), 0,
+ tupleBuilder.getSize())) {
+ FrameUtils.flushFrame(outputBuffer, writer);
+ outputAppender.reset(outputBuffer, true);
+ if (!outputAppender.append(tupleBuilder.getFieldEndOffsets(), tupleBuilder.getByteArray(), 0,
+ tupleBuilder.getSize())) {
+ throw new IllegalStateException(
+ "Failed to copy an record into a frame: the record kmerByteSize is too large.");
+ }
+ }
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ @Override
+ public void open(IFrameWriter writer) throws HyracksDataException {
+ }
+
+ @Override
+ public void close(IFrameWriter writer) throws HyracksDataException {
+ FrameUtils.flushFrame(outputBuffer, writer);
+ }
+ };
+ }
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/AggregateKmerAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/AggregateKmerAggregateFactory.java
new file mode 100644
index 0000000..ec903be
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/AggregateKmerAggregateFactory.java
@@ -0,0 +1,126 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.dataflow.aggregators;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
+import edu.uci.ics.hyracks.dataflow.std.group.AggregateState;
+import edu.uci.ics.hyracks.dataflow.std.group.IAggregatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
+
+public class AggregateKmerAggregateFactory implements IAggregatorDescriptorFactory {
+
+ /**
+ * local Aggregate
+ */
+ private static final long serialVersionUID = 1L;
+ private final int kmerSize;
+
+ public AggregateKmerAggregateFactory(int k) {
+ this.kmerSize = k;
+ }
+
+ @Override
+ public IAggregatorDescriptor createAggregator(IHyracksTaskContext ctx, RecordDescriptor inRecordDescriptor,
+ RecordDescriptor outRecordDescriptor, int[] keyFields, int[] keyFieldsInPartialResults)
+ throws HyracksDataException {
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+ return new IAggregatorDescriptor() {
+
+ private NodeWritable readNode = new NodeWritable();
+
+ protected int getOffSet(IFrameTupleAccessor accessor, int tIndex, int fieldId) {
+ int tupleOffset = accessor.getTupleStartOffset(tIndex);
+ int fieldStart = accessor.getFieldStartOffset(tIndex, fieldId);
+ int offset = tupleOffset + fieldStart + accessor.getFieldSlotsLength();
+ return offset;
+ }
+
+ @Override
+ public void reset() {
+ }
+
+ @Override
+ public void close() {
+
+ }
+
+ @Override
+ public AggregateState createAggregateStates() {
+ return new AggregateState(new NodeWritable());
+ }
+
+ @Override
+ public void init(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) throws HyracksDataException {
+ NodeWritable localUniNode = (NodeWritable) state.state;
+ localUniNode.reset();
+ readNode.setAsReference(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 1));
+ for (byte d: DirectionFlag.values) {
+ localUniNode.getEdgeList(d).unionUpdate(readNode.getEdgeList(d));
+ }
+ localUniNode.getStartReads().appendList(readNode.getStartReads());
+ localUniNode.getEndReads().appendList(readNode.getEndReads());
+ localUniNode.addCoverage(readNode);
+ // make an empty field
+// tupleBuilder.addFieldEndOffset();// mark question?
+ }
+
+ @Override
+ public void aggregate(IFrameTupleAccessor accessor, int tIndex, IFrameTupleAccessor stateAccessor,
+ int stateTupleIndex, AggregateState state) throws HyracksDataException {
+ NodeWritable localUniNode = (NodeWritable) state.state;
+ readNode.setAsReference(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 1));
+ for (byte d: DirectionFlag.values) {
+ localUniNode.getEdgeList(d).unionUpdate(readNode.getEdgeList(d));
+ }
+ localUniNode.getStartReads().appendList(readNode.getStartReads());
+ localUniNode.getEndReads().appendList(readNode.getEndReads());
+ localUniNode.addCoverage(readNode);
+ }
+
+ @Override
+ public void outputPartialResult(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) throws HyracksDataException {
+ throw new IllegalStateException("partial result method should not be called");
+ }
+
+ @Override
+ public void outputFinalResult(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) throws HyracksDataException {
+ DataOutput fieldOutput = tupleBuilder.getDataOutput();
+ NodeWritable localUniNode = (NodeWritable) state.state;
+ try {
+ fieldOutput.write(localUniNode.marshalToByteArray(), 0, localUniNode.getSerializedLength());
+ tupleBuilder.addFieldEndOffset();
+ } catch (IOException e) {
+ throw new HyracksDataException("I/O exception when writing aggregation to the output buffer.");
+ }
+ }
+
+ };
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/MergeKmerAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/MergeKmerAggregateFactory.java
new file mode 100644
index 0000000..50243f9
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/dataflow/aggregators/MergeKmerAggregateFactory.java
@@ -0,0 +1,132 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.dataflow.aggregators;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
+import edu.uci.ics.hyracks.dataflow.std.group.AggregateState;
+import edu.uci.ics.hyracks.dataflow.std.group.IAggregatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
+
+public class MergeKmerAggregateFactory implements IAggregatorDescriptorFactory {
+ private static final long serialVersionUID = 1L;
+ private static final Log LOG = LogFactory.getLog(MergeKmerAggregateFactory.class);
+
+ private final int kmerSize;
+
+ public MergeKmerAggregateFactory(int k) {
+ this.kmerSize = k;
+ }
+
+ @Override
+ public IAggregatorDescriptor createAggregator(IHyracksTaskContext ctx, RecordDescriptor inRecordDescriptor,
+ RecordDescriptor outRecordDescriptor, int[] keyFields, int[] keyFieldsInPartialResults)
+ throws HyracksDataException {
+ final int frameSize = ctx.getFrameSize();
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+ return new IAggregatorDescriptor() {
+
+ private NodeWritable readNode = new NodeWritable();
+
+ protected int getOffSet(IFrameTupleAccessor accessor, int tIndex, int fieldId) {
+ int tupleOffset = accessor.getTupleStartOffset(tIndex);
+ int fieldStart = accessor.getFieldStartOffset(tIndex, fieldId);
+ int offset = tupleOffset + fieldStart + accessor.getFieldSlotsLength();
+ return offset;
+ }
+
+ @Override
+ public AggregateState createAggregateStates() {
+ return new AggregateState(new NodeWritable());
+ }
+
+ @Override
+ public void init(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) throws HyracksDataException {
+ NodeWritable localUniNode = (NodeWritable) state.state;
+ localUniNode.reset();
+ readNode.setAsReference(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 1));
+ for (byte d: DirectionFlag.values) {
+ localUniNode.getEdgeList(d).unionUpdate(readNode.getEdgeList(d));
+ }
+ localUniNode.getStartReads().unionUpdate(readNode.getStartReads());
+ localUniNode.getEndReads().unionUpdate(readNode.getEndReads());
+ localUniNode.addCoverage(readNode);
+
+ }
+
+ @Override
+ public void reset() {
+
+ }
+
+ @Override
+ public void aggregate(IFrameTupleAccessor accessor, int tIndex, IFrameTupleAccessor stateAccessor,
+ int stateTupleIndex, AggregateState state) throws HyracksDataException {
+ NodeWritable localUniNode = (NodeWritable) state.state;
+ readNode.setAsReference(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 1));
+ for (byte d: DirectionFlag.values) {
+ localUniNode.getEdgeList(d).unionUpdate(readNode.getEdgeList(d));
+ }
+ localUniNode.getStartReads().unionUpdate(readNode.getStartReads());
+ localUniNode.getEndReads().unionUpdate(readNode.getEndReads());
+ localUniNode.addCoverage(readNode);
+ }
+
+ @Override
+ public void outputPartialResult(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) throws HyracksDataException {
+ throw new IllegalStateException("partial result method should not be called");
+ }
+
+ @Override
+ public void outputFinalResult(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) throws HyracksDataException {
+ DataOutput fieldOutput = tupleBuilder.getDataOutput();
+ NodeWritable localUniNode = (NodeWritable) state.state;
+ try {
+ if (localUniNode.getSerializedLength() > frameSize / 2) {
+ LOG.warn("MergeKmer: output data kmerByteSize is too big: " + localUniNode.getSerializedLength());
+ }
+ fieldOutput.write(localUniNode.marshalToByteArray(), 0, localUniNode.getSerializedLength());
+ tupleBuilder.addFieldEndOffset();
+
+ } catch (IOException e) {
+ throw new HyracksDataException("I/O exception when writing aggregation to the output buffer.");
+ }
+ }
+
+ @Override
+ public void close() {
+
+ }
+
+ };
+
+ }
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/driver/Driver.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/driver/Driver.java
new file mode 100644
index 0000000..59c12e2
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/driver/Driver.java
@@ -0,0 +1,157 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.driver;
+
+import java.net.URL;
+import java.util.EnumSet;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.util.GenericOptionsParser;
+
+import edu.uci.ics.genomix.hyracks.graph.job.GenomixJobConf;
+import edu.uci.ics.genomix.hyracks.graph.job.JobGen;
+import edu.uci.ics.genomix.hyracks.graph.job.JobGenBrujinGraph;
+import edu.uci.ics.genomix.hyracks.graph.job.JobGenCheckReader;
+import edu.uci.ics.genomix.hyracks.graph.job.JobGenUnMergedGraph;
+
+import edu.uci.ics.hyracks.api.client.HyracksConnection;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
+import edu.uci.ics.hyracks.api.client.NodeControllerInfo;
+import edu.uci.ics.hyracks.api.exceptions.HyracksException;
+import edu.uci.ics.hyracks.api.job.JobFlag;
+import edu.uci.ics.hyracks.api.job.JobId;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.hdfs.scheduler.Scheduler;
+
+public class Driver {
+ public static enum Plan {
+ BUILD_DEBRUJIN_GRAPH,
+ CHECK_KMERREADER,
+ BUILD_UNMERGED_GRAPH,
+ }
+
+ private static final String IS_PROFILING = "genomix.driver.profiling";
+ private static final String CPARTITION_PER_MACHINE = "genomix.driver.duplicate.num";
+ private static final Log LOG = LogFactory.getLog(Driver.class);
+ private JobGen jobGen;
+ private boolean profiling;
+
+ private int numPartitionPerMachine;
+
+ private IHyracksClientConnection hcc;
+ private Scheduler scheduler;
+
+ public Driver(String ipAddress, int port, int numPartitionPerMachine) throws HyracksException {
+ try {
+ hcc = new HyracksConnection(ipAddress, port);
+ scheduler = new Scheduler(hcc.getNodeControllerInfos());
+ } catch (Exception e) {
+ throw new HyracksException(e);
+ }
+ this.numPartitionPerMachine = numPartitionPerMachine;
+ }
+
+ public void runJob(GenomixJobConf job) throws HyracksException {
+ runJob(job, Plan.BUILD_DEBRUJIN_GRAPH, false);
+ }
+
+ public void runJob(GenomixJobConf job, Plan planChoice, boolean profiling) throws HyracksException {
+ /** add hadoop configurations */
+ URL hadoopCore = job.getClass().getClassLoader().getResource("core-site.xml");
+ job.addResource(hadoopCore);
+ URL hadoopMapRed = job.getClass().getClassLoader().getResource("mapred-site.xml");
+ job.addResource(hadoopMapRed);
+ URL hadoopHdfs = job.getClass().getClassLoader().getResource("hdfs-site.xml");
+ job.addResource(hadoopHdfs);
+
+ LOG.info("job started");
+ long start = System.currentTimeMillis();
+ long end = start;
+ long time = 0;
+
+ this.profiling = profiling;
+ try {
+ Map<String, NodeControllerInfo> ncMap = hcc.getNodeControllerInfos();
+ LOG.info("ncmap:" + ncMap.size() + " " + ncMap.keySet().toString());
+ switch (planChoice) {
+ case BUILD_DEBRUJIN_GRAPH:
+ default:
+ jobGen = new JobGenBrujinGraph(job, scheduler, ncMap, numPartitionPerMachine);
+ break;
+ case CHECK_KMERREADER:
+ jobGen = new JobGenCheckReader(job, scheduler, ncMap, numPartitionPerMachine);
+ break;
+ case BUILD_UNMERGED_GRAPH:
+ jobGen = new JobGenUnMergedGraph(job, scheduler, ncMap, numPartitionPerMachine);
+ }
+
+ start = System.currentTimeMillis();
+ run(jobGen);
+ end = System.currentTimeMillis();
+ time = end - start;
+ LOG.info("result writing finished " + time + "ms");
+ LOG.info("job finished");
+ } catch (Exception e) {
+ throw new HyracksException(e);
+ }
+ }
+
+ private void run(JobGen jobGen) throws Exception {
+ try {
+ JobSpecification createJob = jobGen.generateJob();
+ execute(createJob);
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ private void execute(JobSpecification job) throws Exception {
+ job.setUseConnectorPolicyForScheduling(false);
+ JobId jobId = hcc.startJob(job, profiling ? EnumSet.of(JobFlag.PROFILE_RUNTIME) : EnumSet.noneOf(JobFlag.class));
+ hcc.waitForCompletion(jobId);
+ }
+
+ public static void main(String[] args) throws Exception {
+ GenomixJobConf jobConf = new GenomixJobConf();
+ String[] otherArgs = new GenericOptionsParser(jobConf, args).getRemainingArgs();
+ if (otherArgs.length < 4) {
+ System.err.println("Need <serverIP> <port> <input> <output>");
+ System.exit(-1);
+ }
+ String ipAddress = otherArgs[0];
+ int port = Integer.parseInt(otherArgs[1]);
+ int numOfDuplicate = jobConf.getInt(CPARTITION_PER_MACHINE, 2);
+ boolean bProfiling = jobConf.getBoolean(IS_PROFILING, true);
+ // FileInputFormat.setInputPaths(job, otherArgs[2]);
+ {
+ @SuppressWarnings("deprecation")
+ Path path = new Path(jobConf.getWorkingDirectory(), otherArgs[2]);
+ jobConf.set("mapred.input.dir", path.toString());
+
+ @SuppressWarnings("deprecation")
+ Path outputDir = new Path(jobConf.getWorkingDirectory(), otherArgs[3]);
+ jobConf.set("mapred.output.dir", outputDir.toString());
+ }
+ // FileInputFormat.addInputPath(jobConf, new Path(otherArgs[2]));
+ // FileOutputFormat.setOutputPath(job, new Path(otherArgs[3]));
+ Driver driver = new Driver(ipAddress, port, numOfDuplicate);
+ driver.runJob(jobConf, Plan.BUILD_DEBRUJIN_GRAPH, bProfiling);
+ }
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/KeyValueSequenceWriterFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/KeyValueSequenceWriterFactory.java
new file mode 100644
index 0000000..386e140
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/KeyValueSequenceWriterFactory.java
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.graph.io;
+
+import java.io.DataOutput;
+import java.io.IOException;
+import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.io.SequenceFile;
+import org.apache.hadoop.io.SequenceFile.CompressionType;
+import org.apache.hadoop.io.SequenceFile.Writer;
+import org.apache.hadoop.mapred.JobConf;
+
+import edu.uci.ics.genomix.hyracks.graph.dataflow.ReadsKeyValueParserFactory;
+import edu.uci.ics.genomix.hyracks.graph.job.GenomixJobConf;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriter;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriterFactory;
+import edu.uci.ics.hyracks.hdfs.dataflow.ConfFactory;
+
+@SuppressWarnings("deprecation")
+public class KeyValueSequenceWriterFactory implements ITupleWriterFactory {
+
+ /**
+ * Write the node to Text
+ */
+ private static final long serialVersionUID = 1L;
+ private final int kmerSize;
+ private ConfFactory confFactory;
+
+ public KeyValueSequenceWriterFactory(JobConf conf) throws HyracksDataException {
+ this.confFactory = new ConfFactory(conf);
+ this.kmerSize = conf.getInt(GenomixJobConf.KMER_LENGTH, GenomixJobConf.DEFAULT_KMERLEN);
+ }
+
+ public class TupleWriter implements ITupleWriter {
+
+ public TupleWriter(ConfFactory confFactory) {
+ this.cf = confFactory;
+ }
+
+ ConfFactory cf;
+ Writer writer = null;
+ private NodeWritable outputNode = new NodeWritable();
+ private KmerBytesWritable tempKmer = new KmerBytesWritable();
+ private VKmerBytesWritable outputKey = new VKmerBytesWritable();
+
+ @Override
+ public void open(DataOutput output) throws HyracksDataException {
+ try {
+ writer = SequenceFile.createWriter(cf.getConf(), (FSDataOutputStream) output, VKmerBytesWritable.class,
+ NodeWritable.class, CompressionType.NONE, null);
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ @Override
+ public void write(DataOutput output, ITupleReference tuple) throws HyracksDataException {
+ try {
+ if (tempKmer.getLength() > tuple.getFieldLength(ReadsKeyValueParserFactory.OutputKmerField)) {
+ throw new IllegalArgumentException("Not enough kmer bytes");
+ }
+ tempKmer.setAsReference(tuple.getFieldData(ReadsKeyValueParserFactory.OutputKmerField),
+ tuple.getFieldStart(ReadsKeyValueParserFactory.OutputKmerField));
+ outputNode.setAsReference(tuple.getFieldData(ReadsKeyValueParserFactory.OutputNodeField),
+ tuple.getFieldStart(ReadsKeyValueParserFactory.OutputNodeField));
+ outputKey.setAsCopy(tempKmer);
+ writer.append(outputKey, outputNode);
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ @Override
+ public void close(DataOutput output) throws HyracksDataException {
+ }
+
+ }
+
+ @Override
+ public ITupleWriter getTupleWriter(IHyracksTaskContext ctx) throws HyracksDataException {
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+ return new TupleWriter(confFactory);
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/KeyValueTextWriterFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/KeyValueTextWriterFactory.java
new file mode 100644
index 0000000..10b7b97
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/KeyValueTextWriterFactory.java
@@ -0,0 +1,83 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.graph.io;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.genomix.hyracks.graph.dataflow.ReadsKeyValueParserFactory;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriter;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriterFactory;
+
+public class KeyValueTextWriterFactory implements ITupleWriterFactory {
+
+ /**
+ * Write the node to Text
+ */
+ private static final long serialVersionUID = 1L;
+ private final int kmerSize;
+
+ public KeyValueTextWriterFactory(int k) {
+ this.kmerSize = k;
+ }
+
+ @Override
+ public ITupleWriter getTupleWriter(IHyracksTaskContext ctx) throws HyracksDataException {
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+ return new ITupleWriter() {
+ private NodeWritable outputNode = new NodeWritable();
+ private KmerBytesWritable tempKmer = new KmerBytesWritable();
+ private VKmerBytesWritable outputKey = new VKmerBytesWritable();
+
+ @Override
+ public void open(DataOutput output) throws HyracksDataException {
+
+ }
+
+ @Override
+ public void write(DataOutput output, ITupleReference tuple) throws HyracksDataException {
+ try {
+ if (tempKmer.getLength() > tuple.getFieldLength(ReadsKeyValueParserFactory.OutputKmerField)) {
+ throw new IllegalArgumentException("Not enough kmer bytes");
+ }
+ tempKmer.setAsReference(tuple.getFieldData(ReadsKeyValueParserFactory.OutputKmerField),
+ tuple.getFieldStart(ReadsKeyValueParserFactory.OutputKmerField));
+
+ outputNode.setAsReference(tuple.getFieldData(ReadsKeyValueParserFactory.OutputNodeField),
+ tuple.getFieldStart(ReadsKeyValueParserFactory.OutputNodeField));
+ outputKey.setAsCopy(tempKmer);
+ output.write(outputKey.toString().getBytes());
+ output.writeByte('\t');
+ output.write(outputNode.toString().getBytes());
+ output.writeByte('\n');
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ @Override
+ public void close(DataOutput output) throws HyracksDataException {
+
+ }
+
+ };
+ }
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/NodeSequenceWriterFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/NodeSequenceWriterFactory.java
new file mode 100644
index 0000000..592759b
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/NodeSequenceWriterFactory.java
@@ -0,0 +1,96 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.graph.io;
+
+import java.io.DataOutput;
+import java.io.IOException;
+import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.io.NullWritable;
+import org.apache.hadoop.io.SequenceFile;
+import org.apache.hadoop.io.SequenceFile.CompressionType;
+import org.apache.hadoop.io.SequenceFile.Writer;
+import org.apache.hadoop.mapred.JobConf;
+
+import edu.uci.ics.genomix.hyracks.graph.dataflow.AssembleKeyIntoNodeOperator;
+import edu.uci.ics.genomix.hyracks.graph.job.GenomixJobConf;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriter;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriterFactory;
+import edu.uci.ics.hyracks.hdfs.dataflow.ConfFactory;
+
+@SuppressWarnings("deprecation")
+public class NodeSequenceWriterFactory implements ITupleWriterFactory {
+
+ /**
+ * Write the node to Text
+ */
+ private static final long serialVersionUID = 1L;
+ private final int kmerSize;
+ private ConfFactory confFactory;
+
+ public static final int OutputNodeField = AssembleKeyIntoNodeOperator.OutputNodeField;
+
+ public NodeSequenceWriterFactory(JobConf conf) throws HyracksDataException {
+ this.confFactory = new ConfFactory(conf);
+ this.kmerSize = conf.getInt(GenomixJobConf.KMER_LENGTH, GenomixJobConf.DEFAULT_KMERLEN);
+ }
+
+ public class TupleWriter implements ITupleWriter {
+
+ public TupleWriter(ConfFactory confFactory) {
+ this.cf = confFactory;
+ }
+
+ ConfFactory cf;
+ Writer writer = null;
+ NodeWritable node = new NodeWritable();
+
+ @Override
+ public void open(DataOutput output) throws HyracksDataException {
+ try {
+ writer = SequenceFile.createWriter(cf.getConf(), (FSDataOutputStream) output, NodeWritable.class,
+ NullWritable.class, CompressionType.NONE, null);
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ @Override
+ public void write(DataOutput output, ITupleReference tuple) throws HyracksDataException {
+ node.setAsReference(tuple.getFieldData(OutputNodeField), tuple.getFieldStart(OutputNodeField));
+ try {
+ writer.append(node, NullWritable.get());
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ @Override
+ public void close(DataOutput output) throws HyracksDataException {
+ }
+
+ }
+
+ @Override
+ public ITupleWriter getTupleWriter(IHyracksTaskContext ctx) throws HyracksDataException {
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+ return new TupleWriter(confFactory);
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/NodeTextWriterFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/NodeTextWriterFactory.java
new file mode 100644
index 0000000..21486f4
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/io/NodeTextWriterFactory.java
@@ -0,0 +1,72 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.graph.io;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.genomix.hyracks.graph.dataflow.AssembleKeyIntoNodeOperator;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriter;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriterFactory;
+
+public class NodeTextWriterFactory implements ITupleWriterFactory {
+
+ /**
+ * Write the node to Text
+ */
+ private static final long serialVersionUID = 1L;
+ private final int kmerSize;
+ public static final int OutputNodeField = AssembleKeyIntoNodeOperator.OutputNodeField;
+
+ public NodeTextWriterFactory(int k) {
+ this.kmerSize = k;
+ }
+
+ @Override
+ public ITupleWriter getTupleWriter(IHyracksTaskContext ctx) throws HyracksDataException {
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+ return new ITupleWriter() {
+ NodeWritable node = new NodeWritable();
+
+ @Override
+ public void open(DataOutput output) throws HyracksDataException {
+
+ }
+
+ @Override
+ public void write(DataOutput output, ITupleReference tuple) throws HyracksDataException {
+ node.setAsReference(tuple.getFieldData(OutputNodeField), tuple.getFieldStart(OutputNodeField));
+ try {
+ output.write(node.toString().getBytes());
+ output.writeByte('\n');
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ @Override
+ public void close(DataOutput output) throws HyracksDataException {
+
+ }
+
+ };
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/GenomixJobConf.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/GenomixJobConf.java
new file mode 100644
index 0000000..04235a6
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/GenomixJobConf.java
@@ -0,0 +1,104 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.job;
+
+import java.io.IOException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.mapred.JobConf;
+
+@SuppressWarnings("deprecation")
+public class GenomixJobConf extends JobConf {
+
+ public static final String JOB_NAME = "genomix";
+
+ /** Kmers length */
+ public static final String KMER_LENGTH = "genomix.kmerlen";
+ /** Read length */
+ public static final String READ_LENGTH = "genomix.readlen";
+ /** Frame Size */
+ public static final String FRAME_SIZE = "genomix.framesize";
+ /** Frame Limit, hyracks need */
+ public static final String FRAME_LIMIT = "genomix.framelimit";
+ /** Table Size, hyracks need */
+ public static final String TABLE_SIZE = "genomix.tablesize";
+ /** Groupby types */
+ public static final String GROUPBY_TYPE = "genomix.graph.groupby.type";
+ /** Graph outputformat */
+ public static final String OUTPUT_FORMAT = "genomix.graph.output";
+ /** Get reversed Kmer Sequence */
+ public static final String REVERSED_KMER = "genomix.kmer.reversed";
+
+ /** Configurations used by hybrid groupby function in graph build phrase */
+ public static final String GROUPBY_HYBRID_INPUTSIZE = "genomix.graph.groupby.hybrid.inputsize";
+ public static final String GROUPBY_HYBRID_INPUTKEYS = "genomix.graph.groupby.hybrid.inputkeys";
+ public static final String GROUPBY_HYBRID_RECORDSIZE_SINGLE = "genomix.graph.groupby.hybrid.recordsize.single";
+ public static final String GROUPBY_HYBRID_RECORDSIZE_CROSS = "genomix.graph.groupby.hybrid.recordsize.cross";
+ public static final String GROUPBY_HYBRID_HASHLEVEL = "genomix.graph.groupby.hybrid.hashlevel";
+
+ public static final int DEFAULT_KMERLEN = 21;
+ public static final int DEFAULT_READLEN = 124;
+ public static final int DEFAULT_FRAME_SIZE = 128 * 1024;
+ public static final int DEFAULT_FRAME_LIMIT = 4096;
+ public static final int DEFAULT_TABLE_SIZE = 10485767;
+ public static final long DEFAULT_GROUPBY_HYBRID_INPUTSIZE = 154000000L;
+ public static final long DEFAULT_GROUPBY_HYBRID_INPUTKEYS = 38500000L;
+ public static final int DEFAULT_GROUPBY_HYBRID_RECORDSIZE_SINGLE = 9;
+ public static final int DEFAULT_GROUPBY_HYBRID_HASHLEVEL = 1;
+ public static final int DEFAULT_GROUPBY_HYBRID_RECORDSIZE_CROSS = 13;
+
+ public static final boolean DEFAULT_REVERSED = true;
+
+ public static final String JOB_PLAN_GRAPHBUILD = "graphbuild";
+ public static final String JOB_PLAN_GRAPHSTAT = "graphstat";
+
+ public static final String GROUPBY_TYPE_HYBRID = "hybrid";
+ public static final String GROUPBY_TYPE_EXTERNAL = "external";
+ public static final String GROUPBY_TYPE_PRECLUSTER = "precluster";
+ public static final String OUTPUT_FORMAT_BINARY = "binary";
+ public static final String OUTPUT_FORMAT_TEXT = "text";
+
+ public GenomixJobConf() throws IOException {
+ super(new Configuration());
+ }
+
+ public GenomixJobConf(Configuration conf) throws IOException {
+ super(conf);
+ }
+
+ /**
+ * Set the kmer length
+ *
+ * @param the
+ * desired frame kmerByteSize
+ */
+ final public void setKmerLength(int kmerlength) {
+ setInt(KMER_LENGTH, kmerlength);
+ }
+
+ final public void setFrameSize(int frameSize) {
+ setInt(FRAME_SIZE, frameSize);
+ }
+
+ final public void setFrameLimit(int frameLimit) {
+ setInt(FRAME_LIMIT, frameLimit);
+ }
+
+ final public void setTableSize(int tableSize) {
+ setInt(TABLE_SIZE, tableSize);
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGen.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGen.java
new file mode 100644
index 0000000..7175837
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGen.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.job;
+
+import java.io.Serializable;
+import java.util.UUID;
+
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.api.exceptions.HyracksException;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.hdfs.dataflow.ConfFactory;
+
+public abstract class JobGen implements Serializable {
+
+ /**
+ * generate the jobId
+ */
+ private static final long serialVersionUID = 1L;
+ protected final ConfFactory confFactory;
+ protected String jobId = new UUID(System.currentTimeMillis(), System.nanoTime()).toString();
+
+ public JobGen(GenomixJobConf job) throws HyracksDataException {
+ this.confFactory = new ConfFactory(job);
+ }
+
+ public abstract JobSpecification generateJob() throws HyracksException;
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGenBrujinGraph.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGenBrujinGraph.java
new file mode 100644
index 0000000..48a1a78
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGenBrujinGraph.java
@@ -0,0 +1,274 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.job;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.mapred.InputSplit;
+import org.apache.hadoop.mapred.JobConf;
+
+import edu.uci.ics.genomix.hyracks.data.accessors.KmerHashPartitioncomputerFactory;
+import edu.uci.ics.genomix.hyracks.data.accessors.KmerNormarlizedComputerFactory;
+import edu.uci.ics.genomix.hyracks.data.primitive.KmerPointable;
+import edu.uci.ics.genomix.hyracks.graph.dataflow.AssembleKeyIntoNodeOperator;
+import edu.uci.ics.genomix.hyracks.graph.dataflow.ConnectorPolicyAssignmentPolicy;
+import edu.uci.ics.genomix.hyracks.graph.dataflow.ReadsKeyValueParserFactory;
+import edu.uci.ics.genomix.hyracks.graph.dataflow.aggregators.AggregateKmerAggregateFactory;
+import edu.uci.ics.genomix.hyracks.graph.dataflow.aggregators.MergeKmerAggregateFactory;
+import edu.uci.ics.genomix.hyracks.graph.io.NodeSequenceWriterFactory;
+import edu.uci.ics.genomix.hyracks.graph.io.NodeTextWriterFactory;
+
+import edu.uci.ics.hyracks.api.client.NodeControllerInfo;
+import edu.uci.ics.hyracks.api.constraints.PartitionConstraintHelper;
+import edu.uci.ics.hyracks.api.dataflow.IConnectorDescriptor;
+import edu.uci.ics.hyracks.api.dataflow.IOperatorDescriptor;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.INormalizedKeyComputerFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.dataflow.value.ITuplePartitionComputerFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.api.exceptions.HyracksException;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import edu.uci.ics.hyracks.data.std.api.IPointableFactory;
+import edu.uci.ics.hyracks.dataflow.std.base.AbstractOperatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.connectors.MToNPartitioningMergingConnectorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
+import edu.uci.ics.hyracks.dataflow.std.group.preclustered.PreclusteredGroupOperatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.sort.ExternalSortOperatorDescriptor;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriterFactory;
+import edu.uci.ics.hyracks.hdfs.dataflow.ConfFactory;
+import edu.uci.ics.hyracks.hdfs.dataflow.HDFSReadOperatorDescriptor;
+import edu.uci.ics.hyracks.hdfs.dataflow.HDFSWriteOperatorDescriptor;
+import edu.uci.ics.hyracks.hdfs.scheduler.Scheduler;
+
+@SuppressWarnings("deprecation")
+public class JobGenBrujinGraph extends JobGen {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public enum GroupbyType {
+ EXTERNAL,
+ PRECLUSTER,
+ HYBRIDHASH,
+ }
+
+ public enum OutputFormat {
+ TEXT,
+ BINARY,
+ }
+
+ protected ConfFactory hadoopJobConfFactory;
+ protected static final Log LOG = LogFactory.getLog(JobGenBrujinGraph.class);
+ protected String[] ncNodeNames;
+ protected String[] readSchedule;
+
+ protected int kmerSize;
+ protected int frameLimits;
+ protected int frameSize;
+ protected int tableSize;
+ protected GroupbyType groupbyType;
+ protected OutputFormat outputFormat;
+
+ protected void logDebug(String status) {
+ LOG.debug(status + " nc nodes:" + ncNodeNames.length);
+ }
+
+ public JobGenBrujinGraph(GenomixJobConf job, Scheduler scheduler, final Map<String, NodeControllerInfo> ncMap,
+ int numPartitionPerMachine) throws HyracksDataException {
+ super(job);
+ String[] nodes = new String[ncMap.size()];
+ ncMap.keySet().toArray(nodes);
+ ncNodeNames = new String[nodes.length * numPartitionPerMachine];
+ for (int i = 0; i < numPartitionPerMachine; i++) {
+ System.arraycopy(nodes, 0, ncNodeNames, i * nodes.length, nodes.length);
+ }
+ initJobConfiguration(scheduler);
+ }
+
+ private Object[] generateAggeragateDescriptorbyType(JobSpecification jobSpec, int[] keyFields,
+ IAggregatorDescriptorFactory aggregator, IAggregatorDescriptorFactory merger,
+ ITuplePartitionComputerFactory partition, INormalizedKeyComputerFactory normalizer,
+ IPointableFactory pointable, RecordDescriptor combineRed, RecordDescriptor finalRec)
+ throws HyracksDataException {
+
+ Object[] obj = new Object[3];
+
+ switch (groupbyType) {
+ case PRECLUSTER:
+ default:
+ obj[0] = new PreclusteredGroupOperatorDescriptor(jobSpec, keyFields,
+ new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(pointable) }, aggregator,
+ combineRed);
+ obj[1] = new MToNPartitioningMergingConnectorDescriptor(jobSpec, partition, keyFields,
+ new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(pointable) });
+ obj[2] = new PreclusteredGroupOperatorDescriptor(jobSpec, keyFields,
+ new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(pointable) }, merger,
+ finalRec);
+ jobSpec.setConnectorPolicyAssignmentPolicy(new ConnectorPolicyAssignmentPolicy());
+ break;
+ }
+ return obj;
+ }
+
+ public HDFSReadOperatorDescriptor createHDFSReader(JobSpecification jobSpec) throws HyracksDataException {
+ try {
+ InputSplit[] splits = hadoopJobConfFactory.getConf().getInputFormat()
+ .getSplits(hadoopJobConfFactory.getConf(), ncNodeNames.length);
+
+ return new HDFSReadOperatorDescriptor(jobSpec, ReadsKeyValueParserFactory.readKmerOutputRec,
+ hadoopJobConfFactory.getConf(), splits, readSchedule, new ReadsKeyValueParserFactory(kmerSize));
+ } catch (Exception e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ public static void connectOperators(JobSpecification jobSpec, IOperatorDescriptor preOp, String[] preNodes,
+ IOperatorDescriptor nextOp, String[] nextNodes, IConnectorDescriptor conn) {
+ PartitionConstraintHelper.addAbsoluteLocationConstraint(jobSpec, preOp, preNodes);
+ PartitionConstraintHelper.addAbsoluteLocationConstraint(jobSpec, nextOp, nextNodes);
+ jobSpec.connect(conn, preOp, 0, nextOp, 0);
+ }
+
+ public AbstractOperatorDescriptor generateGroupbyKmerJob(JobSpecification jobSpec,
+ AbstractOperatorDescriptor readOperator) throws HyracksDataException {
+ int[] keyFields = new int[] { 0 }; // the id of grouped key
+
+ ExternalSortOperatorDescriptor sorter = new ExternalSortOperatorDescriptor(jobSpec, frameLimits, keyFields,
+ new IBinaryComparatorFactory[] { PointableBinaryComparatorFactory.of(KmerPointable.FACTORY) },
+ ReadsKeyValueParserFactory.readKmerOutputRec);
+
+ connectOperators(jobSpec, readOperator, ncNodeNames, sorter, ncNodeNames, new OneToOneConnectorDescriptor(
+ jobSpec));
+
+ RecordDescriptor combineKmerOutputRec = new RecordDescriptor(new ISerializerDeserializer[] { null, null });
+ jobSpec.setFrameSize(frameSize);
+
+ Object[] objs = generateAggeragateDescriptorbyType(jobSpec, keyFields, new AggregateKmerAggregateFactory(
+ kmerSize), new MergeKmerAggregateFactory(kmerSize), new KmerHashPartitioncomputerFactory(),
+ new KmerNormarlizedComputerFactory(), KmerPointable.FACTORY, combineKmerOutputRec, combineKmerOutputRec);
+ AbstractOperatorDescriptor kmerLocalAggregator = (AbstractOperatorDescriptor) objs[0];
+ logDebug("LocalKmerGroupby Operator");
+ connectOperators(jobSpec, sorter, ncNodeNames, kmerLocalAggregator, ncNodeNames,
+ new OneToOneConnectorDescriptor(jobSpec));
+
+ logDebug("CrossKmerGroupby Operator");
+ IConnectorDescriptor kmerConnPartition = (IConnectorDescriptor) objs[1];
+ AbstractOperatorDescriptor kmerCrossAggregator = (AbstractOperatorDescriptor) objs[2];
+ connectOperators(jobSpec, kmerLocalAggregator, ncNodeNames, kmerCrossAggregator, ncNodeNames, kmerConnPartition);
+ return kmerCrossAggregator;
+ }
+
+ public AbstractOperatorDescriptor generateKmerToFinalNode(JobSpecification jobSpec,
+ AbstractOperatorDescriptor kmerCrossAggregator) {
+
+ AbstractOperatorDescriptor mapToFinalNode = new AssembleKeyIntoNodeOperator(jobSpec,
+ AssembleKeyIntoNodeOperator.nodeOutputRec, kmerSize);
+ connectOperators(jobSpec, kmerCrossAggregator, ncNodeNames, mapToFinalNode, ncNodeNames,
+ new OneToOneConnectorDescriptor(jobSpec));
+ return mapToFinalNode;
+ }
+
+ public AbstractOperatorDescriptor generateNodeWriterOpertator(JobSpecification jobSpec,
+ AbstractOperatorDescriptor mapEachReadToNode) throws HyracksException {
+ ITupleWriterFactory nodeWriter = null;
+ switch (outputFormat) {
+ case TEXT:
+ nodeWriter = new NodeTextWriterFactory(kmerSize);
+ break;
+ case BINARY:
+ default:
+ nodeWriter = new NodeSequenceWriterFactory(hadoopJobConfFactory.getConf());
+ break;
+ }
+ logDebug("WriteOperator");
+ // Output Node
+ HDFSWriteOperatorDescriptor writeNodeOperator = new HDFSWriteOperatorDescriptor(jobSpec,
+ hadoopJobConfFactory.getConf(), nodeWriter);
+ connectOperators(jobSpec, mapEachReadToNode, ncNodeNames, writeNodeOperator, ncNodeNames,
+ new OneToOneConnectorDescriptor(jobSpec));
+ return writeNodeOperator;
+ }
+
+ @Override
+ public JobSpecification generateJob() throws HyracksException {
+
+ JobSpecification jobSpec = new JobSpecification();
+ logDebug("ReadKmer Operator");
+
+ HDFSReadOperatorDescriptor readOperator = createHDFSReader(jobSpec);
+
+ logDebug("Group by Kmer");
+ AbstractOperatorDescriptor lastOperator = generateGroupbyKmerJob(jobSpec, readOperator);
+
+ logDebug("Generate final node");
+ lastOperator = generateKmerToFinalNode(jobSpec, lastOperator);
+
+ logDebug("Write node to result");
+ lastOperator = generateNodeWriterOpertator(jobSpec, lastOperator);
+
+ jobSpec.addRoot(lastOperator);
+ return jobSpec;
+ }
+
+ protected void initJobConfiguration(Scheduler scheduler) throws HyracksDataException {
+ Configuration conf = confFactory.getConf();
+ kmerSize = conf.getInt(GenomixJobConf.KMER_LENGTH, GenomixJobConf.DEFAULT_KMERLEN);
+ if (kmerSize % 2 == 0) {
+ kmerSize--;
+ conf.setInt(GenomixJobConf.KMER_LENGTH, kmerSize);
+ }
+ frameLimits = conf.getInt(GenomixJobConf.FRAME_LIMIT, GenomixJobConf.DEFAULT_FRAME_LIMIT);
+ tableSize = conf.getInt(GenomixJobConf.TABLE_SIZE, GenomixJobConf.DEFAULT_TABLE_SIZE);
+ frameSize = conf.getInt(GenomixJobConf.FRAME_SIZE, GenomixJobConf.DEFAULT_FRAME_SIZE);
+
+ String type = conf.get(GenomixJobConf.GROUPBY_TYPE, GenomixJobConf.GROUPBY_TYPE_PRECLUSTER);
+ groupbyType = GroupbyType.PRECLUSTER;
+
+ String output = conf.get(GenomixJobConf.OUTPUT_FORMAT, GenomixJobConf.OUTPUT_FORMAT_TEXT);
+
+ if (output.equalsIgnoreCase("text")) {
+ outputFormat = OutputFormat.TEXT;
+ } else {
+ outputFormat = OutputFormat.BINARY;
+ }
+ try {
+ hadoopJobConfFactory = new ConfFactory(new JobConf(conf));
+ InputSplit[] splits = hadoopJobConfFactory.getConf().getInputFormat()
+ .getSplits(hadoopJobConfFactory.getConf(), ncNodeNames.length);
+ readSchedule = scheduler.getLocationConstraints(splits);
+
+ } catch (IOException ex) {
+ throw new HyracksDataException(ex);
+ }
+
+ LOG.info("Genomix Graph Build Configuration");
+ LOG.info("Kmer:" + kmerSize);
+ LOG.info("Groupby type:" + type);
+ LOG.info("Output format:" + output);
+ LOG.info("Frame limit" + frameLimits);
+ LOG.info("Frame kmerByteSize" + frameSize);
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGenCheckReader.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGenCheckReader.java
new file mode 100644
index 0000000..775fe04
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGenCheckReader.java
@@ -0,0 +1,121 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.graph.job;
+
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.Map;
+
+import edu.uci.ics.genomix.hyracks.graph.dataflow.ReadsKeyValueParserFactory;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+
+import edu.uci.ics.hyracks.api.client.NodeControllerInfo;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.api.exceptions.HyracksException;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.dataflow.std.base.AbstractSingleActivityOperatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriter;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriterFactory;
+import edu.uci.ics.hyracks.hdfs.dataflow.HDFSReadOperatorDescriptor;
+import edu.uci.ics.hyracks.hdfs.dataflow.HDFSWriteOperatorDescriptor;
+import edu.uci.ics.hyracks.hdfs.scheduler.Scheduler;
+
+public class JobGenCheckReader extends JobGenBrujinGraph {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public JobGenCheckReader(GenomixJobConf job, Scheduler scheduler, Map<String, NodeControllerInfo> ncMap,
+ int numPartitionPerMachine) throws HyracksDataException {
+ super(job, scheduler, ncMap, numPartitionPerMachine);
+ }
+
+ @Override
+ public JobSpecification generateJob() throws HyracksException {
+
+ JobSpecification jobSpec = new JobSpecification();
+ logDebug("ReadKmer Operator");
+ HDFSReadOperatorDescriptor readOperator = createHDFSReader(jobSpec);
+
+ logDebug("Write kmer to result");
+ generateRootByWriteKmerReader(jobSpec, readOperator);
+
+ return jobSpec;
+ }
+
+ public AbstractSingleActivityOperatorDescriptor generateRootByWriteKmerReader(JobSpecification jobSpec,
+ HDFSReadOperatorDescriptor readOperator) throws HyracksException {
+
+ HDFSWriteOperatorDescriptor writeKmerOperator = new HDFSWriteOperatorDescriptor(jobSpec,
+ hadoopJobConfFactory.getConf(), new ITupleWriterFactory() {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public ITupleWriter getTupleWriter(IHyracksTaskContext ctx) throws HyracksDataException {
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+ return new ITupleWriter() {
+
+ private NodeWritable outputNode = new NodeWritable();
+ private KmerBytesWritable outputKmer = new KmerBytesWritable();
+
+ @Override
+ public void open(DataOutput output) throws HyracksDataException {
+ }
+
+ @Override
+ public void write(DataOutput output, ITupleReference tuple) throws HyracksDataException {
+ try {
+ if (outputKmer.getLength() > tuple
+ .getFieldLength(ReadsKeyValueParserFactory.OutputKmerField)) {
+ throw new IllegalArgumentException("Not enough kmer bytes");
+ }
+ outputKmer.setAsReference(
+ tuple.getFieldData(ReadsKeyValueParserFactory.OutputKmerField),
+ tuple.getFieldStart(ReadsKeyValueParserFactory.OutputKmerField));
+ outputNode.setAsReference(
+ tuple.getFieldData(ReadsKeyValueParserFactory.OutputNodeField),
+ tuple.getFieldStart(ReadsKeyValueParserFactory.OutputNodeField));
+ output.write(outputKmer.toString().getBytes());
+ output.writeByte('\t');
+ output.write(outputNode.toString().getBytes());
+ output.writeByte('\n');
+ } catch (IOException e) {
+ throw new HyracksDataException(e);
+ }
+ }
+
+ @Override
+ public void close(DataOutput output) throws HyracksDataException {
+
+ }
+
+ };
+ }
+
+ });
+ connectOperators(jobSpec, readOperator, ncNodeNames, writeKmerOperator, ncNodeNames,
+ new OneToOneConnectorDescriptor(jobSpec));
+ jobSpec.addRoot(writeKmerOperator);
+ return writeKmerOperator;
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGenUnMergedGraph.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGenUnMergedGraph.java
new file mode 100644
index 0000000..62ef474
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/graph/job/JobGenUnMergedGraph.java
@@ -0,0 +1,83 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.graph.job;
+
+import java.util.Map;
+
+import edu.uci.ics.genomix.hyracks.graph.io.KeyValueSequenceWriterFactory;
+import edu.uci.ics.genomix.hyracks.graph.io.KeyValueTextWriterFactory;
+import edu.uci.ics.hyracks.api.client.NodeControllerInfo;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.api.exceptions.HyracksException;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.dataflow.std.base.AbstractOperatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor;
+import edu.uci.ics.hyracks.hdfs.api.ITupleWriterFactory;
+import edu.uci.ics.hyracks.hdfs.dataflow.HDFSReadOperatorDescriptor;
+import edu.uci.ics.hyracks.hdfs.dataflow.HDFSWriteOperatorDescriptor;
+import edu.uci.ics.hyracks.hdfs.scheduler.Scheduler;
+
+public class JobGenUnMergedGraph extends JobGenBrujinGraph{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public JobGenUnMergedGraph(GenomixJobConf job, Scheduler scheduler, Map<String, NodeControllerInfo> ncMap,
+ int numPartitionPerMachine) throws HyracksDataException {
+ super(job, scheduler, ncMap, numPartitionPerMachine);
+ }
+
+ public AbstractOperatorDescriptor generateUnmergedunMergedWriterOpertator(JobSpecification jobSpec,
+ AbstractOperatorDescriptor kmerCrossAggregator) throws HyracksException {
+ ITupleWriterFactory unMergedWriter = null;
+ switch (outputFormat) {
+ case TEXT:
+ unMergedWriter = new KeyValueTextWriterFactory(kmerSize);
+ break;
+ case BINARY:
+ default:
+ unMergedWriter = new KeyValueSequenceWriterFactory(hadoopJobConfFactory.getConf());
+ break;
+ }
+ logDebug("WriteOperator");
+ // Output Node
+ HDFSWriteOperatorDescriptor writeNodeOperator = new HDFSWriteOperatorDescriptor(jobSpec,
+ hadoopJobConfFactory.getConf(), unMergedWriter);
+ connectOperators(jobSpec, kmerCrossAggregator, ncNodeNames, writeNodeOperator, ncNodeNames,
+ new OneToOneConnectorDescriptor(jobSpec));
+ return writeNodeOperator;
+ }
+
+ @Override
+ public JobSpecification generateJob() throws HyracksException {
+
+ JobSpecification jobSpec = new JobSpecification();
+ logDebug("ReadKmer Operator");
+
+ HDFSReadOperatorDescriptor readOperator = createHDFSReader(jobSpec);
+
+ logDebug("Group by Kmer");
+ AbstractOperatorDescriptor lastOperator = generateGroupbyKmerJob(jobSpec, readOperator);
+
+ logDebug("Write node to result");
+ lastOperator = generateUnmergedunMergedWriterOpertator(jobSpec, lastOperator);
+
+ jobSpec.addRoot(lastOperator);
+ return jobSpec;
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/util/StatCountAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/util/StatCountAggregateFactory.java
new file mode 100644
index 0000000..26daa96
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/util/StatCountAggregateFactory.java
@@ -0,0 +1,124 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.util;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
+import edu.uci.ics.hyracks.dataflow.common.data.marshalling.IntegerSerializerDeserializer;
+import edu.uci.ics.hyracks.dataflow.std.group.AggregateState;
+import edu.uci.ics.hyracks.dataflow.std.group.IAggregatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
+
+public class StatCountAggregateFactory implements IAggregatorDescriptorFactory {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public class CountAggregator implements IAggregatorDescriptor {
+ private final int[] keyFields;
+
+ public CountAggregator(int[] keyFields) {
+ this.keyFields = keyFields;
+ }
+
+ @Override
+ public AggregateState createAggregateStates() {
+ return null;
+ }
+
+ @Override
+ public void init(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex, AggregateState state)
+ throws HyracksDataException {
+ int count = 1;
+ DataOutput fieldOutput = tupleBuilder.getDataOutput();
+ try {
+ fieldOutput.writeInt(count);
+ tupleBuilder.addFieldEndOffset();
+ } catch (IOException e) {
+ throw new HyracksDataException("I/O exception when initializing the aggregator.");
+ }
+ }
+
+ @Override
+ public void reset() {
+
+ }
+
+ @Override
+ public void aggregate(IFrameTupleAccessor accessor, int tIndex, IFrameTupleAccessor stateAccessor,
+ int stateTupleIndex, AggregateState state) throws HyracksDataException {
+ int count = 1;
+
+ int statetupleOffset = stateAccessor.getTupleStartOffset(stateTupleIndex);
+ int countfieldStart = stateAccessor.getFieldStartOffset(stateTupleIndex, keyFields.length);
+ int countoffset = statetupleOffset + stateAccessor.getFieldSlotsLength() + countfieldStart;
+
+ byte[] data = stateAccessor.getBuffer().array();
+ count += IntegerSerializerDeserializer.getInt(data, countoffset);
+ IntegerSerializerDeserializer.putInt(count, data, countoffset);
+ }
+
+ @Override
+ public void outputPartialResult(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) throws HyracksDataException {
+ int count = getCount(accessor, tIndex);
+ DataOutput fieldOutput = tupleBuilder.getDataOutput();
+ try {
+ fieldOutput.writeInt(count);
+ tupleBuilder.addFieldEndOffset();
+ } catch (IOException e) {
+ throw new HyracksDataException("I/O exception when writing aggregation to the output buffer.");
+ }
+
+ }
+
+ protected int getCount(IFrameTupleAccessor accessor, int tIndex) {
+ int tupleOffset = accessor.getTupleStartOffset(tIndex);
+ int fieldStart = accessor.getFieldStartOffset(tIndex, keyFields.length);
+ int countoffset = tupleOffset + accessor.getFieldSlotsLength() + fieldStart;
+ byte[] data = accessor.getBuffer().array();
+
+ return IntegerSerializerDeserializer.getInt(data, countoffset);
+ }
+
+ @Override
+ public void outputFinalResult(ArrayTupleBuilder tupleBuilder, IFrameTupleAccessor accessor, int tIndex,
+ AggregateState state) throws HyracksDataException {
+ outputPartialResult(tupleBuilder, accessor, tIndex, state);
+ }
+
+ @Override
+ public void close() {
+
+ }
+
+ }
+
+ @Override
+ public IAggregatorDescriptor createAggregator(IHyracksTaskContext ctx, RecordDescriptor inRecordDescriptor,
+ RecordDescriptor outRecordDescriptor, int[] keyFields, int[] keyFieldsInPartialResults)
+ throws HyracksDataException {
+ return new CountAggregator(keyFields);
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/main/resources/conf/cluster.properties b/genomix/genomix-hyracks/src/main/resources/conf/cluster.properties
new file mode 100644
index 0000000..66251be
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/conf/cluster.properties
@@ -0,0 +1,41 @@
+#The CC port for Hyracks clients
+CC_CLIENTPORT=3099
+
+#The CC port for Hyracks cluster management
+CC_CLUSTERPORT=1099
+
+#The directory of hyracks binaries
+HYRACKS_HOME="../../../../hyracks"
+
+WORKPATH=""
+#The tmp directory for cc to install jars
+CCTMP_DIR=${WORKPATH}/tmp/t1
+
+#The tmp directory for nc to install jars
+NCTMP_DIR=${WORKPATH}/tmp/t2
+
+#The directory to put cc logs
+CCLOGS_DIR=$CCTMP_DIR/logs
+
+#The directory to put nc logs
+NCLOGS_DIR=$NCTMP_DIR/logs
+
+#Comma separated I/O directories for the spilling of external sort
+IO_DIRS="${WORKPATH}/tmp/t3"
+
+#The JAVA_HOME
+JAVA_HOME=$JAVA_HOME
+
+#HADOOP_HOME
+CLASSPATH="${HADOOP_HOME}:${CLASSPATH}:."
+
+#The frame size of the internal dataflow engine
+FRAME_SIZE=65536
+
+#CC JAVA_OPTS
+CCJAVA_OPTS="-Xrunjdwp:transport=dt_socket,address=7001,server=y,suspend=n -Xmx1g -Djava.util.logging.config.file=logging.properties"
+# Yourkit option: -agentpath:/grid/0/dev/vborkar/tools/yjp-10.0.4/bin/linux-x86-64/libyjpagent.so=port=20001"
+
+#NC JAVA_OPTS
+NCJAVA_OPTS="-Xrunjdwp:transport=dt_socket,address=7002,server=y,suspend=n -Xmx10g -Djava.util.logging.config.file=logging.properties"
+
diff --git a/genomix/genomix-hyracks/src/main/resources/conf/debugnc.properties b/genomix/genomix-hyracks/src/main/resources/conf/debugnc.properties
new file mode 100644
index 0000000..27afa26
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/conf/debugnc.properties
@@ -0,0 +1,12 @@
+#The tmp directory for nc to install jars
+NCTMP_DIR2=/tmp/t-1
+
+#The directory to put nc logs
+NCLOGS_DIR2=$NCTMP_DIR/logs
+
+#Comma separated I/O directories for the spilling of external sort
+IO_DIRS2="/tmp/t-2,/tmp/t-3"
+
+#NC JAVA_OPTS
+NCJAVA_OPTS2="-Xdebug -Xrunjdwp:transport=dt_socket,address=7003,server=y,suspend=n -Xmx1g -Djava.util.logging.config.file=logging.properties"
+
diff --git a/genomix/genomix-hyracks/src/main/resources/conf/master b/genomix/genomix-hyracks/src/main/resources/conf/master
new file mode 100644
index 0000000..2fbb50c
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/conf/master
@@ -0,0 +1 @@
+localhost
diff --git a/genomix/genomix-hyracks/src/main/resources/conf/slaves b/genomix/genomix-hyracks/src/main/resources/conf/slaves
new file mode 100644
index 0000000..2fbb50c
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/conf/slaves
@@ -0,0 +1 @@
+localhost
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/genomix b/genomix/genomix-hyracks/src/main/resources/scripts/genomix
new file mode 100644
index 0000000..239a46c
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/genomix
@@ -0,0 +1,113 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Copyright 2001-2006 The Apache Software Foundation.
+#
+# 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 at
+#
+# 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.
+# ----------------------------------------------------------------------------
+#
+# Copyright (c) 2001-2006 The Apache Software Foundation. All rights
+# reserved.
+
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [ -h "$PRG" ]; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`/"$link"
+ fi
+done
+
+PRGDIR=`dirname "$PRG"`
+BASEDIR=`cd "$PRGDIR/.." >/dev/null; pwd`
+
+
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ Darwin*) darwin=true
+ if [ -z "$JAVA_VERSION" ] ; then
+ JAVA_VERSION="CurrentJDK"
+ else
+ echo "Using Java version: $JAVA_VERSION"
+ fi
+ if [ -z "$JAVA_HOME" ] ; then
+ JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Home
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# If a specific java binary isn't specified search for the standard 'java' binary
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD=`which java`
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." 1>&2
+ echo " We cannot execute $JAVACMD" 1>&2
+ exit 1
+fi
+
+if [ -z "$REPO" ]
+then
+ REPO="$BASEDIR"/lib
+fi
+
+CLASSPATH=$CLASSPATH_PREFIX:"$BASEDIR"/etc:"$REPO"/hyracks-dataflow-std-0.2.3-SNAPSHOT.jar:"$REPO"/hyracks-api-0.2.3-SNAPSHOT.jar:"$REPO"/json-20090211.jar:"$REPO"/httpclient-4.1-alpha2.jar:"$REPO"/httpcore-4.1-beta1.jar:"$REPO"/commons-logging-1.1.1.jar:"$REPO"/args4j-2.0.12.jar:"$REPO"/commons-lang3-3.1.jar:"$REPO"/hyracks-dataflow-common-0.2.3-SNAPSHOT.jar:"$REPO"/hyracks-data-std-0.2.3-SNAPSHOT.jar:"$REPO"/hyracks-control-cc-0.2.3-SNAPSHOT.jar:"$REPO"/hyracks-control-common-0.2.3-SNAPSHOT.jar:"$REPO"/jetty-server-8.0.0.RC0.jar:"$REPO"/servlet-api-3.0.20100224.jar:"$REPO"/jetty-continuation-8.0.0.RC0.jar:"$REPO"/jetty-http-8.0.0.RC0.jar:"$REPO"/jetty-io-8.0.0.RC0.jar:"$REPO"/jetty-webapp-8.0.0.RC0.jar:"$REPO"/jetty-xml-8.0.0.RC0.jar:"$REPO"/jetty-util-8.0.0.RC0.jar:"$REPO"/jetty-servlet-8.0.0.RC0.jar:"$REPO"/jetty-security-8.0.0.RC0.jar:"$REPO"/wicket-core-1.5.2.jar:"$REPO"/wicket-util-1.5.2.jar:"$REPO"/wicket-request-1.5.2.jar:"$REPO"/slf4j-api-1.6.1.jar:"$REPO"/slf4j-jcl-1.6.3.jar:"$REPO"/hyracks-control-nc-0.2.3-SNAPSHOT.jar:"$REPO"/dcache-client-0.0.1.jar:"$REPO"/jetty-client-8.0.0.M0.jar:"$REPO"/hyracks-net-0.2.3-SNAPSHOT.jar:"$REPO"/commons-io-1.3.1.jar:"$REPO"/hyracks-ipc-0.2.3-SNAPSHOT.jar:"$REPO"/hadoop-core-0.20.2.jar:"$REPO"/commons-cli-1.2.jar:"$REPO"/xmlenc-0.52.jar:"$REPO"/commons-httpclient-3.0.1.jar:"$REPO"/commons-codec-1.3.jar:"$REPO"/commons-net-1.4.1.jar:"$REPO"/jetty-6.1.14.jar:"$REPO"/jetty-util-6.1.14.jar:"$REPO"/jasper-runtime-5.5.12.jar:"$REPO"/jasper-compiler-5.5.12.jar:"$REPO"/jsp-api-2.1-6.1.14.jar:"$REPO"/jsp-2.1-6.1.14.jar:"$REPO"/ant-1.6.5.jar:"$REPO"/commons-el-1.0.jar:"$REPO"/jets3t-0.7.1.jar:"$REPO"/servlet-api-2.5-6.1.14.jar:"$REPO"/kfs-0.3.jar:"$REPO"/hsqldb-1.8.0.10.jar:"$REPO"/oro-2.0.8.jar:"$REPO"/core-3.1.1.jar:"$REPO"/hadoop-test-0.20.2.jar:"$REPO"/ftplet-api-1.0.0.jar:"$REPO"/mina-core-2.0.0-M5.jar:"$REPO"/ftpserver-core-1.0.0.jar:"$REPO"/ftpserver-deprecated-1.0.0-M2.jar:"$REPO"/hyracks-hdfs-core-0.2.3-SNAPSHOT.jar:"$REPO"/hyracks-hdfs-0.20.2-0.2.3-SNAPSHOT.jar:"$REPO"/genomix-data-0.2.3-SNAPSHOT.jar:"$REPO"/genomix-hyracks-0.2.3-SNAPSHOT.jar
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$HOME" ] && HOME=`cygpath --path --windows "$HOME"`
+ [ -n "$BASEDIR" ] && BASEDIR=`cygpath --path --windows "$BASEDIR"`
+ [ -n "$REPO" ] && REPO=`cygpath --path --windows "$REPO"`
+fi
+
+exec "$JAVACMD" $JAVA_OPTS \
+ -classpath "$CLASSPATH" \
+ -Dapp.name="genomix" \
+ -Dapp.pid="$$" \
+ -Dapp.repo="$REPO" \
+ -Dapp.home="$BASEDIR" \
+ -Dbasedir="$BASEDIR" \
+ edu.uci.ics.genomix.driver.Driver \
+ "$@"
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/genomix.bat b/genomix/genomix-hyracks/src/main/resources/scripts/genomix.bat
new file mode 100644
index 0000000..abcafaf
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/genomix.bat
@@ -0,0 +1,108 @@
+@REM ----------------------------------------------------------------------------
+@REM Copyright 2001-2006 The Apache Software Foundation.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+@REM ----------------------------------------------------------------------------
+@REM
+@REM Copyright (c) 2001-2006 The Apache Software Foundation. All rights
+@REM reserved.
+
+@echo off
+
+set ERROR_CODE=0
+
+:init
+@REM Decide how to startup depending on the version of windows
+
+@REM -- Win98ME
+if NOT "%OS%"=="Windows_NT" goto Win9xArg
+
+@REM set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" @setlocal
+
+@REM -- 4NT shell
+if "%eval[2+2]" == "4" goto 4NTArgs
+
+@REM -- Regular WinNT shell
+set CMD_LINE_ARGS=%*
+goto WinNTGetScriptDir
+
+@REM The 4NT Shell from jp software
+:4NTArgs
+set CMD_LINE_ARGS=%$
+goto WinNTGetScriptDir
+
+:Win9xArg
+@REM Slurp the command line arguments. This loop allows for an unlimited number
+@REM of arguments (up to the command line limit, anyway).
+set CMD_LINE_ARGS=
+:Win9xApp
+if %1a==a goto Win9xGetScriptDir
+set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
+shift
+goto Win9xApp
+
+:Win9xGetScriptDir
+set SAVEDIR=%CD%
+%0\
+cd %0\..\..
+set BASEDIR=%CD%
+cd %SAVEDIR%
+set SAVE_DIR=
+goto repoSetup
+
+:WinNTGetScriptDir
+set BASEDIR=%~dp0\..
+
+:repoSetup
+
+
+if "%JAVACMD%"=="" set JAVACMD=java
+
+if "%REPO%"=="" set REPO=%BASEDIR%\lib
+
+set CLASSPATH="%BASEDIR%"\etc;"%REPO%"\hyracks-dataflow-std-0.2.3-SNAPSHOT.jar;"%REPO%"\hyracks-api-0.2.3-SNAPSHOT.jar;"%REPO%"\json-20090211.jar;"%REPO%"\httpclient-4.1-alpha2.jar;"%REPO%"\httpcore-4.1-beta1.jar;"%REPO%"\commons-logging-1.1.1.jar;"%REPO%"\args4j-2.0.12.jar;"%REPO%"\commons-lang3-3.1.jar;"%REPO%"\hyracks-dataflow-common-0.2.3-SNAPSHOT.jar;"%REPO%"\hyracks-data-std-0.2.3-SNAPSHOT.jar;"%REPO%"\hyracks-control-cc-0.2.3-SNAPSHOT.jar;"%REPO%"\hyracks-control-common-0.2.3-SNAPSHOT.jar;"%REPO%"\jetty-server-8.0.0.RC0.jar;"%REPO%"\servlet-api-3.0.20100224.jar;"%REPO%"\jetty-continuation-8.0.0.RC0.jar;"%REPO%"\jetty-http-8.0.0.RC0.jar;"%REPO%"\jetty-io-8.0.0.RC0.jar;"%REPO%"\jetty-webapp-8.0.0.RC0.jar;"%REPO%"\jetty-xml-8.0.0.RC0.jar;"%REPO%"\jetty-util-8.0.0.RC0.jar;"%REPO%"\jetty-servlet-8.0.0.RC0.jar;"%REPO%"\jetty-security-8.0.0.RC0.jar;"%REPO%"\wicket-core-1.5.2.jar;"%REPO%"\wicket-util-1.5.2.jar;"%REPO%"\wicket-request-1.5.2.jar;"%REPO%"\slf4j-api-1.6.1.jar;"%REPO%"\slf4j-jcl-1.6.3.jar;"%REPO%"\hyracks-control-nc-0.2.3-SNAPSHOT.jar;"%REPO%"\dcache-client-0.0.1.jar;"%REPO%"\jetty-client-8.0.0.M0.jar;"%REPO%"\hyracks-net-0.2.3-SNAPSHOT.jar;"%REPO%"\commons-io-1.3.1.jar;"%REPO%"\hyracks-ipc-0.2.3-SNAPSHOT.jar;"%REPO%"\hadoop-core-0.20.2.jar;"%REPO%"\commons-cli-1.2.jar;"%REPO%"\xmlenc-0.52.jar;"%REPO%"\commons-httpclient-3.0.1.jar;"%REPO%"\commons-codec-1.3.jar;"%REPO%"\commons-net-1.4.1.jar;"%REPO%"\jetty-6.1.14.jar;"%REPO%"\jetty-util-6.1.14.jar;"%REPO%"\jasper-runtime-5.5.12.jar;"%REPO%"\jasper-compiler-5.5.12.jar;"%REPO%"\jsp-api-2.1-6.1.14.jar;"%REPO%"\jsp-2.1-6.1.14.jar;"%REPO%"\ant-1.6.5.jar;"%REPO%"\commons-el-1.0.jar;"%REPO%"\jets3t-0.7.1.jar;"%REPO%"\servlet-api-2.5-6.1.14.jar;"%REPO%"\kfs-0.3.jar;"%REPO%"\hsqldb-1.8.0.10.jar;"%REPO%"\oro-2.0.8.jar;"%REPO%"\core-3.1.1.jar;"%REPO%"\hadoop-test-0.20.2.jar;"%REPO%"\ftplet-api-1.0.0.jar;"%REPO%"\mina-core-2.0.0-M5.jar;"%REPO%"\ftpserver-core-1.0.0.jar;"%REPO%"\ftpserver-deprecated-1.0.0-M2.jar;"%REPO%"\hyracks-hdfs-core-0.2.3-SNAPSHOT.jar;"%REPO%"\hyracks-hdfs-0.20.2-0.2.3-SNAPSHOT.jar;"%REPO%"\genomix-data-0.2.3-SNAPSHOT.jar;"%REPO%"\genomix-hyracks-0.2.3-SNAPSHOT.jar
+goto endInit
+
+@REM Reaching here means variables are defined and arguments have been captured
+:endInit
+
+%JAVACMD% %JAVA_OPTS% -classpath %CLASSPATH_PREFIX%;%CLASSPATH% -Dapp.name="genomix" -Dapp.repo="%REPO%" -Dapp.home="%BASEDIR%" -Dbasedir="%BASEDIR%" edu.uci.ics.genomix.driver.Driver %CMD_LINE_ARGS%
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+if "%OS%"=="Windows_NT" @endlocal
+set ERROR_CODE=%ERRORLEVEL%
+
+:end
+@REM set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" goto endNT
+
+@REM For old DOS remove the set variables from ENV - we assume they were not set
+@REM before we started - at least we don't leave any baggage around
+set CMD_LINE_ARGS=
+goto postExec
+
+:endNT
+@REM If error code is set to 1 then the endlocal was done already in :error.
+if %ERROR_CODE% EQU 0 @endlocal
+
+
+:postExec
+
+if "%FORCE_EXIT_ON_ERROR%" == "on" (
+ if %ERROR_CODE% NEQ 0 exit %ERROR_CODE%
+)
+
+exit /B %ERROR_CODE%
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/getip.sh b/genomix/genomix-hyracks/src/main/resources/scripts/getip.sh
new file mode 100644
index 0000000..e0cdf73
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/getip.sh
@@ -0,0 +1,21 @@
+#get the OS
+OS_NAME=`uname -a|awk '{print $1}'`
+LINUX_OS='Linux'
+
+if [ $OS_NAME = $LINUX_OS ];
+then
+ #Get IP Address
+ IPADDR=`/sbin/ifconfig eth0 | grep "inet " | awk '{print $2}' | cut -f 2 -d ':'`
+ if [ "$IPADDR" = "" ]
+ then
+ IPADDR=`/sbin/ifconfig lo | grep "inet " | awk '{print $2}' | cut -f 2 -d ':'`
+ fi
+else
+ IPADDR=`/sbin/ifconfig en1 | grep "inet " | awk '{print $2}' | cut -f 2 -d ':'`
+ if [ "$IPADDR" = "" ]
+ then
+ IPADDR=`/sbin/ifconfig lo0 | grep "inet " | awk '{print $2}' | cut -f 2 -d ':'`
+ fi
+
+fi
+echo $IPADDR
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/startAllNCs.sh b/genomix/genomix-hyracks/src/main/resources/scripts/startAllNCs.sh
new file mode 100644
index 0000000..28fcb84
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/startAllNCs.sh
@@ -0,0 +1,6 @@
+GENOMIX_PATH=`pwd`
+
+for i in `cat conf/slaves`
+do
+ ssh $i "cd ${GENOMIX_PATH}; export JAVA_HOME=${JAVA_HOME}; bin/startnc.sh"
+done
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/startCluster.sh b/genomix/genomix-hyracks/src/main/resources/scripts/startCluster.sh
new file mode 100755
index 0000000..843a6b1
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/startCluster.sh
@@ -0,0 +1,4 @@
+bin/startcc.sh
+sleep 5
+bin/startAllNCs.sh
+
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/startDebugNc.sh b/genomix/genomix-hyracks/src/main/resources/scripts/startDebugNc.sh
new file mode 100644
index 0000000..5f89bcc
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/startDebugNc.sh
@@ -0,0 +1,48 @@
+hostname
+
+#Get the IP address of the cc
+CCHOST_NAME=`cat conf/master`
+CURRENT_PATH=`pwd`
+CCHOST=`ssh ${CCHOST_NAME} "cd ${CURRENT_PATH}; bin/getip.sh"`
+
+#Import cluster properties
+. conf/cluster.properties
+. conf/debugnc.properties
+
+#Clean up temp dir
+
+#rm -rf $NCTMP_DIR2
+mkdir -p $NCTMP_DIR2
+
+#Clean up log dir
+#rm -rf $NCLOGS_DIR2
+mkdir -p $NCLOGS_DIR2
+
+
+#Clean up I/O working dir
+io_dirs=$(echo $IO_DIRS2 | tr "," "\n")
+for io_dir in $io_dirs
+do
+ #rm -rf $io_dir
+ mkdir $io_dir
+done
+
+#Set JAVA_HOME
+export JAVA_HOME=$JAVA_HOME
+
+#Get OS
+IPADDR=`bin/getip.sh`
+
+#Get node ID
+NODEID=`hostname | cut -d '.' -f 1`
+
+#Set JAVA_OPTS
+export JAVA_OPTS=$NCJAVA_OPTS2
+
+GENOMIX_HOME=`pwd`
+
+#Enter the temp dir
+cd $NCTMP_DIR2
+
+#Launch hyracks nc
+${GENOMIX_HOME}/bin/genomixnc -cc-host $CCHOST -cc-port $CC_CLUSTERPORT -cluster-net-ip-address $IPADDR -data-ip-address $IPADDR -result-ip-address $IPADDR -node-id $NODEID -iodevices "${IO_DIRS}" &> $NCLOGS_DIR/$NODEID.log &
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/startcc.sh b/genomix/genomix-hyracks/src/main/resources/scripts/startcc.sh
new file mode 100644
index 0000000..67023c1
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/startcc.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+hostname
+
+#Import cluster properties
+. conf/cluster.properties
+
+#Get the IP address of the cc
+CCHOST_NAME=`cat conf/master`
+CCHOST=`bin/getip.sh`
+
+#Remove the temp dir
+#rm -rf $CCTMP_DIR
+mkdir -p $CCTMP_DIR
+
+#Remove the logs dir
+#rm -rf $CCLOGS_DIR
+mkdir -p $CCLOGS_DIR
+
+#Export JAVA_HOME and JAVA_OPTS
+export JAVA_HOME=$JAVA_HOME
+export JAVA_OPTS=$CCJAVA_OPTS
+
+GENOMIX_HOME=`pwd`
+cd $CCTMP_DIR
+#Launch hyracks cc script
+${GENOMIX_HOME}/bin/genomixcc -client-net-ip-address $CCHOST -cluster-net-ip-address $CCHOST -client-net-port $CC_CLIENTPORT -cluster-net-port $CC_CLUSTERPORT -max-heartbeat-lapse-periods 999999 -default-max-job-attempts 0 -job-history-size 3 &> $CCLOGS_DIR/cc.log &
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/startnc.sh b/genomix/genomix-hyracks/src/main/resources/scripts/startnc.sh
new file mode 100644
index 0000000..bfcc1d4
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/startnc.sh
@@ -0,0 +1,48 @@
+hostname
+
+MY_NAME=`hostname`
+#Get the IP address of the cc
+CCHOST_NAME=`cat conf/master`
+CURRENT_PATH=`pwd`
+CCHOST=`ssh ${CCHOST_NAME} "cd ${CURRENT_PATH}; bin/getip.sh"`
+
+#Import cluster properties
+. conf/cluster.properties
+
+#Clean up temp dir
+
+#rm -rf $NCTMP_DIR
+mkdir -p $NCTMP_DIR
+
+#Clean up log dir
+#rm -rf $NCLOGS_DIR
+mkdir -p $NCLOGS_DIR
+
+
+#Clean up I/O working dir
+io_dirs=$(echo $IO_DIRS | tr "," "\n")
+for io_dir in $io_dirs
+do
+ #rm -rf $io_dir
+ mkdir -p $io_dir
+done
+
+#Set JAVA_HOME
+export JAVA_HOME=$JAVA_HOME
+
+IPADDR=`bin/getip.sh`
+#echo $IPADDR
+
+#Get node ID
+NODEID=`hostname | cut -d '.' -f 1`
+
+#Set JAVA_OPTS
+export JAVA_OPTS=$NCJAVA_OPTS
+
+GENOMIX_HOME=`pwd`
+
+#Enter the temp dir
+cd $NCTMP_DIR
+
+#Launch hyracks nc
+${GENOMIX_HOME}/bin/genomixnc -cc-host $CCHOST -cc-port $CC_CLUSTERPORT -cluster-net-ip-address $IPADDR -data-ip-address $IPADDR -result-ip-address $IPADDR -node-id $NODEID -iodevices "${IO_DIRS}" &> $NCLOGS_DIR/$NODEID.log &
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/stopAllNCs.sh b/genomix/genomix-hyracks/src/main/resources/scripts/stopAllNCs.sh
new file mode 100644
index 0000000..66ed866
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/stopAllNCs.sh
@@ -0,0 +1,6 @@
+GENOMIX_PATH=`pwd`
+
+for i in `cat conf/slaves`
+do
+ ssh $i "cd ${GENOMIX_PATH}; bin/stopnc.sh"
+done
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/stopCluster.sh b/genomix/genomix-hyracks/src/main/resources/scripts/stopCluster.sh
new file mode 100644
index 0000000..4889934
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/stopCluster.sh
@@ -0,0 +1,3 @@
+bin/stopAllNCs.sh
+sleep 2
+bin/stopcc.sh
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/stopcc.sh b/genomix/genomix-hyracks/src/main/resources/scripts/stopcc.sh
new file mode 100644
index 0000000..6d1b2d2
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/stopcc.sh
@@ -0,0 +1,20 @@
+hostname
+. conf/cluster.properties
+
+#Kill process
+PID=`ps -ef|grep ${USER}|grep java|grep 'Dapp.name=genomixcc'|awk '{print $2}'`
+
+if [ "$PID" == "" ]; then
+ PID=`ps -ef|grep ${USER}|grep java|grep 'hyracks'|awk '{print $2}'`
+fi
+
+if [ "$PID" == "" ]; then
+ USERID=`id | sed 's/^uid=//;s/(.*$//'`
+ PID=`ps -ef|grep ${USERID}|grep java|grep 'Dapp.name=genomixcc'|awk '{print $2}'`
+fi
+
+echo $PID
+kill -9 $PID
+
+#Clean up CC temp dir
+rm -rf $CCTMP_DIR/*
diff --git a/genomix/genomix-hyracks/src/main/resources/scripts/stopnc.sh b/genomix/genomix-hyracks/src/main/resources/scripts/stopnc.sh
new file mode 100644
index 0000000..092e232
--- /dev/null
+++ b/genomix/genomix-hyracks/src/main/resources/scripts/stopnc.sh
@@ -0,0 +1,31 @@
+hostname
+. conf/cluster.properties
+
+#Kill process
+PID=`ps -ef|grep ${USER}|grep java|grep 'Dapp.name=genomixnc'|awk '{print $2}'`
+
+if [ "$PID" == "" ]; then
+ PID=`ps -ef|grep ${USER}|grep java|grep 'hyracks'|awk '{print $2}'`
+fi
+
+if [ "$PID" == "" ]; then
+ PID=`ps -ef|grep ${USER}|grep java|grep 'hyracks'|awk '{print $2}'`
+fi
+
+if [ "$PID" == "" ]; then
+ USERID=`id | sed 's/^uid=//;s/(.*$//'`
+ PID=`ps -ef|grep ${USERID}|grep java|grep 'Dapp.name=genomixnc'|awk '{print $2}'`
+fi
+
+echo $PID
+kill -9 $PID
+
+#Clean up I/O working dir
+io_dirs=$(echo $IO_DIRS | tr "," "\n")
+for io_dir in $io_dirs
+do
+ rm -rf $io_dir/*
+done
+
+#Clean up NC temp dir
+rm -rf $NCTMP_DIR/*
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GenerateGraphViz.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GenerateGraphViz.java
new file mode 100644
index 0000000..43bb8ff
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GenerateGraphViz.java
@@ -0,0 +1,106 @@
+package edu.uci.ics.genomix.hadoop.graph.test;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.Iterator;
+
+import org.apache.commons.io.filefilter.WildcardFileFilter;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.io.SequenceFile;
+
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+
+public class GenerateGraphViz {
+
+ /**
+ * Construct a DOT graph in memory, convert it
+ * to image and store the image in the file system.
+ */
+ public static void convertGraphBuildingOutputToGraphViz(String srcDir, String destDir) throws Exception {
+ GraphViz gv = new GraphViz();
+ gv.addln(gv.start_graph());
+
+ Configuration conf = new Configuration();
+ FileSystem fileSys = FileSystem.getLocal(conf);
+ File srcPath = new File(srcDir);
+
+ String outputNode = "";
+ String outputEdge = "";
+ for (File f : srcPath.listFiles((FilenameFilter) (new WildcardFileFilter("part*")))) {
+ SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, new Path(f.getAbsolutePath()), conf);
+ VKmerBytesWritable key = new VKmerBytesWritable();
+ NodeWritable value = new NodeWritable();
+
+ gv.addln("rankdir=LR\n");
+
+ while (reader.next(key, value)) {
+ outputNode = "";
+ outputEdge = "";
+ if (key == null) {
+ break;
+ }
+ outputNode += key.toString();
+ /** convert edge to graph **/
+ outputEdge = convertEdgeToGraph(outputNode, value);
+ gv.addln(outputEdge);
+ /** add readIdSet **/
+ String fillColor = "";
+ if(value.isStartReadOrEndRead())
+ fillColor = "fillcolor=\"grey\", style=\"filled\",";
+ outputNode += " [shape=record, " + fillColor + " label = \"<f0> " + key.toString()
+ + "|<f1> " + value.getStartReads().printStartReadIdSet()
+ + "|<f2> " + value.getEndReads().printEndReadIdSet()
+ + "|<f3> " + value.getAvgCoverage() + "\"]\n";
+ gv.addln(outputNode);
+ }
+ reader.close();
+ }
+
+ gv.addln(gv.end_graph());
+ System.out.println(gv.getDotSource());
+
+ String type = "ps";
+ File folder = new File(destDir);
+ folder.mkdirs();
+ File out = new File(destDir + "/result." + type); // Linux
+ gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
+ }
+
+ public static String convertEdgeToGraph(String outputNode, NodeWritable value) {
+ String outputEdge = "";
+ Iterator<EdgeWritable> edgeIterator;
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"black\" label =\"FF: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"blue\" label =\"FR: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"green\" label =\"RF: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"red\" label =\"RR: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ //TODO should output actualKmer instead of kmer
+ if (outputEdge == "")
+ outputEdge += outputNode;
+ return outputEdge;
+ }
+}
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GraphViz.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GraphViz.java
new file mode 100644
index 0000000..42a709f
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/GraphViz.java
@@ -0,0 +1,297 @@
+package edu.uci.ics.genomix.hadoop.graph.test;
+
+// GraphViz.java - a simple API to call dot from Java programs
+
+/*$Id$*/
+/*
+ ******************************************************************************
+ * *
+ * (c) Copyright 2003 Laszlo Szathmary *
+ * *
+ * This program is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as published by *
+ * the Free Software Foundation; either version 2.1 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public *
+ * License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public License *
+ * along with this program; if not, write to the Free Software Foundation, *
+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
+ * *
+ ******************************************************************************
+ */
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+
+/**
+ * <dl>
+ * <dt>Purpose: GraphViz Java API
+ * <dd>
+ * <dt>Description:
+ * <dd>With this Java class you can simply call dot from your Java programs
+ * <dt>Example usage:
+ * <dd>
+ *
+ * <pre>
+ * GraphViz gv = new GraphViz();
+ * gv.addln(gv.start_graph());
+ * gv.addln("A -> B;");
+ * gv.addln("A -> C;");
+ * gv.addln(gv.end_graph());
+ * System.out.println(gv.getDotSource());
+ *
+ * String type = "gif";
+ * File out = new File("out." + type); // out.gif in this example
+ * gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
+ * </pre>
+ *
+ * </dd>
+ * </dl>
+ *
+ * @version v0.4, 2011/02/05 (February) -- Patch of Keheliya Gallaba is added. Now you
+ * can specify the type of the output file: gif, dot, fig, pdf, ps, svg, png, etc.
+ * @version v0.3, 2010/11/29 (November) -- Windows support + ability
+ * to read the graph from a text file
+ * @version v0.2, 2010/07/22 (July) -- bug fix
+ * @version v0.1, 2003/12/04 (December) -- first release
+ * @author Laszlo Szathmary (<a href="jabba.laci@gmail.com">jabba.laci@gmail.com</a>)
+ */
+public class GraphViz {
+ /**
+ * The dir. where temporary files will be created.
+ */
+ private static String TEMP_DIR = "/tmp"; // Linux
+ // private static String TEMP_DIR = "c:/temp"; // Windows
+
+ /**
+ * Where is your dot program located? It will be called externally.
+ */
+ private static String DOT = "/usr/bin/dot"; // Linux
+ // private static String DOT = "c:/Program Files/Graphviz2.26.3/bin/dot.exe"; // Windows
+
+ /**
+ * The source of the graph written in dot language.
+ */
+ private StringBuilder graph = new StringBuilder();
+
+ /**
+ * Constructor: creates a new GraphViz object that will contain
+ * a graph.
+ */
+ public GraphViz() {
+ }
+
+ /**
+ * Returns the graph's source description in dot language.
+ *
+ * @return Source of the graph in dot language.
+ */
+ public String getDotSource() {
+ return graph.toString();
+ }
+
+ /**
+ * Adds a string to the graph's source (without newline).
+ */
+ public void add(String line) {
+ graph.append(line);
+ }
+
+ /**
+ * Adds a string to the graph's source (with newline).
+ */
+ public void addln(String line) {
+ graph.append(line + "\n");
+ }
+
+ /**
+ * Adds a newline to the graph's source.
+ */
+ public void addln() {
+ graph.append('\n');
+ }
+
+ /**
+ * Returns the graph as an image in binary format.
+ *
+ * @param dot_source
+ * Source of the graph to be drawn.
+ * @param type
+ * Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
+ * @return A byte array containing the image of the graph.
+ */
+ public byte[] getGraph(String dot_source, String type) {
+ File dot;
+ byte[] img_stream = null;
+
+ try {
+ dot = writeDotSourceToFile(dot_source);
+ if (dot != null) {
+ img_stream = get_img_stream(dot, type);
+ if (dot.delete() == false)
+ System.err.println("Warning: " + dot.getAbsolutePath() + " could not be deleted!");
+ return img_stream;
+ }
+ return null;
+ } catch (java.io.IOException ioe) {
+ return null;
+ }
+ }
+
+ /**
+ * Writes the graph's image in a file.
+ *
+ * @param img
+ * A byte array containing the image of the graph.
+ * @param file
+ * Name of the file to where we want to write.
+ * @return Success: 1, Failure: -1
+ */
+ public int writeGraphToFile(byte[] img, String file) {
+ File to = new File(file);
+ return writeGraphToFile(img, to);
+ }
+
+ /**
+ * Writes the graph's image in a file.
+ *
+ * @param img
+ * A byte array containing the image of the graph.
+ * @param to
+ * A File object to where we want to write.
+ * @return Success: 1, Failure: -1
+ */
+ public int writeGraphToFile(byte[] img, File to) {
+ try {
+ FileOutputStream fos = new FileOutputStream(to);
+ fos.write(img);
+ fos.close();
+ } catch (java.io.IOException ioe) {
+ return -1;
+ }
+ return 1;
+ }
+
+ /**
+ * It will call the external dot program, and return the image in
+ * binary format.
+ *
+ * @param dot
+ * Source of the graph (in dot language).
+ * @param type
+ * Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
+ * @return The image of the graph in .gif format.
+ */
+ private byte[] get_img_stream(File dot, String type) {
+ File img;
+ byte[] img_stream = null;
+
+ try {
+ img = File.createTempFile("graph_", "." + type, new File(GraphViz.TEMP_DIR));
+ Runtime rt = Runtime.getRuntime();
+
+ // patch by Mike Chenault
+ String[] args = { DOT, "-T" + type, dot.getAbsolutePath(), "-o", img.getAbsolutePath() };
+ Process p = rt.exec(args);
+
+ p.waitFor();
+
+ FileInputStream in = new FileInputStream(img.getAbsolutePath());
+ img_stream = new byte[in.available()];
+ in.read(img_stream);
+ // Close it if we need to
+ if (in != null)
+ in.close();
+
+ if (img.delete() == false)
+ System.err.println("Warning: " + img.getAbsolutePath() + " could not be deleted!");
+ } catch (java.io.IOException ioe) {
+ System.err.println("Error: in I/O processing of tempfile in dir " + GraphViz.TEMP_DIR + "\n");
+ System.err.println(" or in calling external command");
+ ioe.printStackTrace();
+ } catch (java.lang.InterruptedException ie) {
+ System.err.println("Error: the execution of the external program was interrupted");
+ ie.printStackTrace();
+ }
+
+ return img_stream;
+ }
+
+ /**
+ * Writes the source of the graph in a file, and returns the written file
+ * as a File object.
+ *
+ * @param str
+ * Source of the graph (in dot language).
+ * @return The file (as a File object) that contains the source of the graph.
+ */
+ private File writeDotSourceToFile(String str) throws java.io.IOException {
+ File temp;
+ try {
+ temp = File.createTempFile("graph_", ".dot.tmp", new File(GraphViz.TEMP_DIR));
+ FileWriter fout = new FileWriter(temp);
+ fout.write(str);
+ fout.close();
+ } catch (Exception e) {
+ System.err.println("Error: I/O error while writing the dot source to temp file!");
+ return null;
+ }
+ return temp;
+ }
+
+ /**
+ * Returns a string that is used to start a graph.
+ *
+ * @return A string to open a graph.
+ */
+ public String start_graph() {
+ return "digraph G {";
+ }
+
+ /**
+ * Returns a string that is used to end a graph.
+ *
+ * @return A string to close a graph.
+ */
+ public String end_graph() {
+ return "}";
+ }
+
+ /**
+ * Read a DOT graph from a text file.
+ *
+ * @param input
+ * Input text file containing the DOT graph
+ * source.
+ */
+ public void readSource(String input) {
+ StringBuilder sb = new StringBuilder();
+
+ try {
+ FileInputStream fis = new FileInputStream(input);
+ DataInputStream dis = new DataInputStream(fis);
+ BufferedReader br = new BufferedReader(new InputStreamReader(dis));
+ String line;
+ while ((line = br.readLine()) != null) {
+ sb.append(line);
+ }
+ dis.close();
+ } catch (Exception e) {
+ System.err.println("Error: " + e.getMessage());
+ }
+
+ this.graph = sb;
+ }
+
+} // end of class GraphViz
+
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/HadoopMiniClusterTest.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/HadoopMiniClusterTest.java
new file mode 100644
index 0000000..21a1002
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hadoop/graph/test/HadoopMiniClusterTest.java
@@ -0,0 +1,217 @@
+package edu.uci.ics.genomix.hadoop.graph.test;
+
+import java.io.BufferedWriter;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.FileUtil;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hdfs.MiniDFSCluster;
+import org.apache.hadoop.io.SequenceFile;
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.mapred.JobConf;
+import org.apache.hadoop.mapred.MiniMRCluster;
+import org.apache.hadoop.util.ReflectionUtils;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+//import edu.uci.ics.genomix.hadoop.velvetgraphbuilding.GraphBuildingDriver;
+//import edu.uci.ics.genomix.hyracks.newgraph.test.TestUtils;
+
+/*
+ * A base class providing most of the boilerplate for Hadoop-based tests
+ */
+
+@SuppressWarnings("deprecation")
+public class HadoopMiniClusterTest {
+ protected int KMER_LENGTH = 5;
+ protected int READ_LENGTH = 8;
+
+ // subclass should modify this to include the HDFS directories that should be cleaned up
+ protected ArrayList<String> HDFS_PATHS = new ArrayList<String>();
+
+ protected static final String EXPECTED_ROOT = "src/test/resources/expected/";
+ protected static final String ACTUAL_ROOT = "src/test/resources/actual/";
+ protected static final String INPUT_ROOT = "src/test/resources/input/";
+
+ protected static String HADOOP_CONF_ROOT = "src/test/resources/hadoop/conf/";
+ protected static String HADOOP_CONF = HADOOP_CONF_ROOT + "conf.xml";
+
+ protected static MiniDFSCluster dfsCluster;
+ protected static MiniMRCluster mrCluster;
+ protected static FileSystem dfs;
+ protected static JobConf conf = new JobConf();
+ protected static int numberOfNC = 1;
+ protected static int numPartitionPerMachine = 1;
+
+ @BeforeClass
+ public static void setUpMiniCluster() throws Exception {
+ cleanupStores();
+ startHDFS();
+ FileUtils.forceMkdir(new File(ACTUAL_ROOT));
+ FileUtils.cleanDirectory(new File(ACTUAL_ROOT));
+ }
+
+ protected static void copyResultsToLocal(String hdfsSrcDir, String localDestFile, boolean resultsAreText,
+ Configuration conf) throws IOException {
+ copyResultsToLocal(hdfsSrcDir, localDestFile, resultsAreText, conf, true);
+ }
+
+ public static void copyResultsToLocal(String hdfsSrcDir, String localDestFile, boolean resultsAreText,
+ Configuration conf, boolean ignoreZeroOutputs) throws IOException {
+ copyResultsToLocal(hdfsSrcDir, localDestFile, resultsAreText,
+ conf, ignoreZeroOutputs, dfs);
+ }
+
+ /*
+ * Merge and copy a DFS directory to a local destination, converting to text if necessary.
+ * Also locally store the binary-formatted result if available.
+ */
+ public static void copyResultsToLocal(String hdfsSrcDir, String localDestFile, boolean resultsAreText,
+ Configuration conf, boolean ignoreZeroOutputs, FileSystem dfs) throws IOException {
+ if (resultsAreText) {
+ // for text files, just concatenate them together
+ FileUtil.copyMerge(FileSystem.get(conf), new Path(hdfsSrcDir), FileSystem.getLocal(new Configuration()),
+ new Path(localDestFile), false, conf, null);
+ } else {
+ // file is binary
+ // save the entire binary output dir
+ FileUtil.copy(FileSystem.get(conf), new Path(hdfsSrcDir), FileSystem.getLocal(new Configuration()),
+ new Path(localDestFile + ".bindir"), false, conf);
+
+ // chomp through output files
+ FileStatus[] files = ArrayUtils.addAll(dfs.globStatus(new Path(hdfsSrcDir + "*")), dfs.globStatus(new Path(hdfsSrcDir + "*/*")));
+ FileStatus validFile = null;
+ for (FileStatus f : files) {
+ if (f.getLen() != 0) {
+ validFile = f;
+ break;
+ }
+ }
+ if (validFile == null) {
+ if (ignoreZeroOutputs) {
+ // just make a dummy output dir
+ FileSystem lfs = FileSystem.getLocal(new Configuration());
+ lfs.mkdirs(new Path(localDestFile).getParent());
+ return;
+ }
+ else {
+ throw new IOException("No non-zero outputs in source directory " + hdfsSrcDir);
+ }
+ }
+
+ // also load the Nodes and write them out as text locally.
+ FileSystem lfs = FileSystem.getLocal(new Configuration());
+ lfs.mkdirs(new Path(localDestFile).getParent());
+ File filePathTo = new File(localDestFile);
+ if (filePathTo.exists() && filePathTo.isDirectory()) {
+ filePathTo = new File(localDestFile + "/data");
+ }
+ BufferedWriter bw = new BufferedWriter(new FileWriter(filePathTo));
+ SequenceFile.Reader reader = new SequenceFile.Reader(dfs, validFile.getPath(), conf);
+ SequenceFile.Writer writer = new SequenceFile.Writer(lfs, new JobConf(), new Path(localDestFile
+ + ".binmerge"), reader.getKeyClass(), reader.getValueClass());
+
+ Writable key = (Writable) ReflectionUtils.newInstance(reader.getKeyClass(), conf);
+ Writable value = (Writable) ReflectionUtils.newInstance(reader.getValueClass(), conf);
+
+ for (FileStatus f : files) {
+ if (f.getLen() == 0) {
+ continue;
+ }
+ reader = new SequenceFile.Reader(dfs, f.getPath(), conf);
+ while (reader.next(key, value)) {
+ if (key == null || value == null) {
+ break;
+ }
+ bw.write(key.toString() + "\t" + value.toString());
+ System.out.println(key.toString() + "\t" + value.toString());
+ bw.newLine();
+ writer.append(key, value);
+
+ }
+ reader.close();
+ }
+ writer.close();
+ bw.close();
+ }
+
+ }
+
+ protected static boolean checkResults(String expectedPath, String actualPath, int[] poslistField) throws Exception {
+ if (poslistField != null) {
+// TestUtils.compareWithUnSortedPosition(new File(expectedPath), dumped, poslistField);
+ } else {
+// TestUtils.c(new File(expectedPath), dumped);
+ }
+ return true;
+ }
+
+ protected static void cleanupStores() throws IOException {
+ FileUtils.forceMkdir(new File("teststore"));
+ FileUtils.forceMkdir(new File("build"));
+ FileUtils.cleanDirectory(new File("teststore"));
+ FileUtils.cleanDirectory(new File("build"));
+ }
+
+ protected static void startHDFS() throws IOException {
+ 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);
+ dfs = dfsCluster.getFileSystem();
+ mrCluster = new MiniMRCluster(4, dfs.getUri().toString(), 2);
+ System.out.println(dfs.getUri().toString());
+
+ DataOutputStream confOutput = new DataOutputStream(
+ new FileOutputStream(new File(HADOOP_CONF)));
+ conf.writeXml(confOutput);
+ confOutput.close();
+ }
+
+ protected static void copyLocalToDFS(String localSrc, String hdfsDest) throws IOException {
+ Path dest = new Path(hdfsDest);
+ dfs.mkdirs(dest);
+ System.out.println("copying from " + localSrc + " to " + dest);
+ for (File f : new File(localSrc).listFiles()) {
+ dfs.copyFromLocalFile(new Path(f.getAbsolutePath()), dest);
+ }
+ }
+
+ /*
+ * Remove the local "actual" folder and any hdfs folders in use by this test
+ */
+ public void cleanUpOutput() throws IOException {
+ // local cleanup
+ FileSystem lfs = FileSystem.getLocal(new Configuration());
+ if (lfs.exists(new Path(ACTUAL_ROOT))) {
+ lfs.delete(new Path(ACTUAL_ROOT), true);
+ }
+ // dfs cleanup
+ for (String path : HDFS_PATHS) {
+ if (dfs.exists(new Path(path))) {
+ dfs.delete(new Path(path), true);
+ }
+ }
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ cleanupHDFS();
+ }
+
+ protected static void cleanupHDFS() throws Exception {
+ dfsCluster.shutdown();
+ mrCluster.shutdown();
+ }
+
+}
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/JobRunStepByStepTestCase.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/JobRunStepByStepTestCase.java
new file mode 100644
index 0000000..09effa1
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/JobRunStepByStepTestCase.java
@@ -0,0 +1,166 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.graph.test;
+
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.FileUtil;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hdfs.MiniDFSCluster;
+import org.apache.hadoop.mapred.FileInputFormat;
+import org.apache.hadoop.mapred.FileOutputFormat;
+import org.apache.hadoop.mapred.JobConf;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import edu.uci.ics.genomix.hyracks.graph.driver.Driver;
+import edu.uci.ics.genomix.hyracks.graph.driver.Driver.Plan;
+import edu.uci.ics.genomix.hyracks.graph.job.GenomixJobConf;
+
+@SuppressWarnings("deprecation")
+public class JobRunStepByStepTestCase {
+ private static final int KmerSize = 3;
+ private static final int ReadLength = 7;
+ private static final String ACTUAL_RESULT_DIR = "actual";
+ private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
+
+ private static final String DATA_INPUT_PATH = "src/test/resources/data/lastesttest/LowSplitRepeat.txt";
+ private static final String HDFS_INPUT_PATH = "/webmap";
+ private static final String HDFS_OUTPUT_PATH = "/webmap_result";
+
+ private static final String DUMPED_RESULT = ACTUAL_RESULT_DIR + HDFS_OUTPUT_PATH + "/Test.txt";
+ 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;
+ private int numPartitionPerMachine = 2;
+
+ private Driver driver;
+
+ @Test
+ public void TestAll() throws Exception {
+// TestReader();
+// TestGroupby();
+ TestGroupbyUnMerged();
+ }
+
+
+ public void TestReader() throws Exception {
+ conf.set(GenomixJobConf.OUTPUT_FORMAT, GenomixJobConf.OUTPUT_FORMAT_TEXT);
+ cleanUpReEntry();
+ conf.set(GenomixJobConf.OUTPUT_FORMAT, GenomixJobConf.OUTPUT_FORMAT_TEXT);
+ driver.runJob(new GenomixJobConf(conf), Plan.CHECK_KMERREADER, true);
+ dumpResult();
+ }
+
+ public void TestGroupby() throws Exception {
+ conf.set(GenomixJobConf.OUTPUT_FORMAT, GenomixJobConf.OUTPUT_FORMAT_TEXT);
+ cleanUpReEntry();
+ conf.set(GenomixJobConf.GROUPBY_TYPE, GenomixJobConf.GROUPBY_TYPE_PRECLUSTER);
+ driver.runJob(new GenomixJobConf(conf), Plan.BUILD_DEBRUJIN_GRAPH, true);
+ dumpResult();
+ }
+
+ public void TestGroupbyUnMerged() throws Exception {
+ conf.set(GenomixJobConf.OUTPUT_FORMAT, GenomixJobConf.OUTPUT_FORMAT_TEXT);
+ cleanUpReEntry();
+ conf.set(GenomixJobConf.GROUPBY_TYPE, GenomixJobConf.GROUPBY_TYPE_PRECLUSTER);
+ driver.runJob(new GenomixJobConf(conf), Plan.BUILD_UNMERGED_GRAPH, true);
+ dumpResult();
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ cleanupStores();
+ edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.init();
+ FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
+ FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
+ startHDFS();
+
+ FileInputFormat.setInputPaths(conf, HDFS_INPUT_PATH);
+ FileOutputFormat.setOutputPath(conf, new Path(HDFS_OUTPUT_PATH));
+
+ conf.setInt(GenomixJobConf.KMER_LENGTH, KmerSize);
+ conf.setInt(GenomixJobConf.READ_LENGTH, ReadLength);
+ driver = new Driver(edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.CC_HOST,
+ edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.TEST_HYRACKS_CC_CLIENT_PORT, numPartitionPerMachine);
+ }
+
+ 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"));
+ }
+
+ 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);
+ Path src = new Path(DATA_INPUT_PATH);
+ Path dest = new Path(HDFS_INPUT_PATH);
+ dfs.mkdirs(dest);
+ // dfs.mkdirs(result);
+ dfs.copyFromLocalFile(src, dest);
+
+ DataOutputStream confOutput = new DataOutputStream(new FileOutputStream(new File(HADOOP_CONF_PATH)));
+ conf.writeXml(confOutput);
+ confOutput.flush();
+ confOutput.close();
+ }
+
+ private void cleanUpReEntry() throws IOException {
+ FileSystem lfs = FileSystem.getLocal(new Configuration());
+ if (lfs.exists(new Path(DUMPED_RESULT))) {
+ lfs.delete(new Path(DUMPED_RESULT), true);
+ }
+ FileSystem dfs = FileSystem.get(conf);
+ if (dfs.exists(new Path(HDFS_OUTPUT_PATH))) {
+ dfs.delete(new Path(HDFS_OUTPUT_PATH), true);
+ }
+ }
+
+ private void dumpResult() throws Exception {
+ String format = conf.get(GenomixJobConf.OUTPUT_FORMAT);
+ if (GenomixJobConf.OUTPUT_FORMAT_TEXT.equalsIgnoreCase(format)) {
+ FileUtil.copyMerge(FileSystem.get(conf), new Path(HDFS_OUTPUT_PATH),
+ FileSystem.getLocal(new Configuration()), new Path(DUMPED_RESULT), false, conf, null);
+ }
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.deinit();
+ cleanupHDFS();
+ }
+
+ private void cleanupHDFS() throws Exception {
+ dfsCluster.shutdown();
+ }
+}
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/ParameteredTestCaseForSet.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/ParameteredTestCaseForSet.java
new file mode 100644
index 0000000..508efe5
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/ParameteredTestCaseForSet.java
@@ -0,0 +1,186 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.graph.test;
+
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+
+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.FileInputFormat;
+import org.apache.hadoop.mapred.FileOutputFormat;
+import org.apache.hadoop.mapred.JobConf;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import edu.uci.ics.genomix.hadoop.graph.test.HadoopMiniClusterTest;
+import edu.uci.ics.genomix.hyracks.graph.driver.Driver;
+import edu.uci.ics.genomix.hyracks.graph.driver.Driver.Plan;
+import edu.uci.ics.genomix.hyracks.graph.job.GenomixJobConf;
+import edu.uci.ics.genomix.hyracks.graph.test.TestSet.DirType;
+
+@SuppressWarnings("deprecation")
+@RunWith(value = Parameterized.class)
+public class ParameteredTestCaseForSet {
+ public static final DirType testSetType = DirType.SPLITREPEAT;
+
+ public String dataPath;
+ public int KmerSize;
+
+ public ParameteredTestCaseForSet(String otherPath, String otherKmerSize) {
+ this.dataPath = otherPath;
+ this.KmerSize = Integer.parseInt(otherKmerSize);
+ }
+
+ @Parameters
+ public static Collection<Object[]> getdataPath() throws Exception {
+ Collection<Object[]> data = new ArrayList<Object[]>();
+ TestSet ts = new TestSet(testSetType);
+ String[] dirSet;
+ try {
+ dirSet = ts.getAllTestInputinDir();
+ for (String testDirPointer : dirSet) {
+ String[] paraForSTest = testDirPointer.split("_");
+ if(paraForSTest.length != 2)
+ throw new Exception("the number of paramters is not enough");
+ data.add(new Object[] { testDirPointer, paraForSTest[1].substring(1)});
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return data;
+ }
+
+ private static final String ACTUAL_RESULT_DIR = "actual";
+ private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
+ private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
+ private static final String HDFS_INPUT_PATH = "/webmap";
+ private static final String HDFS_OUTPUT_PATH = "/webmap_result";
+ private static final String EXPECTED_PATH = "expected";
+
+ private static MiniDFSCluster dfsCluster;
+ private static FileSystem dfs;
+ private static JobConf conf = new JobConf();
+ private static int numberOfNC = 2;
+ private static int numPartitionPerMachine = 2;
+ private static Driver driver;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ cleanupStores();
+ edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.init();
+ FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
+ FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
+ startHDFS();
+
+ driver = new Driver(edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.CC_HOST,
+ edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.TEST_HYRACKS_CC_CLIENT_PORT, numPartitionPerMachine);
+ }
+
+ private static 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);
+ dfs = FileSystem.get(conf);
+
+ TestSet ts = new TestSet(testSetType);
+ String [] dirSet = ts.getAllTestInputinDir();
+ for (String testDir : dirSet) {
+ File src = new File(testDir);
+ Path dest = new Path(HDFS_INPUT_PATH + File.separator + src.getName());
+ dfs.mkdirs(dest);
+ 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 static void cleanupStores() throws IOException {
+ FileUtils.forceMkdir(new File("teststore"));
+ FileUtils.forceMkdir(new File("build"));
+ FileUtils.cleanDirectory(new File("teststore"));
+ FileUtils.cleanDirectory(new File("build"));
+ }
+
+ private void waitawhile() throws InterruptedException {
+ synchronized (this) {
+ this.wait(20);
+ }
+ }
+
+ @Test
+ public void TestGroupbyUnMerged() throws Exception {
+ waitawhile();
+ cleanUpReEntry();
+ File src = new File(dataPath);
+ conf.setInt(GenomixJobConf.KMER_LENGTH, this.KmerSize);
+ FileInputFormat.setInputPaths(conf, HDFS_INPUT_PATH + File.separator + src.getName());
+ FileOutputFormat.setOutputPath(conf, new Path(HDFS_OUTPUT_PATH + File.separator + src.getName()));
+ conf.set(GenomixJobConf.OUTPUT_FORMAT, GenomixJobConf.OUTPUT_FORMAT_BINARY);
+ conf.set(GenomixJobConf.GROUPBY_TYPE, GenomixJobConf.GROUPBY_TYPE_PRECLUSTER);
+
+ driver.runJob(new GenomixJobConf(conf), Plan.BUILD_UNMERGED_GRAPH, true);
+ dumpResult();
+
+ Assert.assertEquals(true,
+ TestUtils.compareWithSortedResult(new File(ACTUAL_RESULT_DIR + File.separator +
+ File.separator + src.getName() + "/test.txt"), new File(EXPECTED_PATH + File.separator + src.getName() + ".txt")));
+ }
+
+ private void cleanUpReEntry() throws IOException {
+ File src = new File(dataPath);
+ if (dfs.exists(new Path(HDFS_OUTPUT_PATH + File.separator + src.getName()))) {
+ dfs.delete(new Path(HDFS_OUTPUT_PATH + File.separator + src.getName()), true);
+ }
+ }
+
+ public void dumpResult() throws IOException {
+ File src = new File(dataPath);
+ HadoopMiniClusterTest.copyResultsToLocal(HDFS_OUTPUT_PATH + File.separator + src.getName(), ACTUAL_RESULT_DIR + File.separator +
+ File.separator + src.getName() + "/test.txt", false, conf, true, dfs);
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.deinit();
+ cleanupHDFS();
+ }
+
+ private static void cleanupHDFS() throws Exception {
+ dfsCluster.shutdown();
+ }
+}
\ No newline at end of file
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/TestSet.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/TestSet.java
new file mode 100644
index 0000000..88326e1
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/TestSet.java
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+package edu.uci.ics.genomix.hyracks.graph.test;
+
+import java.io.File;
+import java.io.IOException;
+
+public class TestSet {
+
+ public final String PREFIX = "src/test/resources/input/sequence/";
+ public final String PATHMERGE = "pathmerge";
+ public final String TIP = "tip";
+ public final String BUBBLE = "bubble";
+ public final String SPLITREPEAT = "splitrepeat";
+ public final String BRIDGE = "bridge";
+
+ public final String[] SRSET = { "HighSplitRepeat", "MidSplitRepeat", "LowSplitRepeat" };
+ public final String[] TIPSET = { "Tips1", "Tips2", "Tips3", "Tips4" };
+
+ public static enum DirType {
+ PATHMERGE,
+ TIP,
+ BUBBLE,
+ SPLITREPEAT,
+ BRIDGE
+ }
+
+ private DirType testSet;
+
+ @SuppressWarnings("static-access")
+ public TestSet(DirType patternType) {
+ switch (patternType) {
+ case PATHMERGE:
+ testSet = patternType.PATHMERGE;
+ break;
+ case TIP:
+ testSet = patternType.TIP;
+ break;
+ case BUBBLE:
+ testSet = patternType.BUBBLE;
+ break;
+ case SPLITREPEAT:
+ testSet = patternType.SPLITREPEAT;
+ break;
+ case BRIDGE:
+ testSet = patternType.BRIDGE;
+ break;
+ }
+ }
+
+ public String[] getTestDir() {
+ switch (testSet) {
+ case PATHMERGE:
+ break;
+ case TIP:
+ return prepend(TIPSET, PREFIX + TIP + File.separator);
+ case BUBBLE:
+ break;
+ case SPLITREPEAT:
+ return prepend(SRSET, PREFIX + SPLITREPEAT + File.separator);
+ case BRIDGE:
+ break;
+ }
+ return null;
+ }
+
+ private String[] prepend(String[] input, String prepend) {
+ String[] output = new String[input.length];
+ for (int index = 0; index < input.length; index++) {
+ output[index] = prepend + input[index];
+ }
+ return output;
+ }
+
+ public String[] getAllTestInputinDir() throws IOException {
+ switch (testSet) {
+ case PATHMERGE:
+ break;
+ case TIP:
+ return detectAllTestSet(PREFIX + TIP);
+ case BUBBLE:
+ break;
+ case SPLITREPEAT:
+ return detectAllTestSet(PREFIX + SPLITREPEAT);
+ case BRIDGE:
+ break;
+ }
+ return null;
+ }
+
+ private String[] detectAllTestSet(String inputPrefix) throws IOException {
+ File src = new File(inputPrefix);
+ String[] output = new String[src.listFiles().length - 1];
+ int i = 0;
+ for (File f : src.listFiles()) {
+ if (!f.getName().contains(".DS_Store"))
+ output[i++] = f.getPath().toString();
+ }
+ System.out.println(output.length);
+ return output;
+ }
+}
diff --git a/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/TestUtils.java b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/TestUtils.java
new file mode 100644
index 0000000..7f82430
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/java/edu/uci/ics/genomix/hyracks/graph/test/TestUtils.java
@@ -0,0 +1,251 @@
+/*
+ * 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.
+ */
+
+package edu.uci.ics.genomix.hyracks.graph.test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Collections;
+
+public class TestUtils {
+ /**
+ * Compare with the sorted expected file.
+ * The actual file may not be sorted;
+ *
+ * @param expectedFile
+ * @param actualFile
+ */
+ @SuppressWarnings("finally")
+ public static boolean compareWithSortedResult(File expectedFile, File actualFile) throws Exception {
+ BufferedReader readerActual = new BufferedReader(new FileReader(actualFile));
+ BufferedReader readerExpected = new BufferedReader(new FileReader(expectedFile));
+ ArrayList<String> actualLines = new ArrayList<String>();
+ ArrayList<String> expectedLines = new ArrayList<String>();
+
+ String lineExpected, lineActual;
+ boolean flag = true;
+ try {
+ while ((lineActual = readerActual.readLine()) != null) {
+ actualLines.add(lineActual);
+ }
+ Collections.sort(actualLines);
+
+ while ((lineExpected = readerExpected.readLine()) != null) {
+ expectedLines.add(lineExpected);
+ }
+ Collections.sort(expectedLines);
+
+ int num = 0;
+ for (String actualLine : actualLines) {
+ lineExpected = expectedLines.get(num);
+ if (lineExpected == null) {
+ flag = false;
+ }
+ System.out.println(lineExpected);
+ System.out.println(actualLine);
+ if (!equalStrings(lineExpected, actualLine)) {
+ flag = false;
+ System.out.println(lineExpected);
+ System.out.println(actualLine);
+ }
+ ++num;
+ }
+ lineExpected = expectedLines.get(num);
+ if (lineExpected != null) {
+ flag = false;
+ }
+ } finally {
+ readerActual.close();
+ readerExpected.close();
+ return flag;
+ }
+ }
+
+ public static void compareWithUnSortedPosition(File expectedFile, File actualFile, int[] poslistField)
+ throws Exception {
+ BufferedReader readerActual = new BufferedReader(new FileReader(actualFile));
+ BufferedReader readerExpected = new BufferedReader(new FileReader(expectedFile));
+ ArrayList<String> actualLines = new ArrayList<String>();
+ String lineExpected, lineActual;
+ try {
+ while ((lineActual = readerActual.readLine()) != null) {
+ actualLines.add(lineActual);
+ }
+ Collections.sort(actualLines);
+ int num = 1;
+ for (String actualLine : actualLines) {
+ lineExpected = readerExpected.readLine();
+ if (lineExpected == null) {
+ throw new Exception("Actual result changed at line " + num + ":\n< " + actualLine + "\n> ");
+ }
+ if (!containStrings(lineExpected, actualLine, poslistField)) {
+ throw new Exception("Result for changed at line " + num + ":\n< " + lineExpected + "\n> "
+ + actualLine);
+ }
+ ++num;
+ }
+ lineExpected = readerExpected.readLine();
+ if (lineExpected != null) {
+ throw new Exception("Actual result changed at line " + num + ":\n< \n> " + lineExpected);
+ }
+ } finally {
+ readerActual.close();
+ readerExpected.close();
+ }
+ }
+
+ @SuppressWarnings({ "resource", "finally" })
+ public static void compareWithResult(File expectedFile, File actualFile) throws Exception {
+ BufferedReader readerExpected = new BufferedReader(new FileReader(expectedFile));
+ BufferedReader readerActual = new BufferedReader(new FileReader(actualFile));
+ String lineExpected, lineActual;
+ int num = 1;
+
+ try {
+ while ((lineExpected = readerExpected.readLine()) != null) {
+ lineActual = readerActual.readLine();
+ // Assert.assertEquals(lineExpected, lineActual);
+ if (lineActual == null) {
+ throw new Exception("Actual result changed at line " + num + ":\n< " + lineExpected + "\n> ");
+ }
+ if (lineExpected.equalsIgnoreCase(lineActual)) {
+ throw new Exception("Result for changed at line " + num + ":\n< " + lineExpected + "\n> "
+ + lineActual);
+ }
+ ++num;
+ }
+ lineActual = readerActual.readLine();
+ if (lineActual != null) {
+ throw new Exception("Actual result changed at line " + num + ":\n< \n> " + lineActual);
+ }
+ } finally {
+ readerExpected.close();
+ readerActual.close();
+ }
+ }
+
+ private static boolean equalStrings(String s1, String s2) {
+ String[] rowsOne = s1.split("\n");
+ String[] rowsTwo = s2.split("\n");
+
+ if (rowsOne.length != rowsTwo.length)
+ return false;
+
+ for (int i = 0; i < rowsOne.length; i++) {
+ String row1 = rowsOne[i];
+ String row2 = rowsTwo[i];
+
+ if (row1.equals(row2))
+ continue;
+
+ String[] fields1 = row1.split(",");
+ String[] fields2 = row2.split(",");
+
+ for (int j = 0; j < fields1.length; j++) {
+ if (fields1[j].equals(fields2[j])) {
+ continue;
+ } else if (fields1[j].indexOf('.') < 0) {
+ return false;
+ } else {
+ fields1[j] = fields1[j].split("=")[1];
+ fields2[j] = fields2[j].split("=")[1];
+ Double double1 = Double.parseDouble(fields1[j]);
+ Double double2 = Double.parseDouble(fields2[j]);
+ float float1 = (float) double1.doubleValue();
+ float float2 = (float) double2.doubleValue();
+
+ if (Math.abs(float1 - float2) == 0)
+ continue;
+ else {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ private static boolean containStrings(String lineExpected, String actualLine, int[] poslistField) {
+ if (lineExpected.equals(actualLine)) {
+ return true;
+ }
+ String[] fieldsExp = lineExpected.split("\\\t");
+ String[] fieldsAct = actualLine.split("\\\t");
+ if (fieldsAct.length != fieldsExp.length) {
+ return false;
+ }
+ for (int i = 0; i < fieldsAct.length; i++) {
+ boolean cont = false;
+ for (int x : poslistField) {
+ if (i == x) {
+ cont = true;
+ break;
+ }
+ }
+ if (cont) {
+ continue;
+ }
+ if (!fieldsAct[i].equals(fieldsExp[i])) {
+ return false;
+ }
+ }
+
+ ArrayList<String> posExp = new ArrayList<String>();
+ ArrayList<String> posAct = new ArrayList<String>();
+
+ for (int x : poslistField) {
+ String valueExp = lineExpected.split("\\\t")[x];
+ for (int i = 1; i < valueExp.length() - 1;) {
+ if (valueExp.charAt(i) == '(') {
+ String str = "";
+ i++;
+ while (i < valueExp.length() - 1 && valueExp.charAt(i) != ')') {
+ str += valueExp.charAt(i);
+ i++;
+ }
+ posExp.add(str);
+ }
+ i++;
+ }
+ String valueAct = actualLine.split("\\\t")[x];
+ for (int i = 1; i < valueAct.length() - 1;) {
+ if (valueAct.charAt(i) == '(') {
+ String str = "";
+ i++;
+ while (i < valueAct.length() - 1 && valueAct.charAt(i) != ')') {
+ str += valueAct.charAt(i);
+ i++;
+ }
+ posAct.add(str);
+ }
+ i++;
+ }
+
+ if (posExp.size() != posAct.size()) {
+ return false;
+ }
+ Collections.sort(posExp);
+ Collections.sort(posAct);
+ for (int i = 0; i < posExp.size(); i++) {
+ if (!posExp.get(i).equals(posAct.get(i))) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/genomix/genomix-hyracks/src/test/resources/data/lastesttest/LowSplitRepeat.txt b/genomix/genomix-hyracks/src/test/resources/data/lastesttest/LowSplitRepeat.txt
new file mode 100644
index 0000000..259fd80
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/data/lastesttest/LowSplitRepeat.txt
@@ -0,0 +1,3 @@
+1 AGCCA
+2 AGCCG
+3 GCCTT
diff --git a/genomix/genomix-hyracks/src/test/resources/data/lastesttest/test.txt b/genomix/genomix-hyracks/src/test/resources/data/lastesttest/test.txt
new file mode 100644
index 0000000..1e16d68
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/data/lastesttest/test.txt
@@ -0,0 +1,2 @@
+1 CAGCCA
+2 GCCGTA
diff --git a/genomix/genomix-hyracks/src/test/resources/hadoop/conf/core-site.xml b/genomix/genomix-hyracks/src/test/resources/hadoop/conf/core-site.xml
new file mode 100644
index 0000000..3e5bacb
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/hadoop/conf/core-site.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>fs.default.name</name>
+ <value>hdfs://127.0.0.1:31888</value>
+ </property>
+ <property>
+ <name>hadoop.tmp.dir</name>
+ <value>/tmp/hadoop</value>
+ </property>
+
+
+</configuration>
diff --git a/genomix/genomix-hyracks/src/test/resources/hadoop/conf/hdfs-site.xml b/genomix/genomix-hyracks/src/test/resources/hadoop/conf/hdfs-site.xml
new file mode 100644
index 0000000..b1b1902
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/hadoop/conf/hdfs-site.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>dfs.replication</name>
+ <value>1</value>
+ </property>
+
+ <property>
+ <name>dfs.block.size</name>
+ <value>65536</value>
+ </property>
+
+</configuration>
diff --git a/genomix/genomix-hyracks/src/test/resources/hadoop/conf/log4j.properties b/genomix/genomix-hyracks/src/test/resources/hadoop/conf/log4j.properties
new file mode 100755
index 0000000..d5e6004
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/hadoop/conf/log4j.properties
@@ -0,0 +1,94 @@
+# Define some default values that can be overridden by system properties
+hadoop.root.logger=FATAL,console
+hadoop.log.dir=.
+hadoop.log.file=hadoop.log
+
+# Define the root logger to the system property "hadoop.root.logger".
+log4j.rootLogger=${hadoop.root.logger}, EventCounter
+
+# Logging Threshold
+log4j.threshhold=FATAL
+
+#
+# Daily Rolling File Appender
+#
+
+log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Rollver at midnight
+log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
+
+# 30-day backup
+#log4j.appender.DRFA.MaxBackupIndex=30
+log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
+
+# Pattern format: Date LogLevel LoggerName LogMessage
+log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+# Debugging Pattern format
+#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+
+#
+# console
+# Add "console" to rootlogger above if you want to use this
+#
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.err
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
+
+#
+# TaskLog Appender
+#
+
+#Default values
+hadoop.tasklog.taskid=null
+hadoop.tasklog.noKeepSplits=4
+hadoop.tasklog.totalLogFileSize=100
+hadoop.tasklog.purgeLogSplits=true
+hadoop.tasklog.logsRetainHours=12
+
+log4j.appender.TLA=org.apache.hadoop.mapred.TaskLogAppender
+log4j.appender.TLA.taskId=${hadoop.tasklog.taskid}
+log4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}
+
+log4j.appender.TLA.layout=org.apache.log4j.PatternLayout
+log4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+
+#
+# Rolling File Appender
+#
+
+#log4j.appender.RFA=org.apache.log4j.RollingFileAppender
+#log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Logfile size and and 30-day backups
+#log4j.appender.RFA.MaxFileSize=1MB
+#log4j.appender.RFA.MaxBackupIndex=30
+
+#log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+#
+# FSNamesystem Audit logging
+# All audit events are logged at INFO level
+#
+log4j.logger.org.apache.hadoop.fs.FSNamesystem.audit=WARN
+
+# Custom Logging levels
+
+#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG
+#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG
+#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG
+
+# Jets3t library
+log4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR
+
+#
+# Event Counter Appender
+# Sends counts of logging messages at different severity levels to Hadoop Metrics.
+#
+log4j.appender.EventCounter=org.apache.hadoop.metrics.jvm.EventCounter
diff --git a/genomix/genomix-hyracks/src/test/resources/hadoop/conf/mapred-site.xml b/genomix/genomix-hyracks/src/test/resources/hadoop/conf/mapred-site.xml
new file mode 100644
index 0000000..525e7d5
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/hadoop/conf/mapred-site.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>mapred.job.tracker</name>
+ <value>localhost:29007</value>
+ </property>
+ <property>
+ <name>mapred.tasktracker.map.tasks.maximum</name>
+ <value>20</value>
+ </property>
+ <property>
+ <name>mapred.tasktracker.reduce.tasks.maximum</name>
+ <value>20</value>
+ </property>
+ <property>
+ <name>mapred.max.split.size</name>
+ <value>2048</value>
+ </property>
+
+</configuration>
diff --git a/genomix/genomix-hyracks/src/test/resources/input/sequence/splitrepeat/HighSplitRepeat_k3/HighSplitRepeat_k3.txt b/genomix/genomix-hyracks/src/test/resources/input/sequence/splitrepeat/HighSplitRepeat_k3/HighSplitRepeat_k3.txt
new file mode 100644
index 0000000..eca0a13
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/input/sequence/splitrepeat/HighSplitRepeat_k3/HighSplitRepeat_k3.txt
@@ -0,0 +1,3 @@
+1 AGCCACA
+2 GCACTTT
+3 CGCCGTC
diff --git a/genomix/genomix-hyracks/src/test/resources/input/sequence/splitrepeat/LowSplitRepeat_k3/LowSplitRepeat_k3.txt b/genomix/genomix-hyracks/src/test/resources/input/sequence/splitrepeat/LowSplitRepeat_k3/LowSplitRepeat_k3.txt
new file mode 100644
index 0000000..259fd80
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/input/sequence/splitrepeat/LowSplitRepeat_k3/LowSplitRepeat_k3.txt
@@ -0,0 +1,3 @@
+1 AGCCA
+2 AGCCG
+3 GCCTT
diff --git a/genomix/genomix-hyracks/src/test/resources/input/sequence/splitrepeat/MidSplitRepeat_k3/MidSplitRepeat_k3.txt b/genomix/genomix-hyracks/src/test/resources/input/sequence/splitrepeat/MidSplitRepeat_k3/MidSplitRepeat_k3.txt
new file mode 100644
index 0000000..e934e54
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/input/sequence/splitrepeat/MidSplitRepeat_k3/MidSplitRepeat_k3.txt
@@ -0,0 +1,3 @@
+1 AGCCA
+2 CGCCT
+3 GCCGG
diff --git a/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips1/Tips1.txt b/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips1/Tips1.txt
new file mode 100644
index 0000000..1e16d68
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips1/Tips1.txt
@@ -0,0 +1,2 @@
+1 CAGCCA
+2 GCCGTA
diff --git a/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips2/Tips2.txt b/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips2/Tips2.txt
new file mode 100644
index 0000000..8109730
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips2/Tips2.txt
@@ -0,0 +1,2 @@
+1 ACAGCG
+2 GGCGAA
diff --git a/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips3/Tips3.txt b/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips3/Tips3.txt
new file mode 100644
index 0000000..a672034
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips3/Tips3.txt
@@ -0,0 +1,2 @@
+1 CAGCCT
+2 CAGCCA
diff --git a/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips4/Tips4.txt b/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips4/Tips4.txt
new file mode 100644
index 0000000..499e8e6
--- /dev/null
+++ b/genomix/genomix-hyracks/src/test/resources/input/sequence/tip/Tips4/Tips4.txt
@@ -0,0 +1,2 @@
+1 CAGGCA
+2 CAGGCC
diff --git a/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/.test.txt.binmerge.crc b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/.test.txt.binmerge.crc
new file mode 100644
index 0000000..76d1e10
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/.test.txt.binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/bin/.part-00000.crc
new file mode 100644
index 0000000..48e0f4c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/bin/part-00000
new file mode 100755
index 0000000..8a60ae8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/graphviz/result.ps
new file mode 100644
index 0000000..55ef1ea
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/graphviz/result.ps
@@ -0,0 +1,499 @@
+%!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 516 148
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 480 112 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 0 moveto
+138 104 lineto
+194 104 lineto
+194 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 78 moveto
+194 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 52 moveto
+194 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+146 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 26 moveto
+194 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.26 52 moveto
+76.82 52 104.89 52 127.5 52 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 127.78 55.5 moveto
+137.78 52 lineto
+127.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 127.78 55.5 moveto
+137.78 52 lineto
+127.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 137.51 35.99 moveto
+131.87 33.51 125.87 31.33 120 30 curveto
+100.06 25.48 93.94 25.48 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 35.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 0 moveto
+276 104 lineto
+332 104 lineto
+332 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290 87.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 78 moveto
+332 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 52 moveto
+332 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+284 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 26 moveto
+332 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 194.26 52 moveto
+214.82 52 242.89 52 265.5 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 265.78 55.5 moveto
+275.78 52 lineto
+265.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 265.78 55.5 moveto
+275.78 52 lineto
+265.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 57.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 275.83 38.35 moveto
+270.06 36.13 263.93 34.18 258 33 curveto
+237.95 29.02 232.05 29.02 212 33 curveto
+209.31 33.53 206.58 34.23 203.87 35.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 202.5 31.8 moveto
+194.17 38.35 lineto
+204.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 202.5 31.8 moveto
+194.17 38.35 lineto
+204.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 38.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+429.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 78 moveto
+472 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+425.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 52 moveto
+472 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 26 moveto
+472 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 332.33 52 moveto
+353.39 52 382.37 52 405.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 405.71 55.5 moveto
+415.71 52 lineto
+405.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 405.71 55.5 moveto
+415.71 52 lineto
+405.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+350 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 415.51 35.99 moveto
+409.87 33.51 403.87 31.33 398 30 curveto
+377.2 25.28 370.8 25.28 350 30 curveto
+347.34 30.6 344.65 31.38 341.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 340.53 29.09 moveto
+332.49 35.99 lineto
+343.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 340.53 29.09 moveto
+332.49 35.99 lineto
+343.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+351.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 516 148
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/test.txt b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/test.txt
new file mode 100644
index 0000000..a27ea1d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BFSTraverse/4/test.txt
@@ -0,0 +1,4 @@
+AGA {[] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/BridgeAdd/TwoLines/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/BridgeAdd/TwoLines/bin/part-00000
new file mode 100755
index 0000000..778796a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BridgeAdd/TwoLines/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BridgeAdd/TwoLines/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/BridgeAdd/TwoLines/graphviz/result.ps
new file mode 100644
index 0000000..e9a3afb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BridgeAdd/TwoLines/graphviz/result.ps
@@ -0,0 +1,630 @@
+%!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 380 392
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 344 356 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 148.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 209.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+196 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 56.1 141.19 moveto
+61.69 145.67 67.77 149.85 74 153 curveto
+91.22 161.7 112.01 166.82 129.65 169.83 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 174.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+149.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 100.66 moveto
+77.68 91.35 107.16 78.51 130.47 68.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 97.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 139.97 143.29 moveto
+134.42 138.58 128.33 134.22 122 131 curveto
+104.79 122.25 83.84 117.73 66.09 115.41 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 136.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.77 45.66 moveto
+120.27 42.75 94.3 41.88 74 52 curveto
+70.36 53.81 66.94 56.06 63.73 58.62 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.19 56.21 moveto
+56.19 65.55 lineto
+65.92 61.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.19 56.21 moveto
+56.19 65.55 lineto
+65.92 61.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 57.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CAC
+gsave
+0 0 0.75294 nodecolor
+newpath 0 243 moveto
+0 347 lineto
+56 347 lineto
+56 243 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 243 moveto
+0 347 lineto
+56 347 lineto
+56 243 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 330.4 moveto 30 (CAC) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 321 moveto
+56 321 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 304.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 295 moveto
+56 295 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 278.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 269 moveto
+56 269 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 252.4 moveto 23 (1.0) alignedtext
+grestore
+% ACG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 244 moveto
+140 348 lineto
+196 348 lineto
+196 244 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 331.4 moveto 31 (ACG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 322 moveto
+196 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 305.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 296 moveto
+196 296 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 279.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 270 moveto
+196 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 253.4 moveto 23 (1.0) alignedtext
+grestore
+% CAC->ACG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.33 295.2 moveto
+77.39 295.35 106.37 295.56 129.53 295.73 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.69 299.23 moveto
+139.71 295.8 lineto
+129.74 292.23 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.69 299.23 moveto
+139.71 295.8 lineto
+129.74 292.23 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 301.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% ACG->CAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.51 279.99 moveto
+133.87 277.51 127.87 275.33 122 274 curveto
+101.2 269.28 94.85 269.47 74 274 curveto
+71.19 274.61 68.34 275.41 65.51 276.34 curveto
+stroke
+0 1 1 edgecolor
+newpath 64.17 273.11 moveto
+56.05 279.92 lineto
+66.64 279.65 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 64.17 273.11 moveto
+56.05 279.92 lineto
+66.64 279.65 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 279.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 243 moveto
+280 347 lineto
+336 347 lineto
+336 243 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292.5 330.4 moveto 31 (CGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 321 moveto
+336 321 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 304.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 295 moveto
+336 295 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 278.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 269 moveto
+336 269 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 252.4 moveto 23 (1.0) alignedtext
+grestore
+% ACG->CGC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.33 295.8 moveto
+217.39 295.65 246.37 295.44 269.53 295.27 curveto
+stroke
+0 0 0 edgecolor
+newpath 269.74 298.77 moveto
+279.71 295.2 lineto
+269.69 291.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 269.74 298.77 moveto
+279.71 295.2 lineto
+269.69 291.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 301.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CGC->ACG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 279.83 281.35 moveto
+274.06 279.13 267.93 277.18 262 276 curveto
+241.07 271.85 234.89 271.66 214 276 curveto
+211.2 276.58 208.37 277.34 205.55 278.23 curveto
+stroke
+0 1 1 edgecolor
+newpath 204.33 274.95 moveto
+196.11 281.63 lineto
+206.71 281.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 204.33 274.95 moveto
+196.11 281.63 lineto
+206.71 281.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 281.4 moveto 48 (RR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 380 392
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/BridgeAdd/TwoLines/test.txt b/genomix/genomix-pregelix/data/TestSet/BridgeAdd/TwoLines/test.txt
new file mode 100644
index 0000000..782ec3f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BridgeAdd/TwoLines/test.txt
@@ -0,0 +1,6 @@
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [] [] {5':[], ~5':[]} 1.0x}
+CAC {[{ACG:[2]}] [] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+CGC {[] [] [] [{ACG:[2]}] {5':[], ~5':[]} 1.0x}
+ACG {[{CGC:[2]}] [] [] [{CAC:[2]}] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/.txt.crc" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/.txt.crc"
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/.txt.crc"
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-0.crc" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-0.crc"
new file mode 100644
index 0000000..6f78521
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-0.crc"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-1.crc" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-1.crc"
new file mode 100644
index 0000000..e17ae5c
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-1.crc"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-2.crc" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-2.crc"
new file mode 100644
index 0000000..2b0a3e3
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-2.crc"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-3.crc" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-3.crc"
new file mode 100644
index 0000000..a946147
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-3.crc"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-4.crc" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-4.crc"
new file mode 100644
index 0000000..266a349
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-4.crc"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-5.crc" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-5.crc"
new file mode 100644
index 0000000..c0ea74c
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-5.crc"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-6.crc" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-6.crc"
new file mode 100644
index 0000000..c8b60f0
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-6.crc"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-7.crc" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-7.crc"
new file mode 100644
index 0000000..644b44c
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/.part-7.crc"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-0" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-0"
new file mode 100755
index 0000000..b101f75
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-0"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-1" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-1"
new file mode 100755
index 0000000..f77d870
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-1"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-2" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-2"
new file mode 100755
index 0000000..7e1b65c
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-2"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-3" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-3"
new file mode 100755
index 0000000..68c7326
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-3"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-4" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-4"
new file mode 100755
index 0000000..988aecc
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-4"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-5" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-5"
new file mode 100755
index 0000000..8891b5c
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-5"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-6" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-6"
new file mode 100755
index 0000000..f655678
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-6"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-7" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-7"
new file mode 100755
index 0000000..37c0e0f
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/bin/part-7"
Binary files differ
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/graphviz/result.ps" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/graphviz/result.ps"
new file mode 100644
index 0000000..7a54b28
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/graphviz/result.ps"
@@ -0,0 +1,820 @@
+%!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 518 470
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 482 434 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 135 moveto
+0 265 lineto
+56 265 lineto
+56 135 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 248.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 239 moveto
+56 239 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 222.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 213 moveto
+56 213 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 196.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 187 moveto
+56 187 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 170.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 161 moveto
+56 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 144.4 moveto 28 (ATA) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 296 moveto
+140 426 lineto
+196 426 lineto
+196 296 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 409.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 400 moveto
+196 400 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 383.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 374 moveto
+196 374 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 357.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 348 moveto
+196 348 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 331.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 322 moveto
+196 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 305.4 moveto 28 (CTA) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 43.75 265.11 moveto
+50.66 283.55 60.41 302.52 74 317 curveto
+89.12 333.11 111.33 343.88 130.36 350.73 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 129.37 354.09 moveto
+139.96 353.97 lineto
+131.6 347.46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 129.37 354.09 moveto
+139.96 353.97 lineto
+131.6 347.46 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 352.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% GTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+140 278 lineto
+196 278 lineto
+196 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 261.4 moveto 29 (GTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 252 moveto
+196 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 226 moveto
+196 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 183.4 moveto 23 (0.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+165.5 157.4 moveto 5 ( ) alignedtext
+grestore
+% ATA->GTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 56.33 202.63 moveto
+77.39 204.59 106.37 207.28 129.53 209.43 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 129.43 212.93 moveto
+139.71 210.37 lineto
+130.08 205.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 129.43 212.93 moveto
+139.71 210.37 lineto
+130.08 205.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 213.4 moveto 46 (FR: [0]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 140 0 moveto
+140 130 lineto
+196 130 lineto
+196 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 130 lineto
+196 130 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 104 moveto
+196 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+149.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 9.4 moveto 29 (AAT) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 172.68 moveto
+78.25 151.55 108.73 122.15 132.32 99.41 curveto
+stroke
+0 1 1 edgecolor
+newpath 134.94 101.74 moveto
+139.71 92.28 lineto
+130.08 96.7 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 134.94 101.74 moveto
+139.71 92.28 lineto
+130.08 96.7 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 158.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 139.85 318.3 moveto
+134.17 310.38 128.08 302.3 122 295 curveto
+103.94 273.31 81.82 250.79 63.58 233.12 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 65.66 230.26 moveto
+56.02 225.86 lineto
+60.81 235.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 65.66 230.26 moveto
+56.02 225.86 lineto
+60.81 235.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 300.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% GTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 139.89 190.34 moveto
+134.26 186.91 128.17 183.89 122 182 curveto
+101.6 175.77 94.96 178.04 74 182 curveto
+71.33 182.5 68.61 183.16 65.9 183.92 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 64.65 180.65 moveto
+56.22 187.06 lineto
+66.81 187.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 64.65 180.65 moveto
+56.22 187.06 lineto
+66.81 187.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 187.4 moveto 46 (FR: [0]) alignedtext
+grestore
+% ACG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 147 moveto
+278 277 lineto
+334 277 lineto
+334 147 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290.5 260.4 moveto 31 (ACG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 251 moveto
+334 251 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 234.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 225 moveto
+334 225 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286 208.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 199 moveto
+334 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294.5 182.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 173 moveto
+334 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290.5 156.4 moveto 31 (ACG) alignedtext
+grestore
+% GTA->ACG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.26 212.8 moveto
+216.82 212.65 244.89 212.44 267.5 212.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 267.8 215.78 moveto
+277.78 212.2 lineto
+267.75 208.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 267.8 215.78 moveto
+277.78 212.2 lineto
+267.75 208.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 217.4 moveto 46 (RF: [0]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.86 66.39 moveto
+119.39 68.78 92.19 75.02 74 91 curveto
+63.38 100.33 55.15 112.51 48.79 125.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 45.45 124.22 moveto
+44.47 134.77 lineto
+51.82 127.14 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 45.45 124.22 moveto
+44.47 134.77 lineto
+51.82 127.14 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 96.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ACG->GTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 277.83 198.35 moveto
+272.06 196.13 265.93 194.18 260 193 curveto
+239.95 189.02 234.02 188.84 214 193 curveto
+211.2 193.58 208.37 194.34 205.55 195.23 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 204.33 191.95 moveto
+196.11 198.63 lineto
+206.71 198.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 204.33 191.95 moveto
+196.11 198.63 lineto
+206.71 198.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 198.4 moveto 46 (RF: [0]) alignedtext
+grestore
+% CGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 220 moveto
+418 350 lineto
+474 350 lineto
+474 220 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430.5 333.4 moveto 31 (CGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 324 moveto
+474 324 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 307.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 298 moveto
+474 298 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 281.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 272 moveto
+474 272 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 255.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 246 moveto
+474 246 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430.5 229.4 moveto 31 (CGC) alignedtext
+grestore
+% ACG->CGC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 334.22 247.18 moveto
+339.67 252.4 345.67 257.26 352 261 curveto
+368.85 270.95 389.77 276.81 407.59 280.25 curveto
+stroke
+0 0 0 edgecolor
+newpath 407.22 283.74 moveto
+417.68 282 lineto
+408.42 276.84 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 407.22 283.74 moveto
+417.68 282 lineto
+408.42 276.84 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+353.5 283.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CAC
+gsave
+0 0 0.75294 nodecolor
+newpath 418 72 moveto
+418 202 lineto
+474 202 lineto
+474 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 418 72 moveto
+418 202 lineto
+474 202 lineto
+474 72 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+431 185.4 moveto 30 (CAC) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 418 176 moveto
+474 176 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+427.5 159.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 418 150 moveto
+474 150 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 133.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 418 124 moveto
+474 124 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 107.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 418 98 moveto
+474 98 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+431 81.4 moveto 30 (CAC) alignedtext
+grestore
+% ACG->CAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 334.33 196.82 moveto
+355.77 185.34 385.42 169.45 408.78 156.94 curveto
+stroke
+0 1 1 edgecolor
+newpath 410.55 159.96 moveto
+417.71 152.15 lineto
+407.24 153.79 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 410.55 159.96 moveto
+417.71 152.15 lineto
+407.24 153.79 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 190.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CGC->ACG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 417.95 252.62 moveto
+412.4 247.53 406.32 242.73 400 239 curveto
+383 228.98 362.07 222.5 344.28 218.4 curveto
+stroke
+0 1 1 edgecolor
+newpath 344.73 214.92 moveto
+334.22 216.26 lineto
+343.27 221.76 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 344.73 214.92 moveto
+334.22 216.26 lineto
+343.27 221.76 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 244.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CAC->ACG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 417.81 132.13 moveto
+398.09 130.18 371.84 130.61 352 142 curveto
+348.06 144.26 344.4 147.01 341.01 150.1 curveto
+stroke
+0 0 0 edgecolor
+newpath 338.44 147.72 moveto
+334 157.33 lineto
+343.47 152.58 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 338.44 147.72 moveto
+334 157.33 lineto
+343.47 152.58 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+353.5 147.4 moveto 45 (FF: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 518 470
+end
+restore
+%%EOF
diff --git "a/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/txt" "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/txt"
new file mode 100755
index 0000000..fdebdee
--- /dev/null
+++ "b/genomix/genomix-pregelix/data/TestSet/BridgeRemove/GTA_up\050FR\051_down\050RF\051/txt"
@@ -0,0 +1,7 @@
+ATA {[] [{CTA:[1]}, {GTA:[0]}] [] [{AAT:[1]}] {5':[], ~5':[]}ATA 1.0x}
+ACG {[{CGC:[2]}] [] [{GTA:[0]}] [{CAC:[2]}] {5':[], ~5':[]}ACG 1.0x}
+GTA {[] [{ATA:[0]}] [{ACG:[0]}] [] {5':[], ~5':[]} 0.0x}
+CTA {[] [{ATA:[1]}] [] [] {5':[], ~5':[]}CTA 1.0x}
+CAC {[{ACG:[2]}] [] [] [] {5':[(2-0_0)], ~5':[]}CAC 1.0x}
+CGC {[] [] [] [{ACG:[2]}] {5':[], ~5':[]}CGC 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]}AAT 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleAdd/5/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/BubbleAdd/5/bin/part-00000
new file mode 100755
index 0000000..434239e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleAdd/5/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleAdd/5/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/BubbleAdd/5/graphviz/result.ps
new file mode 100644
index 0000000..4cdb861
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleAdd/5/graphviz/result.ps
@@ -0,0 +1,584 @@
+%!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 148
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 620 112 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 87.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 52 moveto
+77.39 52 106.37 52 129.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 35.99 moveto
+133.87 33.51 127.87 31.33 122 30 curveto
+101.2 25.28 94.8 25.28 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 0 moveto
+278 104 lineto
+334 104 lineto
+334 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 78 moveto
+334 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 52 moveto
+334 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 26 moveto
+334 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.26 52 moveto
+216.82 52 244.89 52 267.5 52 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 57.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 277.51 35.99 moveto
+271.87 33.51 265.87 31.33 260 30 curveto
+240.06 25.48 233.94 25.48 214 30 curveto
+211.34 30.6 208.65 31.38 205.99 32.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 35.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 87.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 78 moveto
+472 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 52 moveto
+472 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 26 moveto
+472 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 334.26 52 moveto
+354.82 52 382.89 52 405.5 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 405.78 55.5 moveto
+415.78 52 lineto
+405.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 405.78 55.5 moveto
+415.78 52 lineto
+405.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 57.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 415.83 38.35 moveto
+410.06 36.13 403.93 34.18 398 33 curveto
+377.95 29.02 372.05 29.02 352 33 curveto
+349.31 33.53 346.58 34.23 343.87 35.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 342.5 31.8 moveto
+334.17 38.35 lineto
+344.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 342.5 31.8 moveto
+334.17 38.35 lineto
+344.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 38.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 556 0 moveto
+556 104 lineto
+612 104 lineto
+612 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 0 moveto
+556 104 lineto
+612 104 lineto
+612 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+569.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 78 moveto
+612 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+565.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 52 moveto
+612 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+564 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 26 moveto
+612 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 472.33 52 moveto
+493.39 52 522.37 52 545.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 545.71 55.5 moveto
+555.71 52 lineto
+545.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 545.71 55.5 moveto
+555.71 52 lineto
+545.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+490 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 555.51 35.99 moveto
+549.87 33.51 543.87 31.33 538 30 curveto
+517.2 25.28 510.8 25.28 490 30 curveto
+487.34 30.6 484.65 31.38 481.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 480.53 29.09 moveto
+472.49 35.99 lineto
+483.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 480.53 29.09 moveto
+472.49 35.99 lineto
+483.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+491.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 656 148
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/BubbleAdd/5/test.txt b/genomix/genomix-pregelix/data/TestSet/BubbleAdd/5/test.txt
new file mode 100644
index 0000000..205a2f1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/BubbleAdd/5/test.txt
@@ -0,0 +1,5 @@
+GAA {[] [] [] [{AGA:[1]}] {5':[], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
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/data/TestSet/MapReduce/TwoBubbles/.txt.crc b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/.txt.crc
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-0.crc b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-0.crc
new file mode 100644
index 0000000..95b77c7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-1.crc b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-1.crc
new file mode 100644
index 0000000..abcbef3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-2.crc b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-2.crc
new file mode 100644
index 0000000..3442925
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-3.crc b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-3.crc
new file mode 100644
index 0000000..07c5a22
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-4.crc b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-4.crc
new file mode 100644
index 0000000..0bbcdc7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-5.crc b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-5.crc
new file mode 100644
index 0000000..9acb7e8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-6.crc b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-6.crc
new file mode 100644
index 0000000..d586ca1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-7.crc b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-7.crc
new file mode 100644
index 0000000..8cf5625
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-0 b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-0
new file mode 100755
index 0000000..0e3bb1c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-1 b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-1
new file mode 100755
index 0000000..3dea02e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-2 b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-2
new file mode 100755
index 0000000..0a02ad0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-3 b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-3
new file mode 100755
index 0000000..552db50
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-4 b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-4
new file mode 100755
index 0000000..af3baae
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-5 b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-5
new file mode 100755
index 0000000..1e484f5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-6 b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-6
new file mode 100755
index 0000000..315acfa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-7 b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-7
new file mode 100755
index 0000000..af45025
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/graphviz/result.ps
new file mode 100644
index 0000000..61fa3e4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/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/MapReduce/TwoBubbles/txt b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/txt
new file mode 100755
index 0000000..e5b5c58
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/MapReduce/TwoBubbles/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/data/TestSet/PathMerge/2/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/2/bin/part-00000
new file mode 100755
index 0000000..d3766af
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/2/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/2/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/2/graphviz/result.ps
new file mode 100644
index 0000000..3afc04f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/2/graphviz/result.ps
@@ -0,0 +1,329 @@
+%!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 240 148
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 204 112 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 87.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+149.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 52 moveto
+77.39 52 106.37 52 129.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 35.99 moveto
+133.87 33.51 127.87 31.33 122 30 curveto
+101.2 25.28 94.8 25.28 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 240 148
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/2/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/2/test.txt
new file mode 100644
index 0000000..51e1252
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/2/test.txt
@@ -0,0 +1,2 @@
+ATA {[] [] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/3/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/3/bin/part-00000
new file mode 100755
index 0000000..7a31cd9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/3/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/3/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/3/graphviz/result.ps
new file mode 100644
index 0000000..e720671
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/3/graphviz/result.ps
@@ -0,0 +1,413 @@
+%!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 240 270
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 204 234 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 148.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 209.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+196 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 56.1 141.19 moveto
+61.69 145.67 67.77 149.85 74 153 curveto
+91.22 161.7 112.01 166.82 129.65 169.83 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 173.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+149.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 100.66 moveto
+77.68 91.35 107.16 78.51 130.47 68.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 139.97 143.29 moveto
+134.42 138.58 128.33 134.22 122 131 curveto
+104.79 122.25 83.84 117.73 66.09 115.41 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 136.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.74 45.17 moveto
+120.24 41.97 94.26 40.8 74 51 curveto
+70.33 52.85 66.89 55.14 63.66 57.74 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 56.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 240 270
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/3/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/3/test.txt
new file mode 100644
index 0000000..d661685
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/3/test.txt
@@ -0,0 +1,3 @@
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/4/.test.txt.binmerge.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/4/.test.txt.binmerge.crc
new file mode 100644
index 0000000..fd1d21d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/4/.test.txt.binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/4/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/4/bin/part-00000
new file mode 100755
index 0000000..23817bd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/4/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/4/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/4/graphviz/result.ps
new file mode 100644
index 0000000..55ef1ea
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/4/graphviz/result.ps
@@ -0,0 +1,499 @@
+%!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 516 148
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 480 112 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 0 moveto
+138 104 lineto
+194 104 lineto
+194 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 78 moveto
+194 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 52 moveto
+194 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+146 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 26 moveto
+194 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.26 52 moveto
+76.82 52 104.89 52 127.5 52 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 127.78 55.5 moveto
+137.78 52 lineto
+127.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 127.78 55.5 moveto
+137.78 52 lineto
+127.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 137.51 35.99 moveto
+131.87 33.51 125.87 31.33 120 30 curveto
+100.06 25.48 93.94 25.48 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 35.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 0 moveto
+276 104 lineto
+332 104 lineto
+332 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290 87.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 78 moveto
+332 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 52 moveto
+332 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+284 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 26 moveto
+332 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 194.26 52 moveto
+214.82 52 242.89 52 265.5 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 265.78 55.5 moveto
+275.78 52 lineto
+265.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 265.78 55.5 moveto
+275.78 52 lineto
+265.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 57.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 275.83 38.35 moveto
+270.06 36.13 263.93 34.18 258 33 curveto
+237.95 29.02 232.05 29.02 212 33 curveto
+209.31 33.53 206.58 34.23 203.87 35.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 202.5 31.8 moveto
+194.17 38.35 lineto
+204.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 202.5 31.8 moveto
+194.17 38.35 lineto
+204.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 38.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+429.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 78 moveto
+472 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+425.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 52 moveto
+472 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 26 moveto
+472 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 332.33 52 moveto
+353.39 52 382.37 52 405.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 405.71 55.5 moveto
+415.71 52 lineto
+405.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 405.71 55.5 moveto
+415.71 52 lineto
+405.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+350 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 415.51 35.99 moveto
+409.87 33.51 403.87 31.33 398 30 curveto
+377.2 25.28 370.8 25.28 350 30 curveto
+347.34 30.6 344.65 31.38 341.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 340.53 29.09 moveto
+332.49 35.99 lineto
+343.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 340.53 29.09 moveto
+332.49 35.99 lineto
+343.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+351.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 516 148
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/4/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/4/test.txt
new file mode 100644
index 0000000..a27ea1d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/4/test.txt
@@ -0,0 +1,4 @@
+AGA {[] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/5/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/5/bin/part-00000
new file mode 100755
index 0000000..434239e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/5/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/5/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/5/graphviz/result.ps
new file mode 100644
index 0000000..4cdb861
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/5/graphviz/result.ps
@@ -0,0 +1,584 @@
+%!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 148
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 620 112 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 87.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 52 moveto
+77.39 52 106.37 52 129.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 35.99 moveto
+133.87 33.51 127.87 31.33 122 30 curveto
+101.2 25.28 94.8 25.28 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 0 moveto
+278 104 lineto
+334 104 lineto
+334 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 78 moveto
+334 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 52 moveto
+334 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 26 moveto
+334 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.26 52 moveto
+216.82 52 244.89 52 267.5 52 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 57.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 277.51 35.99 moveto
+271.87 33.51 265.87 31.33 260 30 curveto
+240.06 25.48 233.94 25.48 214 30 curveto
+211.34 30.6 208.65 31.38 205.99 32.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 35.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 87.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 78 moveto
+472 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 52 moveto
+472 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 26 moveto
+472 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 334.26 52 moveto
+354.82 52 382.89 52 405.5 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 405.78 55.5 moveto
+415.78 52 lineto
+405.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 405.78 55.5 moveto
+415.78 52 lineto
+405.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 57.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 415.83 38.35 moveto
+410.06 36.13 403.93 34.18 398 33 curveto
+377.95 29.02 372.05 29.02 352 33 curveto
+349.31 33.53 346.58 34.23 343.87 35.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 342.5 31.8 moveto
+334.17 38.35 lineto
+344.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 342.5 31.8 moveto
+334.17 38.35 lineto
+344.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 38.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 556 0 moveto
+556 104 lineto
+612 104 lineto
+612 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 0 moveto
+556 104 lineto
+612 104 lineto
+612 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+569.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 78 moveto
+612 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+565.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 52 moveto
+612 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+564 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 26 moveto
+612 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 472.33 52 moveto
+493.39 52 522.37 52 545.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 545.71 55.5 moveto
+555.71 52 lineto
+545.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 545.71 55.5 moveto
+555.71 52 lineto
+545.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+490 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 555.51 35.99 moveto
+549.87 33.51 543.87 31.33 538 30 curveto
+517.2 25.28 510.8 25.28 490 30 curveto
+487.34 30.6 484.65 31.38 481.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 480.53 29.09 moveto
+472.49 35.99 lineto
+483.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 480.53 29.09 moveto
+472.49 35.99 lineto
+483.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+491.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 656 148
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/5/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/5/test.txt
new file mode 100644
index 0000000..205a2f1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/5/test.txt
@@ -0,0 +1,5 @@
+GAA {[] [] [] [{AGA:[1]}] {5':[], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/6/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/6/bin/part-00000
new file mode 100755
index 0000000..8720184
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/6/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/6/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/6/graphviz/result.ps
new file mode 100644
index 0000000..5ec57d3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/6/graphviz/result.ps
@@ -0,0 +1,668 @@
+%!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 270
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 620 234 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 148.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 209.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+196 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.1 141.19 moveto
+61.69 145.67 67.77 149.85 74 153 curveto
+91.22 161.7 112.01 166.82 129.65 169.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 173.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 100.66 moveto
+77.68 91.35 107.16 78.51 130.47 68.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.97 143.29 moveto
+134.42 138.58 128.33 134.22 122 131 curveto
+104.79 122.25 83.84 117.73 66.09 115.41 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 136.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.74 45.17 moveto
+120.24 41.97 94.26 40.8 74 51 curveto
+70.33 52.85 66.89 55.14 63.66 57.74 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 56.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 0 moveto
+278 104 lineto
+334 104 lineto
+334 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 78 moveto
+334 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 52 moveto
+334 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 26 moveto
+334 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.26 52 moveto
+216.82 52 244.89 52 267.5 52 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 57.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 277.51 35.99 moveto
+271.87 33.51 265.87 31.33 260 30 curveto
+240.06 25.48 233.94 25.48 214 30 curveto
+211.34 30.6 208.65 31.38 205.99 32.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 35.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 87.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 78 moveto
+472 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 52 moveto
+472 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 26 moveto
+472 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 334.26 52 moveto
+354.82 52 382.89 52 405.5 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 405.78 55.5 moveto
+415.78 52 lineto
+405.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 405.78 55.5 moveto
+415.78 52 lineto
+405.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 57.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 415.83 38.35 moveto
+410.06 36.13 403.93 34.18 398 33 curveto
+377.95 29.02 372.05 29.02 352 33 curveto
+349.31 33.53 346.58 34.23 343.87 35.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 342.5 31.8 moveto
+334.17 38.35 lineto
+344.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 342.5 31.8 moveto
+334.17 38.35 lineto
+344.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 38.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 556 0 moveto
+556 104 lineto
+612 104 lineto
+612 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 0 moveto
+556 104 lineto
+612 104 lineto
+612 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+569.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 78 moveto
+612 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+565.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 52 moveto
+612 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+564 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 26 moveto
+612 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 472.33 52 moveto
+493.39 52 522.37 52 545.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 545.71 55.5 moveto
+555.71 52 lineto
+545.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 545.71 55.5 moveto
+555.71 52 lineto
+545.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+490 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 555.51 35.99 moveto
+549.87 33.51 543.87 31.33 538 30 curveto
+517.2 25.28 510.8 25.28 490 30 curveto
+487.34 30.6 484.65 31.38 481.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 480.53 29.09 moveto
+472.49 35.99 lineto
+483.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 480.53 29.09 moveto
+472.49 35.99 lineto
+483.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+491.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 656 270
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/6/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/6/test.txt
new file mode 100644
index 0000000..05ae8df
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/6/test.txt
@@ -0,0 +1,6 @@
+GAA {[{AAC:[1]}] [] [] [{AGA:[1]}] {5':[], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAC {[] [] [] [{GAA:[1]}] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/7/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/7/bin/part-00000
new file mode 100755
index 0000000..d44f5c9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/7/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/7/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/7/graphviz/result.ps
new file mode 100644
index 0000000..2ad8368
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/7/graphviz/result.ps
@@ -0,0 +1,752 @@
+%!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 658 285
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 622 249 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 148.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 209.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+196 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.1 141.19 moveto
+61.69 145.67 67.77 149.85 74 153 curveto
+91.22 161.7 112.01 166.82 129.65 169.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 173.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 100.66 moveto
+77.68 91.35 107.16 78.51 130.47 68.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.97 143.29 moveto
+134.42 138.58 128.33 134.22 122 131 curveto
+104.79 122.25 83.84 117.73 66.09 115.41 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 136.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ACT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 137 moveto
+280 241 lineto
+336 241 lineto
+336 137 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+293.5 224.4 moveto 29 (ACT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 215 moveto
+336 215 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 198.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 189 moveto
+336 189 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 172.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 163 moveto
+336 163 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 146.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->ACT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.33 177.04 moveto
+217.39 179.29 246.37 182.4 269.53 184.88 curveto
+stroke
+0 0 0 edgecolor
+newpath 269.4 188.38 moveto
+279.71 185.97 lineto
+270.14 181.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 269.4 188.38 moveto
+279.71 185.97 lineto
+270.14 181.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 188.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.74 45.17 moveto
+120.24 41.97 94.26 40.8 74 51 curveto
+70.33 52.85 66.89 55.14 63.66 57.74 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 56.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 10 moveto
+280 114 lineto
+336 114 lineto
+336 10 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 97.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 88 moveto
+336 88 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 71.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 62 moveto
+336 62 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 45.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 36 moveto
+336 36 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 19.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.17 65.65 moveto
+201.94 67.87 208.07 69.82 214 71 curveto
+232.11 74.59 252.48 73.28 269.61 70.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 270.55 74.08 moveto
+279.82 68.94 lineto
+269.37 67.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 270.55 74.08 moveto
+279.82 68.94 lineto
+269.37 67.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215 78.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 279.55 52.65 moveto
+273.8 51.13 267.75 49.8 262 49 curveto
+243.78 46.48 223.4 46.75 206.29 47.86 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 205.81 44.38 moveto
+196.1 48.63 lineto
+206.34 51.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 205.81 44.38 moveto
+196.1 48.63 lineto
+206.34 51.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215 54.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 10 moveto
+418 114 lineto
+474 114 lineto
+474 10 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 97.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 88 moveto
+474 88 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 71.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 62 moveto
+474 62 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 45.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 36 moveto
+474 36 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 19.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.26 62 moveto
+356.82 62 384.89 62 407.5 62 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 407.78 65.5 moveto
+417.78 62 lineto
+407.78 58.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 407.78 65.5 moveto
+417.78 62 lineto
+407.78 58.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 67.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.83 48.35 moveto
+412.06 46.13 405.93 44.18 400 43 curveto
+379.95 39.02 374.05 39.02 354 43 curveto
+351.31 43.53 348.58 44.23 345.87 45.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 344.5 41.8 moveto
+336.17 48.35 lineto
+346.76 48.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 344.5 41.8 moveto
+336.17 48.35 lineto
+346.76 48.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 48.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 558 10 moveto
+558 114 lineto
+614 114 lineto
+614 10 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 10 moveto
+558 114 lineto
+614 114 lineto
+614 10 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+571.5 97.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 88 moveto
+614 88 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+567.5 71.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 62 moveto
+614 62 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 45.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 36 moveto
+614 36 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 19.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 474.33 62 moveto
+495.39 62 524.37 62 547.53 62 curveto
+stroke
+0 1 1 edgecolor
+newpath 547.71 65.5 moveto
+557.71 62 lineto
+547.71 58.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 547.71 65.5 moveto
+557.71 62 lineto
+547.71 58.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 67.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 557.51 45.99 moveto
+551.87 43.51 545.87 41.33 540 40 curveto
+519.2 35.28 512.8 35.28 492 40 curveto
+489.34 40.6 486.65 41.38 483.99 42.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 482.53 39.09 moveto
+474.49 45.99 lineto
+485.08 45.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 482.53 39.09 moveto
+474.49 45.99 lineto
+485.08 45.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 45.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ACT->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 279.97 165.62 moveto
+274.33 162.07 268.22 158.95 262 157 curveto
+244.01 151.36 223.46 154.08 206.17 158.85 curveto
+stroke
+0 1 1 edgecolor
+newpath 204.94 155.56 moveto
+196.41 161.85 lineto
+207 162.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 204.94 155.56 moveto
+196.41 161.85 lineto
+207 162.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 162.4 moveto 48 (RR: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 658 285
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/7/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/7/test.txt
new file mode 100644
index 0000000..327d1a8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/7/test.txt
@@ -0,0 +1,7 @@
+GAA {[{AAC:[1]}] [] [] [{AGA:[1]}] {5':[], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAC {[{ACT:[1]}] [] [] [{GAA:[1]}] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+ACT {[] [] [] [{AAC:[1]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/8/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/8/bin/part-00000
new file mode 100755
index 0000000..9f410e3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/8/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/8/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/8/graphviz/result.ps
new file mode 100644
index 0000000..ddedbd6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/8/graphviz/result.ps
@@ -0,0 +1,838 @@
+%!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 658 295
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 622 259 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 148.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 209.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+196 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.1 141.19 moveto
+61.69 145.67 67.77 149.85 74 153 curveto
+91.22 161.7 112.01 166.82 129.65 169.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 173.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 100.66 moveto
+77.68 91.35 107.16 78.51 130.47 68.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.97 143.29 moveto
+134.42 138.58 128.33 134.22 122 131 curveto
+104.79 122.25 83.84 117.73 66.09 115.41 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 136.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ACT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 132 moveto
+280 236 lineto
+336 236 lineto
+336 132 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+293.5 219.4 moveto 29 (ACT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 210 moveto
+336 210 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 193.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 184 moveto
+336 184 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 167.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 158 moveto
+336 158 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 141.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->ACT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.33 176.02 moveto
+217.39 177.53 246.37 179.6 269.53 181.25 curveto
+stroke
+0 0 0 edgecolor
+newpath 269.49 184.76 moveto
+279.71 181.98 lineto
+269.99 177.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 269.49 184.76 moveto
+279.71 181.98 lineto
+269.99 177.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 185.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.74 45.17 moveto
+120.24 41.97 94.26 40.8 74 51 curveto
+70.33 52.85 66.89 55.14 63.66 57.74 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 56.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 10 moveto
+280 114 lineto
+336 114 lineto
+336 10 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 97.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 88 moveto
+336 88 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 71.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 62 moveto
+336 62 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 45.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 36 moveto
+336 36 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 19.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.17 65.65 moveto
+201.94 67.87 208.07 69.82 214 71 curveto
+232.11 74.59 252.48 73.28 269.61 70.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 270.55 74.08 moveto
+279.82 68.94 lineto
+269.37 67.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 270.55 74.08 moveto
+279.82 68.94 lineto
+269.37 67.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215 78.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 279.55 52.65 moveto
+273.8 51.13 267.75 49.8 262 49 curveto
+243.78 46.48 223.4 46.75 206.29 47.86 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 205.81 44.38 moveto
+196.1 48.63 lineto
+206.34 51.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 205.81 44.38 moveto
+196.1 48.63 lineto
+206.34 51.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215 54.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 20 moveto
+418 124 lineto
+474 124 lineto
+474 20 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 107.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 98 moveto
+474 98 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 81.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 72 moveto
+474 72 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 55.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 46 moveto
+474 46 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 29.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.17 75.65 moveto
+341.94 77.87 348.07 79.82 354 81 curveto
+371.47 84.47 391.08 83.24 407.69 80.73 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 408.34 84.17 moveto
+417.6 79.04 lineto
+407.16 77.27 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 408.34 84.17 moveto
+417.6 79.04 lineto
+407.16 77.27 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 88.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.9 65.66 moveto
+412.02 64.57 405.83 63.6 400 63 curveto
+382.53 61.21 363.1 60.77 346.62 60.86 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 346.22 57.36 moveto
+336.26 60.98 lineto
+346.3 64.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 346.22 57.36 moveto
+336.26 60.98 lineto
+346.3 64.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 68.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 558 20 moveto
+558 124 lineto
+614 124 lineto
+614 20 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 20 moveto
+558 124 lineto
+614 124 lineto
+614 20 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+571.5 107.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 98 moveto
+614 98 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+567.5 81.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 72 moveto
+614 72 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 55.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 46 moveto
+614 46 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 29.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 474.33 72 moveto
+495.39 72 524.37 72 547.53 72 curveto
+stroke
+0 1 1 edgecolor
+newpath 547.71 75.5 moveto
+557.71 72 lineto
+547.71 68.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 547.71 75.5 moveto
+557.71 72 lineto
+547.71 68.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 77.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 557.51 55.99 moveto
+551.87 53.51 545.87 51.33 540 50 curveto
+519.2 45.28 512.8 45.28 492 50 curveto
+489.34 50.6 486.65 51.38 483.99 52.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 482.53 49.09 moveto
+474.49 55.99 lineto
+485.08 55.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 482.53 49.09 moveto
+474.49 55.99 lineto
+485.08 55.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 55.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ACT->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 279.99 162.93 moveto
+274.3 159.66 268.17 156.78 262 155 curveto
+241.5 149.08 234.93 150.85 214 155 curveto
+211.31 155.53 208.58 156.23 205.87 157.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 204.5 153.8 moveto
+196.17 160.35 lineto
+206.76 160.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 204.5 153.8 moveto
+196.17 160.35 lineto
+206.76 160.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 160.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 147 moveto
+418 251 lineto
+474 251 lineto
+474 147 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 234.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 225 moveto
+474 225 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 208.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 199 moveto
+474 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 182.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 173 moveto
+474 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 156.4 moveto 23 (1.0) alignedtext
+grestore
+% ACT->AAG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.26 187.07 moveto
+356.91 189.32 385.15 192.39 407.81 194.85 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 407.46 198.33 moveto
+417.78 195.93 lineto
+408.22 191.37 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 407.46 198.33 moveto
+417.78 195.93 lineto
+408.22 191.37 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 198.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAG->ACT
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.88 174 moveto
+412.3 170.3 406.23 167.05 400 165 curveto
+380.58 158.6 374.05 161.02 354 165 curveto
+351.31 165.53 348.58 166.23 345.87 167.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 344.5 163.8 moveto
+336.17 170.35 lineto
+346.76 170.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 344.5 163.8 moveto
+336.17 170.35 lineto
+346.76 170.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 170.4 moveto 46 (FR: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 658 295
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/8/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/8/test.txt
new file mode 100644
index 0000000..12816f9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/8/test.txt
@@ -0,0 +1,8 @@
+GAA {[{AAC:[1]}] [] [] [{AGA:[1]}] {5':[], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAC {[{ACT:[1]}] [] [] [{GAA:[1]}] {5':[], ~5':[]} 1.0x}
+AAG {[] [{ACT:[1]}] [] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+ACT {[] [{AAG:[1]}] [] [{AAC:[1]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/9/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/9/bin/part-00000
new file mode 100755
index 0000000..7adb7e6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/9/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/9/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/9/graphviz/result.ps
new file mode 100644
index 0000000..fc60db6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/9/graphviz/result.ps
@@ -0,0 +1,923 @@
+%!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 658 305
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 622 269 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 148.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 209.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+196 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.1 141.19 moveto
+61.69 145.67 67.77 149.85 74 153 curveto
+91.22 161.7 112.01 166.82 129.65 169.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 173.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 100.66 moveto
+77.68 91.35 107.16 78.51 130.47 68.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.97 143.29 moveto
+134.42 138.58 128.33 134.22 122 131 curveto
+104.79 122.25 83.84 117.73 66.09 115.41 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 136.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ACT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 132 moveto
+280 236 lineto
+336 236 lineto
+336 132 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+293.5 219.4 moveto 29 (ACT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 210 moveto
+336 210 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 193.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 184 moveto
+336 184 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 167.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 158 moveto
+336 158 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 141.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->ACT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.33 176.02 moveto
+217.39 177.53 246.37 179.6 269.53 181.25 curveto
+stroke
+0 0 0 edgecolor
+newpath 269.49 184.76 moveto
+279.71 181.98 lineto
+269.99 177.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 269.49 184.76 moveto
+279.71 181.98 lineto
+269.99 177.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 185.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.74 45.17 moveto
+120.24 41.97 94.26 40.8 74 51 curveto
+70.33 52.85 66.89 55.14 63.66 57.74 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 56.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 10 moveto
+280 114 lineto
+336 114 lineto
+336 10 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 97.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 88 moveto
+336 88 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 71.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 62 moveto
+336 62 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 45.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 36 moveto
+336 36 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 19.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.17 65.65 moveto
+201.94 67.87 208.07 69.82 214 71 curveto
+232.11 74.59 252.48 73.28 269.61 70.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 270.55 74.08 moveto
+279.82 68.94 lineto
+269.37 67.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 270.55 74.08 moveto
+279.82 68.94 lineto
+269.37 67.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215 78.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% TAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 157 moveto
+558 261 lineto
+614 261 lineto
+614 157 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+571.5 244.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 235 moveto
+614 235 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572 218.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 209 moveto
+614 209 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 192.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 183 moveto
+614 183 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 166.4 moveto 23 (1.0) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 142 moveto
+418 246 lineto
+474 246 lineto
+474 142 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 229.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 220 moveto
+474 220 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 203.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 194 moveto
+474 194 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 177.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 168 moveto
+474 168 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 151.4 moveto 23 (1.0) alignedtext
+grestore
+% TAA->AAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 557.88 184 moveto
+552.3 180.3 546.23 177.05 540 175 curveto
+519.74 168.32 512.93 170.85 492 175 curveto
+489.31 175.53 486.58 176.23 483.87 177.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 482.5 173.8 moveto
+474.17 180.35 lineto
+484.76 180.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 482.5 173.8 moveto
+474.17 180.35 lineto
+484.76 180.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 180.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AAG->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 474.33 197.04 moveto
+495.39 199.29 524.37 202.4 547.53 204.88 curveto
+stroke
+0 1 1 edgecolor
+newpath 547.4 208.38 moveto
+557.71 205.97 lineto
+548.14 201.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 547.4 208.38 moveto
+557.71 205.97 lineto
+548.14 201.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 208.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAG->ACT
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.99 172.93 moveto
+412.3 169.66 406.17 166.78 400 165 curveto
+380.36 159.33 374.05 161.02 354 165 curveto
+351.31 165.53 348.58 166.23 345.87 167.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 344.5 163.8 moveto
+336.17 170.35 lineto
+346.76 170.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 344.5 163.8 moveto
+336.17 170.35 lineto
+346.76 170.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 170.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 279.55 52.65 moveto
+273.8 51.13 267.75 49.8 262 49 curveto
+243.78 46.48 223.4 46.75 206.29 47.86 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 205.81 44.38 moveto
+196.1 48.63 lineto
+206.34 51.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 205.81 44.38 moveto
+196.1 48.63 lineto
+206.34 51.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215 54.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 20 moveto
+418 124 lineto
+474 124 lineto
+474 20 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 107.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 98 moveto
+474 98 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 81.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 72 moveto
+474 72 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 55.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 46 moveto
+474 46 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 29.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.17 75.65 moveto
+341.94 77.87 348.07 79.82 354 81 curveto
+371.47 84.47 391.08 83.24 407.69 80.73 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 408.34 84.17 moveto
+417.6 79.04 lineto
+407.16 77.27 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 408.34 84.17 moveto
+417.6 79.04 lineto
+407.16 77.27 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 88.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.9 65.66 moveto
+412.02 64.57 405.83 63.6 400 63 curveto
+382.53 61.21 363.1 60.77 346.62 60.86 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 346.22 57.36 moveto
+336.26 60.98 lineto
+346.3 64.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 346.22 57.36 moveto
+336.26 60.98 lineto
+346.3 64.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 68.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 558 30 moveto
+558 134 lineto
+614 134 lineto
+614 30 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 30 moveto
+558 134 lineto
+614 134 lineto
+614 30 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+571.5 117.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 108 moveto
+614 108 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+567.5 91.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 82 moveto
+614 82 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 65.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 56 moveto
+614 56 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 39.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 474.17 85.65 moveto
+479.94 87.87 486.07 89.82 492 91 curveto
+510.11 94.59 530.48 93.28 547.61 90.69 curveto
+stroke
+0 1 1 edgecolor
+newpath 548.55 94.08 moveto
+557.82 88.94 lineto
+547.37 87.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 548.55 94.08 moveto
+557.82 88.94 lineto
+547.37 87.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 98.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 557.55 72.65 moveto
+551.8 71.13 545.75 69.8 540 69 curveto
+521.78 66.48 501.4 66.75 484.29 67.86 curveto
+stroke
+0 0 0 edgecolor
+newpath 483.81 64.38 moveto
+474.1 68.63 lineto
+484.34 71.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 483.81 64.38 moveto
+474.1 68.63 lineto
+484.34 71.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 74.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ACT->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 279.99 162.93 moveto
+274.3 159.66 268.17 156.78 262 155 curveto
+241.5 149.08 234.93 150.85 214 155 curveto
+211.31 155.53 208.58 156.23 205.87 157.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 204.5 153.8 moveto
+196.17 160.35 lineto
+206.76 160.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 204.5 153.8 moveto
+196.17 160.35 lineto
+206.76 160.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 160.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ACT->AAG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.26 186.05 moveto
+356.82 187.54 384.89 189.57 407.5 191.21 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 407.55 194.72 moveto
+417.78 191.95 lineto
+408.06 187.74 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 407.55 194.72 moveto
+417.78 191.95 lineto
+408.06 187.74 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 195.4 moveto 46 (FR: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 658 305
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/9/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/9/test.txt
new file mode 100644
index 0000000..e9496c5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/9/test.txt
@@ -0,0 +1,9 @@
+GAA {[{AAC:[1]}] [] [] [{AGA:[1]}] {5':[], ~5':[]} 1.0x}
+TAA {[{AAG:[1]}] [] [] [] {5':[], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAC {[{ACT:[1]}] [] [] [{GAA:[1]}] {5':[], ~5':[]} 1.0x}
+AAG {[] [{ACT:[1]}] [] [{TAA:[1]}] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+ACT {[] [{AAG:[1]}] [] [{AAC:[1]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/BridgePathWithTandemRepeat/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/BridgePathWithTandemRepeat/bin/part-00000
new file mode 100755
index 0000000..2501613
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/BridgePathWithTandemRepeat/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/BridgePathWithTandemRepeat/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/BridgePathWithTandemRepeat/graphviz/result.ps
new file mode 100644
index 0000000..910cb8b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/BridgePathWithTandemRepeat/graphviz/result.ps
@@ -0,0 +1,999 @@
+%!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 1254 267
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 1218 231 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 83 moveto
+0 187 lineto
+66 187 lineto
+66 83 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 83 moveto
+0 187 lineto
+66 187 lineto
+66 83 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+17.5 170.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 161 moveto
+66 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 144.4 moveto 50 (5':[2,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 135 moveto
+66 135 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 118.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 109 moveto
+66 109 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+21.5 92.4 moveto 23 (2.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 164 83 moveto
+164 187 lineto
+220 187 lineto
+220 83 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+177.5 170.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 164 161 moveto
+220 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+178 144.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 164 135 moveto
+220 135 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172 118.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 164 109 moveto
+220 109 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+180.5 92.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 66.33 135 moveto
+91.82 135 126.99 135 153.64 135 curveto
+stroke
+0 0 0 edgecolor
+newpath 153.76 138.5 moveto
+163.76 135 lineto
+153.76 131.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 153.76 138.5 moveto
+163.76 135 lineto
+153.76 131.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+86 140.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 163.51 118.99 moveto
+157.87 116.51 151.87 114.33 146 113 curveto
+119.13 106.9 110.99 107.43 84 113 curveto
+81.21 113.58 78.39 114.31 75.57 115.16 curveto
+stroke
+0 1 1 edgecolor
+newpath 74.42 111.86 moveto
+66.11 118.44 lineto
+76.7 118.47 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 74.42 111.86 moveto
+66.11 118.44 lineto
+76.7 118.47 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+84.5 118.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% ATC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 318 83 moveto
+318 187 lineto
+374 187 lineto
+374 83 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+332 170.4 moveto 28 (ATC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 318 161 moveto
+374 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+332 144.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 318 135 moveto
+374 135 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+326 118.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 318 109 moveto
+374 109 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+334.5 92.4 moveto 23 (2.0) alignedtext
+grestore
+% AAT->ATC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 220.25 135 moveto
+244.78 135 280.52 135 307.64 135 curveto
+stroke
+0 0 0 edgecolor
+newpath 307.93 138.5 moveto
+317.93 135 lineto
+307.93 131.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 307.93 138.5 moveto
+317.93 135 lineto
+307.93 131.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+240 140.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1014 19 moveto
+1014 123 lineto
+1070 123 lineto
+1070 19 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1026 106.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1014 97 moveto
+1070 97 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1028 80.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1014 71 moveto
+1070 71 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1022 54.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1014 45 moveto
+1070 45 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1030.5 28.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 874 6 moveto
+874 110 lineto
+930 110 lineto
+930 6 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+886.5 93.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 874 84 moveto
+930 84 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+888 67.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 874 58 moveto
+930 58 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+882 41.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 874 32 moveto
+930 32 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+890.5 15.4 moveto 23 (2.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1013.77 52.1 moveto
+1008.11 49.17 1002.03 46.59 996 45 curveto
+977.89 40.24 957.32 42.27 940.06 46 curveto
+stroke
+0 0 0 edgecolor
+newpath 939.21 42.6 moveto
+930.32 48.35 lineto
+940.86 49.4 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 939.21 42.6 moveto
+930.32 48.35 lineto
+940.86 49.4 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+949.5 50.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1154 82 moveto
+1154 186 lineto
+1210 186 lineto
+1210 82 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1166.5 169.4 moveto 31 (CGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1154 160 moveto
+1210 160 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1168 143.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1154 134 moveto
+1210 134 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1162 117.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1154 108 moveto
+1210 108 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1170.5 91.4 moveto 23 (2.0) alignedtext
+grestore
+% GAA->CGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1070.02 86.12 moveto
+1075.91 89.16 1082.12 92.25 1088 95 curveto
+1106.2 103.5 1126.77 112.14 1144.02 119.13 curveto
+stroke
+0 1 1 edgecolor
+newpath 1143.17 122.55 moveto
+1153.75 123.03 lineto
+1145.77 116.06 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1143.17 122.55 moveto
+1153.75 123.03 lineto
+1145.77 116.06 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1088 120.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 930.21 61.17 moveto
+936.09 61.8 942.24 62.44 948 63 curveto
+966.23 64.77 986.46 66.52 1003.47 67.93 curveto
+stroke
+0 1 1 edgecolor
+newpath 1003.35 71.43 moveto
+1013.6 68.76 lineto
+1003.92 64.45 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1003.35 71.43 moveto
+1013.6 68.76 lineto
+1003.92 64.45 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+948 73.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% TAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 734 6 moveto
+734 110 lineto
+790 110 lineto
+790 6 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+747.5 93.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 734 84 moveto
+790 84 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+748 67.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 734 58 moveto
+790 58 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+742 41.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 734 32 moveto
+790 32 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+750.5 15.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 873.73 45.78 moveto
+867.96 43.8 861.87 42.05 856 41 curveto
+835 37.24 829 37.24 808 41 curveto
+805.34 41.48 802.64 42.09 799.94 42.81 curveto
+stroke
+0 1 1 edgecolor
+newpath 798.8 39.5 moveto
+790.27 45.78 lineto
+800.86 46.19 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 798.8 39.5 moveto
+790.27 45.78 lineto
+800.86 46.19 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+808 46.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1153.75 86.68 moveto
+1148.53 81.21 1142.61 76.38 1136 73 curveto
+1119.12 64.36 1098.19 63.15 1080.38 64.41 curveto
+stroke
+0 0 0 edgecolor
+newpath 1079.91 60.94 moveto
+1070.3 65.39 lineto
+1080.59 67.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1079.91 60.94 moveto
+1070.3 65.39 lineto
+1080.59 67.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1089.5 78.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CGA->CGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 1169.42 186.2 moveto
+1170.83 196.59 1175.03 204 1182 204 curveto
+1186.47 204 1189.79 200.96 1191.98 196.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1195.41 196.76 moveto
+1194.58 186.2 lineto
+1188.64 194.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1195.41 196.76 moveto
+1194.58 186.2 lineto
+1188.64 194.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1159 209.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CGA->ATC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 1153.97 139.43 moveto
+1125.79 144.4 1081.05 151 1042 151 curveto
+484 151 484 151 484 151 curveto
+450.1 151 411.83 146.18 384.2 141.83 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 384.6 138.35 moveto
+374.17 140.19 lineto
+383.48 145.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 384.6 138.35 moveto
+374.17 140.19 lineto
+383.48 145.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+739 156.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% TAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 790.18 61.55 moveto
+796.06 62.15 802.22 62.69 808 63 curveto
+829.3 64.15 834.7 64.15 856 63 curveto
+858.53 62.86 861.13 62.68 863.75 62.48 curveto
+stroke
+0 0 0 edgecolor
+newpath 864.18 65.95 moveto
+873.82 61.55 lineto
+863.54 58.98 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 864.18 65.95 moveto
+873.82 61.55 lineto
+863.54 58.98 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+809.5 69.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 594 0 moveto
+594 104 lineto
+650 104 lineto
+650 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+608 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 594 78 moveto
+650 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+608 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 594 52 moveto
+650 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+602 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 594 26 moveto
+650 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+610.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% TAA->CTA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 733.91 51.61 moveto
+728.02 50.52 721.83 49.57 716 49 curveto
+697.7 47.23 677.3 47.59 660.2 48.56 curveto
+stroke
+0 1 1 edgecolor
+newpath 659.78 45.08 moveto
+650.03 49.23 lineto
+660.24 52.07 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 659.78 45.08 moveto
+650.03 49.23 lineto
+660.24 52.07 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+668 54.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CTA->TAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 650.37 62.79 moveto
+656.12 64.54 662.19 66.08 668 67 curveto
+686.23 69.9 706.62 68.5 723.73 66.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 724.6 69.44 moveto
+733.92 64.39 lineto
+723.48 62.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 724.6 69.44 moveto
+733.92 64.39 lineto
+723.48 62.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+669.5 74.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 456 19 moveto
+456 123 lineto
+512 123 lineto
+512 19 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+468.5 106.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 456 97 moveto
+512 97 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+470 80.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 456 71 moveto
+512 71 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+464 54.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 456 45 moveto
+512 45 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+472.5 28.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 593.68 40.53 moveto
+575.2 34.71 550.75 30.16 530 37 curveto
+526.89 38.03 523.81 39.35 520.82 40.88 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 518.96 37.92 moveto
+512.12 46 lineto
+522.51 43.95 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 518.96 37.92 moveto
+512.12 46 lineto
+522.51 43.95 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+530 42.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 512.26 67.11 moveto
+532.91 64.27 561.15 60.38 583.81 57.26 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 584.35 60.72 moveto
+593.78 55.89 lineto
+583.39 53.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 584.35 60.72 moveto
+593.78 55.89 lineto
+583.39 53.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+530 70.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AGA->ATC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 455.85 66.69 moveto
+436.77 65.12 411.57 65.78 392 76 curveto
+388.24 77.96 384.7 80.38 381.37 83.11 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 378.94 80.6 moveto
+374 89.97 lineto
+383.71 85.72 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 378.94 80.6 moveto
+374 89.97 lineto
+383.71 85.72 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+392 81.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATC->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 317.83 121.35 moveto
+312.06 119.13 305.93 117.18 300 116 curveto
+272.97 110.64 265.03 110.64 238 116 curveto
+235.31 116.53 232.58 117.23 229.87 118.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 228.5 114.8 moveto
+220.17 121.35 lineto
+230.76 121.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 228.5 114.8 moveto
+220.17 121.35 lineto
+230.76 121.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+238.5 121.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% ATC->CGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 374.05 159.09 moveto
+400.55 179.34 442.36 205 484 205 curveto
+484 205 484 205 1042 205 curveto
+1080.24 205 1118.62 183.67 1145.5 164.39 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 1147.85 167 moveto
+1153.8 158.24 lineto
+1143.69 161.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 1147.85 167 moveto
+1153.8 158.24 lineto
+1143.69 161.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+739 210.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATC->AGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 374.33 122.76 moveto
+392.6 114.78 416.81 104.01 438 94 curveto
+440.82 92.67 443.72 91.27 446.63 89.86 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 448.45 92.86 moveto
+455.88 85.31 lineto
+445.36 86.58 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 448.45 92.86 moveto
+455.88 85.31 lineto
+445.36 86.58 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+392 120.4 moveto 46 (FR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 1254 267
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/BridgePathWithTandemRepeat/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/BridgePathWithTandemRepeat/test.txt
new file mode 100644
index 0000000..aa3a366
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/BridgePathWithTandemRepeat/test.txt
@@ -0,0 +1,9 @@
+AAA {[{AAT:[1,2]}] [] [] [] {5':[(2-0_0),(1-0_0)], ~5':[]} 2.0x}
+GAA {[{AAC:[1]}] [] [] [{CGA:[1]}] {5':[], ~5':[]} 1.0x}
+TAA {[{AAC:[2]}] [] [] [{CTA:[2]}] {5':[], ~5':[]} 1.0x}
+AGA {[] [{ATC:[2]}] [{CTA:[2]}] [] {5':[], ~5':[]} 1.0x}
+CGA {[{GAA:[1]}] [{ATC:[1]}] [{CGA:[1]}] [] {5':[], ~5':[]} 2.0x}
+CTA {[{TAA:[2]}] [] [{AGA:[2]}] [] {5':[], ~5':[]} 1.0x}
+AAC {[] [] [] [{TAA:[2]}, {GAA:[1]}] {5':[], ~5':[]} 2.0x}
+ATC {[] [{CGA:[1]}, {AGA:[2]}] [] [{AAT:[1,2]}] {5':[], ~5':[]} 2.0x}
+AAT {[{ATC:[1,2]}] [] [] [{AAA:[1,2]}] {5':[], ~5':[]} 2.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/bin/.part-00000.crc
new file mode 100644
index 0000000..84e127c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/bin/part-00000
new file mode 100755
index 0000000..15b5903
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/data
new file mode 100644
index 0000000..a600d4f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/data
@@ -0,0 +1,7 @@
+AAA {[] [] [] [{GAA:[3]}] {5':[], ~5':[]} 1.0x}
+GAA {[{AAA:[3]}] [] [] [{GGA:[3]}, {CGA:[1]}] {5':[], ~5':[]} 2.0x}
+TCA {[] [] [] [{ATC:[2]}] {5':[], ~5':[]} 1.0x}
+CGA {[{GAA:[1]}] [{ATC:[1]}] [{CGA:[1]}] [] {5':[], ~5':[]} 2.0x}
+GGA {[{GAA:[3]}] [] [] [] {5':[(3-0_0)], ~5':[]} 1.0x}
+ATC {[{TCA:[2]}] [{CGA:[1]}] [] [{AAT:[1]}] {5':[(2-0_0)], ~5':[]} 2.0x}
+AAT {[{ATC:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/graphviz/result.ps
new file mode 100644
index 0000000..6256471
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTandemRepeat/graphviz/result.ps
@@ -0,0 +1,796 @@
+%!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 658 367
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 622 331 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 141 moveto
+0 245 lineto
+56 245 lineto
+56 141 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 228.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 219 moveto
+56 219 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 202.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 193 moveto
+56 193 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 176.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 167 moveto
+56 167 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 150.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 141 moveto
+140 245 lineto
+196 245 lineto
+196 141 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 228.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 219 moveto
+196 219 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 202.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 193 moveto
+196 193 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 176.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 167 moveto
+196 167 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 150.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 193 moveto
+77.39 193 106.37 193 129.53 193 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 196.5 moveto
+139.71 193 lineto
+129.71 189.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 196.5 moveto
+139.71 193 lineto
+129.71 189.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 198.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% GAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 176.99 moveto
+133.87 174.51 127.87 172.33 122 171 curveto
+101.2 166.28 94.8 166.28 74 171 curveto
+71.34 171.6 68.65 172.38 65.99 173.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 170.09 moveto
+56.49 176.99 lineto
+67.08 176.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 170.09 moveto
+56.49 176.99 lineto
+67.08 176.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 176.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% GGA
+gsave
+0 0 0.75294 nodecolor
+newpath 280 219 moveto
+280 323 lineto
+336 323 lineto
+336 219 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280 219 moveto
+280 323 lineto
+336 323 lineto
+336 219 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+291.5 306.4 moveto 33 (GGA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280 297 moveto
+336 297 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+289.5 280.4 moveto 37 (5':[3]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280 271 moveto
+336 271 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 254.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280 245 moveto
+336 245 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 228.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->GGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 196.03 230.24 moveto
+201.5 235.79 207.56 240.98 214 245 curveto
+230.89 255.54 252.09 261.89 270.08 265.66 curveto
+stroke
+0 1 1 edgecolor
+newpath 269.5 269.12 moveto
+279.98 267.56 lineto
+270.81 262.24 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 269.5 269.12 moveto
+279.98 267.56 lineto
+270.81 262.24 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 268.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% CGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 61 moveto
+280 165 lineto
+336 165 lineto
+336 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292.5 148.4 moveto 31 (CGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 139 moveto
+336 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 113 moveto
+336 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 87 moveto
+336 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% GAA->CGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 196.33 176.81 moveto
+217.77 164.56 247.42 147.62 270.78 134.27 curveto
+stroke
+0 1 1 edgecolor
+newpath 272.77 137.17 moveto
+279.71 129.17 lineto
+269.29 131.09 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 272.77 137.17 moveto
+279.71 129.17 lineto
+269.29 131.09 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 170.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 279.76 237.1 moveto
+274.28 231.87 268.27 226.91 262 223 curveto
+245.03 212.41 223.99 205.25 206.12 200.58 curveto
+stroke
+0 0 0 edgecolor
+newpath 206.84 197.15 moveto
+196.3 198.17 lineto
+205.18 203.95 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 206.84 197.15 moveto
+196.3 198.17 lineto
+205.18 203.95 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 228.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% CGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 279.68 108.74 moveto
+259.91 107.21 233.63 108.19 214 120 curveto
+208.22 123.48 203.05 127.99 198.46 133.06 curveto
+stroke
+0 0 0 edgecolor
+newpath 195.72 130.87 moveto
+192.13 140.84 lineto
+201.16 135.29 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 195.72 130.87 moveto
+192.13 140.84 lineto
+201.16 135.29 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 125.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CGA->CGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 295.78 165.2 moveto
+297.15 175.59 301.23 183 308 183 curveto
+312.34 183 315.57 179.96 317.69 175.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 321.12 175.76 moveto
+320.22 165.2 lineto
+314.34 174.02 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 321.12 175.76 moveto
+320.22 165.2 lineto
+314.34 174.02 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+285 188.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATC
+gsave
+0 0 0.75294 nodecolor
+newpath 418 61 moveto
+418 165 lineto
+474 165 lineto
+474 61 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 418 61 moveto
+418 165 lineto
+474 165 lineto
+474 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 148.4 moveto 28 (ATC) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 418 139 moveto
+474 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+427.5 122.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 418 113 moveto
+474 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 418 87 moveto
+474 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% CGA->ATC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.26 113 moveto
+356.82 113 384.89 113 407.5 113 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 407.78 116.5 moveto
+417.78 113 lineto
+407.78 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 407.78 116.5 moveto
+417.78 113 lineto
+407.78 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 118.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% TCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 122 moveto
+558 226 lineto
+614 226 lineto
+614 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572 209.4 moveto 28 (TCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 200 moveto
+614 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 174 moveto
+614 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 148 moveto
+614 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% TCA->ATC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 557.79 146.58 moveto
+552.22 142.21 546.17 138.11 540 135 curveto
+522.73 126.3 501.94 120.98 484.3 117.75 curveto
+stroke
+0 1 1 edgecolor
+newpath 484.78 114.28 moveto
+474.34 116.08 lineto
+483.62 121.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 484.78 114.28 moveto
+474.34 116.08 lineto
+483.62 121.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 140.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% ATC->CGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.51 96.99 moveto
+411.87 94.51 405.87 92.33 400 91 curveto
+380.06 86.48 373.94 86.48 354 91 curveto
+351.34 91.6 348.65 92.38 345.99 93.28 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 344.53 90.09 moveto
+336.49 96.99 lineto
+347.08 96.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 344.53 90.09 moveto
+336.49 96.99 lineto
+347.08 96.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 96.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATC->TCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 474.1 141.19 moveto
+479.69 145.67 485.77 149.85 492 153 curveto
+509.22 161.7 530.01 166.82 547.65 169.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 547.21 173.3 moveto
+557.62 171.36 lineto
+548.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 547.21 173.3 moveto
+557.62 171.36 lineto
+548.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 174.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 558 0 moveto
+558 104 lineto
+614 104 lineto
+614 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 0 moveto
+558 104 lineto
+614 104 lineto
+614 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+571.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 78 moveto
+614 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+567.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 52 moveto
+614 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 26 moveto
+614 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATC->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 474.33 100.66 moveto
+495.68 91.35 525.16 78.51 548.47 68.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 549.94 71.53 moveto
+557.71 64.33 lineto
+547.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 549.94 71.53 moveto
+557.71 64.33 lineto
+547.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 97.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 557.77 45.66 moveto
+538.27 42.75 512.3 41.88 492 52 curveto
+488.36 53.81 484.94 56.06 481.73 58.62 curveto
+stroke
+0 0 0 edgecolor
+newpath 479.19 56.21 moveto
+474.19 65.55 lineto
+483.92 61.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 479.19 56.21 moveto
+474.19 65.55 lineto
+483.92 61.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 57.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 658 367
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTreePath/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTreePath/bin/part-00000
new file mode 100755
index 0000000..e07b7b23
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTreePath/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTreePath/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTreePath/graphviz/result.ps
new file mode 100644
index 0000000..7e7bd6c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTreePath/graphviz/result.ps
@@ -0,0 +1,2093 @@
+%!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 1640 723
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 1604 687 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% TAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 2 147 moveto
+2 251 lineto
+58 251 lineto
+58 147 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+15.5 234.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 2 225 moveto
+58 225 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16 208.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 2 199 moveto
+58 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+10 182.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 2 173 moveto
+58 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+18.5 156.4 moveto 23 (5.0) alignedtext
+grestore
+% TAA->TAA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 16.34 251.2 moveto
+17.88 261.59 22.43 269 30 269 curveto
+34.85 269 38.46 265.96 40.84 261.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 44.27 261.78 moveto
+43.66 251.2 lineto
+37.54 259.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 44.27 261.78 moveto
+43.66 251.2 lineto
+37.54 259.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+0 274.4 moveto 60 (RF: [2,3]) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 156 254 moveto
+156 358 lineto
+212 358 lineto
+212 254 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+168 341.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 156 332 moveto
+212 332 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170 315.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 156 306 moveto
+212 306 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+164 289.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 156 280 moveto
+212 280 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172.5 263.4 moveto 23 (2.0) alignedtext
+grestore
+% TAA->AAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 50.11 251.13 moveto
+56.78 262.77 65.31 274.01 76 282 curveto
+95.92 296.89 123.33 302.85 145.54 305.12 curveto
+stroke
+0 0 0 edgecolor
+newpath 145.41 308.62 moveto
+155.66 305.93 lineto
+145.97 301.64 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 145.41 308.62 moveto
+155.66 305.93 lineto
+145.97 301.64 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+78 309.4 moveto 58 (FF: [2,3]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 173 moveto
+982 277 lineto
+1038 277 lineto
+1038 173 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+994.5 260.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 251 moveto
+1038 251 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+996 234.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 225 moveto
+1038 225 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+990 208.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 199 moveto
+1038 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+998.5 182.4 moveto 23 (3.0) alignedtext
+grestore
+% TAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 58.12 206.95 moveto
+88.8 214.92 139.48 226 184 226 curveto
+184 226 184 226 824 226 curveto
+875.21 226 934.35 225.62 971.95 225.32 curveto
+stroke
+0 0 0 edgecolor
+newpath 971.98 228.82 moveto
+981.96 225.24 lineto
+971.93 221.82 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 971.98 228.82 moveto
+981.96 225.24 lineto
+971.93 221.82 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+466 231.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% GTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 156 40 moveto
+156 144 lineto
+212 144 lineto
+212 40 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+169.5 127.4 moveto 29 (GTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 156 118 moveto
+212 118 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170 101.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 156 92 moveto
+212 92 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+164 75.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 156 66 moveto
+212 66 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172.5 49.4 moveto 23 (1.0) alignedtext
+grestore
+% TAA->GTA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 58.08 156.98 moveto
+63.5 150.74 69.54 144.8 76 140 curveto
+99.72 122.38 111.08 128.19 138 116 curveto
+140.78 114.74 143.63 113.39 146.49 112 curveto
+stroke
+0 1 1 edgecolor
+newpath 148.16 115.08 moveto
+155.53 107.48 lineto
+145.02 108.82 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 148.16 115.08 moveto
+155.53 107.48 lineto
+145.02 108.82 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+83 145.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAG->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 155.85 273.79 moveto
+150.31 268.68 144.26 263.83 138 260 curveto
+113.3 244.9 101.13 254.39 76 240 curveto
+72.6 238.05 69.23 235.82 65.95 233.43 curveto
+stroke
+0 1 1 edgecolor
+newpath 68.06 230.63 moveto
+58.03 227.22 lineto
+63.74 236.14 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 68.06 230.63 moveto
+58.03 227.22 lineto
+63.74 236.14 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76.5 265.4 moveto 61 (RR: [2,3]) alignedtext
+grestore
+% AGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 310 292 moveto
+310 396 lineto
+366 396 lineto
+366 292 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+322.5 379.4 moveto 31 (AGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 310 370 moveto
+366 370 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+324 353.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 310 344 moveto
+366 344 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+318 327.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 310 318 moveto
+366 318 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+326.5 301.4 moveto 23 (2.0) alignedtext
+grestore
+% AAG->AGC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 212.37 318.84 moveto
+218.12 321.13 224.19 323.31 230 325 curveto
+252.68 331.59 278.73 336.26 299.57 339.31 curveto
+stroke
+0 0 0 edgecolor
+newpath 299.26 342.8 moveto
+309.65 340.73 lineto
+300.23 335.87 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 299.26 342.8 moveto
+309.65 340.73 lineto
+300.23 335.87 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+232 343.4 moveto 58 (FF: [2,3]) alignedtext
+grestore
+% AAC->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 981.72 211.63 moveto
+945.86 195.93 881.75 172 824 172 curveto
+184 172 184 172 184 172 curveto
+144.01 172 99.03 180.94 68.06 188.54 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.96 185.2 moveto
+58.12 191.05 lineto
+68.68 191.99 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.96 185.2 moveto
+58.12 191.05 lineto
+68.68 191.99 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+464.5 177.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% ACG
+gsave
+0 0 0.75294 nodecolor
+newpath 778 289 moveto
+778 393 lineto
+870 393 lineto
+870 289 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 778 289 moveto
+778 393 lineto
+870 393 lineto
+870 289 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+808.5 376.4 moveto 31 (ACG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 778 367 moveto
+870 367 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+810 350.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 778 341 moveto
+870 341 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+786 324.4 moveto 76 (~5':[2,3,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 778 315 moveto
+870 315 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+812.5 298.4 moveto 23 (4.0) alignedtext
+grestore
+% AAC->ACG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 981.99 232.57 moveto
+947.23 242.03 891.99 257.32 888 260 curveto
+879.4 265.76 871.43 273.05 864.23 280.88 curveto
+stroke
+0 0 0 edgecolor
+newpath 861.22 279.01 moveto
+857.3 288.85 lineto
+866.5 283.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 861.22 279.01 moveto
+857.3 288.85 lineto
+866.5 283.6 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+890 265.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% GTA->TAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 155.82 84.72 moveto
+132.46 80.39 99.4 78.39 76 94 curveto
+60.91 104.06 50.74 120.26 43.89 136.96 curveto
+stroke
+0 0 0 edgecolor
+newpath 40.44 136.21 moveto
+40.23 146.8 lineto
+47 138.65 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 40.44 136.21 moveto
+40.23 146.8 lineto
+47 138.65 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+84.5 99.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ACC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 310 21 moveto
+310 125 lineto
+366 125 lineto
+366 21 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+323 108.4 moveto 30 (ACC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 310 99 moveto
+366 99 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+324 82.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 310 73 moveto
+366 73 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+318 56.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 310 47 moveto
+366 47 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+326.5 30.4 moveto 23 (1.0) alignedtext
+grestore
+% GTA->ACC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 212.25 88.52 moveto
+236.88 85.48 272.84 81.04 300 77.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 300.44 81.16 moveto
+309.93 76.46 lineto
+299.58 74.21 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 300.44 81.16 moveto
+309.93 76.46 lineto
+299.58 74.21 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+238 91.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ACA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1540 294 moveto
+1540 398 lineto
+1596 398 lineto
+1596 294 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1553 381.4 moveto 30 (ACA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1540 372 moveto
+1596 372 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1554 355.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1540 346 moveto
+1596 346 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1548 329.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1540 320 moveto
+1596 320 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1556.5 303.4 moveto 23 (1.0) alignedtext
+grestore
+% CAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1400 294 moveto
+1400 398 lineto
+1456 398 lineto
+1456 294 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1412.5 381.4 moveto 31 (CAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1400 372 moveto
+1456 372 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1414 355.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1400 346 moveto
+1456 346 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1408 329.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1400 320 moveto
+1456 320 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1416.5 303.4 moveto 23 (1.0) alignedtext
+grestore
+% ACA->CAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1539.83 332.35 moveto
+1534.06 330.13 1527.93 328.18 1522 327 curveto
+1501.07 322.85 1494.93 322.85 1474 327 curveto
+1471.31 327.53 1468.58 328.23 1465.87 329.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 1464.5 325.8 moveto
+1456.17 332.35 lineto
+1466.76 332.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1464.5 325.8 moveto
+1456.17 332.35 lineto
+1466.76 332.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1475.5 332.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CAG->ACA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1456.33 346 moveto
+1477.39 346 1506.37 346 1529.53 346 curveto
+stroke
+0 1 1 edgecolor
+newpath 1529.71 349.5 moveto
+1539.71 346 lineto
+1529.71 342.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1529.71 349.5 moveto
+1539.71 346 lineto
+1529.71 342.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1474 351.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1260 294 moveto
+1260 398 lineto
+1316 398 lineto
+1316 294 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1271.5 381.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1260 372 moveto
+1316 372 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1274 355.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1260 346 moveto
+1316 346 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1268 329.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1260 320 moveto
+1316 320 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1276.5 303.4 moveto 23 (1.0) alignedtext
+grestore
+% CAG->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1399.83 332.35 moveto
+1394.06 330.13 1387.93 328.18 1382 327 curveto
+1361.07 322.85 1354.93 322.85 1334 327 curveto
+1331.31 327.53 1328.58 328.23 1325.87 329.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 1324.5 325.8 moveto
+1316.17 332.35 lineto
+1326.76 332.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1324.5 325.8 moveto
+1316.17 332.35 lineto
+1326.76 332.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1335.5 332.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 28 moveto
+638 132 lineto
+694 132 lineto
+694 28 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+651 115.4 moveto 30 (CCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 106 moveto
+694 106 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+652 89.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 80 moveto
+694 80 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+646 63.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 54 moveto
+694 54 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+654.5 37.4 moveto 23 (2.0) alignedtext
+grestore
+% ATG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 0 moveto
+796 104 lineto
+852 104 lineto
+852 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+809 87.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 78 moveto
+852 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+810 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 52 moveto
+852 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+804 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 26 moveto
+852 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+812.5 9.4 moveto 23 (2.0) alignedtext
+grestore
+% CCA->ATG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 694.25 74.99 moveto
+719.86 70.46 757.82 63.73 786.07 58.72 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 786.76 62.15 moveto
+796 56.96 lineto
+785.54 55.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 786.76 62.15 moveto
+796 56.96 lineto
+785.54 55.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+713 77.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 474 27 moveto
+474 131 lineto
+530 131 lineto
+530 27 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+487 114.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 474 105 moveto
+530 105 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+488 88.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 474 79 moveto
+530 79 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+482 62.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 474 53 moveto
+530 53 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+490.5 36.4 moveto 23 (1.0) alignedtext
+grestore
+% CCA->CCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 637.97 72.19 moveto
+632.08 70.87 625.87 69.69 620 69 curveto
+592.63 65.77 585.45 66.57 558 69 curveto
+552.14 69.52 545.97 70.34 539.96 71.29 curveto
+stroke
+0 1 1 edgecolor
+newpath 539.34 67.85 moveto
+530.07 72.99 lineto
+540.52 74.75 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 539.34 67.85 moveto
+530.07 72.99 lineto
+540.52 74.75 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+565 74.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ATG->CCA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 795.53 42.94 moveto
+772.37 37.09 739.19 32.22 712 42 curveto
+708.73 43.17 705.53 44.69 702.44 46.45 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 700.51 43.53 moveto
+694.03 51.91 lineto
+704.32 49.4 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 700.51 43.53 moveto
+694.03 51.91 lineto
+704.32 49.4 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+713 47.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATG->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 808.18 104.2 moveto
+809.96 114.59 815.23 122 824 122 curveto
+829.62 122 833.8 118.96 836.55 114.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 839.98 114.8 moveto
+839.82 104.2 lineto
+833.34 112.59 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 839.98 114.8 moveto
+839.82 104.2 lineto
+833.34 112.59 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+801 127.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CCC->CCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 530.12 83.81 moveto
+539.01 85.12 548.89 86.35 558 87 curveto
+585.49 88.95 592.52 89.08 620 87 curveto
+622.54 86.81 625.15 86.56 627.77 86.27 curveto
+stroke
+0 0 0 edgecolor
+newpath 628.38 89.72 moveto
+637.86 84.97 lineto
+627.49 82.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 628.38 89.72 moveto
+637.86 84.97 lineto
+627.49 82.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+566.5 94.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CCC->ACC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 473.73 71.12 moveto
+464.92 69.02 455.12 67.04 446 66 curveto
+418.62 62.86 411.48 63.92 384 66 curveto
+381.46 66.19 378.85 66.44 376.23 66.73 curveto
+stroke
+0 1 1 edgecolor
+newpath 375.62 63.28 moveto
+366.14 68.03 lineto
+376.51 70.23 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 375.62 63.28 moveto
+366.14 68.03 lineto
+376.51 70.23 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+391 71.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 474 331 moveto
+474 435 lineto
+530 435 lineto
+530 331 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+486.5 418.4 moveto 31 (GCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 474 409 moveto
+530 409 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+488 392.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 474 383 moveto
+530 383 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+482 366.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 474 357 moveto
+530 357 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+490.5 340.4 moveto 23 (2.0) alignedtext
+grestore
+% CAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 371 moveto
+638 475 lineto
+694 475 lineto
+694 371 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+651 458.4 moveto 30 (CAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 449 moveto
+694 449 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+652 432.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 423 moveto
+694 423 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+646 406.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 397 moveto
+694 397 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+654.5 380.4 moveto 23 (3.0) alignedtext
+grestore
+% GCA->CAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 530.26 393.42 moveto
+539.07 396.44 548.87 399.58 558 402 curveto
+580.9 408.08 606.96 413.2 627.75 416.86 curveto
+stroke
+0 0 0 edgecolor
+newpath 627.34 420.34 moveto
+637.79 418.59 lineto
+628.53 413.44 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 627.34 420.34 moveto
+637.79 418.59 lineto
+628.53 413.44 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+560 420.4 moveto 58 (FF: [2,3]) alignedtext
+grestore
+% GCA->AGC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 473.86 358.49 moveto
+465.45 352.58 455.83 347.09 446 344 curveto
+423.66 336.99 397.41 336.82 376.38 338.48 curveto
+stroke
+0 1 1 edgecolor
+newpath 375.84 335.02 moveto
+366.22 339.46 lineto
+376.51 341.99 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 375.84 335.02 moveto
+366.22 339.46 lineto
+376.51 341.99 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+384.5 349.4 moveto 61 (RR: [2,3]) alignedtext
+grestore
+% CAC->GCA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 637.91 390.84 moveto
+632.45 386.42 626.41 382.53 620 380 curveto
+594.76 370.04 564.06 371.19 540.31 374.61 curveto
+stroke
+0 1 1 edgecolor
+newpath 539.56 371.19 moveto
+530.25 376.26 lineto
+540.69 378.1 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 539.56 371.19 moveto
+530.25 376.26 lineto
+540.69 378.1 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+558.5 385.4 moveto 61 (RR: [2,3]) alignedtext
+grestore
+% TCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 534 moveto
+796 638 lineto
+852 638 lineto
+852 534 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+810 621.4 moveto 28 (TCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 612 moveto
+852 612 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+810 595.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 586 moveto
+852 586 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+804 569.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 560 moveto
+852 560 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+812.5 543.4 moveto 23 (1.0) alignedtext
+grestore
+% CAC->TCA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 676.14 475.1 moveto
+682.93 498.09 694.04 523.94 712 542 curveto
+731.85 561.96 761.84 573.1 785.79 579.17 curveto
+stroke
+0 1 1 edgecolor
+newpath 785.1 582.61 moveto
+795.63 581.48 lineto
+786.69 575.79 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 785.1 582.61 moveto
+795.63 581.48 lineto
+786.69 575.79 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+712 575.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% ACT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 411 moveto
+796 515 lineto
+852 515 lineto
+852 411 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+809.5 498.4 moveto 29 (ACT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 489 moveto
+852 489 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+810 472.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 463 moveto
+852 463 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+804 446.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 796 437 moveto
+852 437 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+812.5 420.4 moveto 23 (2.0) alignedtext
+grestore
+% CAC->ACT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 694.38 435.79 moveto
+700.13 438.08 706.2 440.28 712 442 curveto
+736.07 449.14 763.8 454.37 785.64 457.81 curveto
+stroke
+0 0 0 edgecolor
+newpath 785.13 461.28 moveto
+795.54 459.32 lineto
+786.18 454.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 785.13 461.28 moveto
+795.54 459.32 lineto
+786.18 454.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+713.5 457.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% CAC->ACG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 694.32 403.63 moveto
+700.08 399.95 706.16 396.24 712 393 curveto
+729.96 383.04 750.16 373.25 768.42 364.9 curveto
+stroke
+0 0 0 edgecolor
+newpath 770.09 367.99 moveto
+777.76 360.67 lineto
+767.21 361.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 770.09 367.99 moveto
+777.76 360.67 lineto
+767.21 361.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+713.5 398.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AGC->AAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 309.87 316.69 moveto
+304.33 312.73 298.27 309.24 292 307 curveto
+269.95 299.12 243.71 298.69 222.61 300.32 curveto
+stroke
+0 1 1 edgecolor
+newpath 222.03 296.86 moveto
+212.41 301.29 lineto
+222.69 303.82 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 222.03 296.86 moveto
+212.41 301.29 lineto
+222.69 303.82 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+230.5 312.4 moveto 61 (RR: [2,3]) alignedtext
+grestore
+% AGC->GCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 366.41 356.12 moveto
+372.16 358.29 378.22 360.37 384 362 curveto
+410.23 369.39 440.5 374.71 463.81 378.15 curveto
+stroke
+0 0 0 edgecolor
+newpath 463.6 381.66 moveto
+473.99 379.6 lineto
+464.59 374.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 463.6 381.66 moveto
+473.99 379.6 lineto
+464.59 374.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+386 380.4 moveto 58 (FF: [2,3]) alignedtext
+grestore
+% TCA->CAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 795.98 558.77 moveto
+773.08 536.33 740.03 503.51 712 474 curveto
+708.45 470.26 704.78 466.33 701.14 462.37 curveto
+stroke
+0 0 0 edgecolor
+newpath 703.54 459.81 moveto
+694.21 454.79 lineto
+698.38 464.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 703.54 459.81 moveto
+694.21 454.79 lineto
+698.38 464.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+713.5 525.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% GAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 575 moveto
+982 679 lineto
+1038 679 lineto
+1038 575 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+994.5 662.4 moveto 31 (GAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 653 moveto
+1038 653 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+996 636.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 627 moveto
+1038 627 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+990 610.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 601 moveto
+1038 601 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+998.5 584.4 moveto 23 (1.0) alignedtext
+grestore
+% TCA->GAC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 852.14 580.63 moveto
+881.17 576.35 927.28 573.12 964 587 curveto
+967.27 588.24 970.46 589.82 973.53 591.63 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 971.64 594.58 moveto
+981.88 597.29 lineto
+975.57 588.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 971.64 594.58 moveto
+981.88 597.29 lineto
+975.57 588.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+903 592.4 moveto 46 (RF: [3]) alignedtext
+grestore
+% GAC->TCA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 981.71 622.81 moveto
+956.87 618.91 919.83 612.57 888 605 curveto
+879.49 602.98 870.44 600.49 861.9 598 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 862.76 594.6 moveto
+852.17 595.09 lineto
+860.75 601.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 862.76 594.6 moveto
+852.17 595.09 lineto
+860.75 601.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+903 624.4 moveto 46 (RF: [3]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 417 moveto
+982 521 lineto
+1038 521 lineto
+1038 417 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+996 504.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 495 moveto
+1038 495 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+996 478.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 469 moveto
+1038 469 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+990 452.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 443 moveto
+1038 443 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+998.5 426.4 moveto 23 (2.0) alignedtext
+grestore
+% CTA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 997.42 521.2 moveto
+998.83 531.59 1003.03 539 1010 539 curveto
+1014.47 539 1017.79 535.96 1019.98 531.04 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 1023.41 531.76 moveto
+1022.58 521.2 lineto
+1016.64 529.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 1023.41 531.76 moveto
+1022.58 521.2 lineto
+1016.64 529.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+987 544.4 moveto 46 (FR: [3]) alignedtext
+grestore
+% CTA->ACT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 981.51 452.99 moveto
+975.87 450.51 969.87 448.33 964 447 curveto
+930 439.29 890.48 445.12 862.11 451.81 curveto
+stroke
+0 1 1 edgecolor
+newpath 861.05 448.46 moveto
+852.19 454.28 lineto
+862.74 455.25 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 861.05 448.46 moveto
+852.19 454.28 lineto
+862.74 455.25 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+902 452.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% ACT->CAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 795.93 438.9 moveto
+785.37 431.32 772.8 423.9 760 420 curveto
+742.28 414.6 721.8 414.58 704.5 416.22 curveto
+stroke
+0 1 1 edgecolor
+newpath 703.71 412.79 moveto
+694.18 417.43 lineto
+704.52 419.74 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 703.71 412.79 moveto
+694.18 417.43 lineto
+704.52 419.74 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+712 425.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% ACT->CTA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 852.25 463.91 moveto
+884.16 464.94 936.26 466.62 971.79 467.77 curveto
+stroke
+0 0 0 edgecolor
+newpath 971.68 471.27 moveto
+981.79 468.09 lineto
+971.91 464.27 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 971.68 471.27 moveto
+981.79 468.09 lineto
+971.91 464.27 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+903.5 472.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% ACC->GTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 309.86 62.28 moveto
+287.69 55.45 256.25 49.35 230 58 curveto
+226.89 59.03 223.81 60.35 220.82 61.88 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 218.96 58.92 moveto
+212.12 67 lineto
+222.51 64.95 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 218.96 58.92 moveto
+212.12 67 lineto
+222.51 64.95 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+238 63.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ACC->CCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 366.37 83.79 moveto
+372.12 85.54 378.19 87.08 384 88 curveto
+410.39 92.19 440.43 89.8 463.59 86.44 curveto
+stroke
+0 0 0 edgecolor
+newpath 464.38 89.85 moveto
+473.72 84.84 lineto
+463.29 82.94 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 464.38 89.85 moveto
+473.72 84.84 lineto
+463.29 82.94 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+392.5 96.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ACG->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 870.25 320.76 moveto
+909.41 303.53 959.86 281.08 964 278 curveto
+967.62 275.31 971.15 272.29 974.55 269.09 curveto
+stroke
+0 1 1 edgecolor
+newpath 977.17 271.42 moveto
+981.75 261.87 lineto
+972.21 266.48 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 977.17 271.42 moveto
+981.75 261.87 lineto
+972.21 266.48 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+888.5 316.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% ACG->CAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 777.8 334.55 moveto
+756.39 333.8 731.45 336.3 712 348 curveto
+705.61 351.84 699.99 356.95 695.07 362.69 curveto
+stroke
+0 1 1 edgecolor
+newpath 692.1 360.8 moveto
+688.79 370.86 lineto
+697.66 365.07 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 692.1 360.8 moveto
+688.79 370.86 lineto
+697.66 365.07 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+712 353.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CCG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 295 moveto
+982 399 lineto
+1038 399 lineto
+1038 295 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+994.5 382.4 moveto 31 (CCG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 373 moveto
+1038 373 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+996 356.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 347 moveto
+1038 347 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+990 330.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 982 321 moveto
+1038 321 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+998.5 304.4 moveto 23 (1.0) alignedtext
+grestore
+% ACG->CCG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 870.14 356.4 moveto
+876.09 357.88 882.15 359.15 888 360 curveto
+921.43 364.86 930.54 364.64 964 360 curveto
+966.52 359.65 969.09 359.2 971.67 358.68 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 972.62 362.05 moveto
+981.55 356.35 lineto
+971.01 355.23 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 972.62 362.05 moveto
+981.55 356.35 lineto
+971.01 355.23 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+903 368.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% GCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1122 294 moveto
+1122 398 lineto
+1178 398 lineto
+1178 294 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1134.5 381.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1122 372 moveto
+1178 372 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1136 355.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1122 346 moveto
+1178 346 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1130 329.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1122 320 moveto
+1178 320 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1138.5 303.4 moveto 23 (2.0) alignedtext
+grestore
+% GCC->GCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 1137.78 398.2 moveto
+1139.15 408.59 1143.23 416 1150 416 curveto
+1154.34 416 1157.57 412.96 1159.69 408.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1163.12 408.76 moveto
+1162.22 398.2 lineto
+1156.34 407.02 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1163.12 408.76 moveto
+1162.22 398.2 lineto
+1156.34 407.02 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1127 421.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% GCC->CCG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1121.83 332.35 moveto
+1116.06 330.13 1109.93 328.18 1104 327 curveto
+1083.07 322.85 1076.89 322.66 1056 327 curveto
+1053.2 327.58 1050.37 328.34 1047.55 329.23 curveto
+stroke
+0 0 0 edgecolor
+newpath 1046.33 325.95 moveto
+1038.11 332.63 lineto
+1048.71 332.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1046.33 325.95 moveto
+1038.11 332.63 lineto
+1048.71 332.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1057.5 332.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% GCC->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 1178.26 346 moveto
+1198.82 346 1226.89 346 1249.5 346 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 1249.78 349.5 moveto
+1259.78 346 lineto
+1249.78 342.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 1249.78 349.5 moveto
+1259.78 346 lineto
+1249.78 342.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1196 351.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% CCG->ACG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 981.91 340.61 moveto
+976.02 339.52 969.83 338.57 964 338 curveto
+936.56 335.34 905.97 335.63 880.4 336.77 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 879.94 333.29 moveto
+870.13 337.28 lineto
+880.3 340.28 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 879.94 333.29 moveto
+870.13 337.28 lineto
+880.3 340.28 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+903 343.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% CCG->GCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1038.33 346.8 moveto
+1059.39 346.65 1088.37 346.44 1111.53 346.27 curveto
+stroke
+0 1 1 edgecolor
+newpath 1111.74 349.77 moveto
+1121.71 346.2 lineto
+1111.69 342.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1111.74 349.77 moveto
+1121.71 346.2 lineto
+1111.69 342.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1056 351.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AGG->CAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1316.33 346 moveto
+1337.39 346 1366.37 346 1389.53 346 curveto
+stroke
+0 1 1 edgecolor
+newpath 1389.71 349.5 moveto
+1399.71 346 lineto
+1389.71 342.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1389.71 349.5 moveto
+1399.71 346 lineto
+1389.71 342.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1334 351.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AGG->GCC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 1259.51 329.99 moveto
+1253.87 327.51 1247.87 325.33 1242 324 curveto
+1222.06 319.48 1215.94 319.48 1196 324 curveto
+1193.34 324.6 1190.65 325.38 1187.99 326.28 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 1186.53 323.09 moveto
+1178.49 329.99 lineto
+1189.08 329.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 1186.53 323.09 moveto
+1178.49 329.99 lineto
+1189.08 329.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1196 329.4 moveto 46 (FR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 1640 723
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTreePath/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTreePath/test.txt
new file mode 100644
index 0000000..a4992ef
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ComplexTreePath/test.txt
@@ -0,0 +1,21 @@
+TAA {[{AAG:[2,3]}, {AAC:[1,2,3]}] [] [{TAA:[2,3]}] [{GTA:[1]}] {5':[], ~5':[]} 5.0x}
+ACA {[{CAG:[2]}] [] [] [] {5':[], ~5':[]} 1.0x}
+CCA {[] [{ATG:[1]}] [] [{CCC:[1]}] {5':[], ~5':[]} 2.0x}
+GCA {[{CAC:[2,3]}] [] [] [{AGC:[2,3]}] {5':[], ~5':[]} 2.0x}
+TCA {[{CAC:[3]}] [] [{GAC:[3]}] [] {5':[], ~5':[]} 1.0x}
+CTA {[] [{CTA:[3]}] [] [{ACT:[3]}] {5':[], ~5':[]} 2.0x}
+GTA {[{TAA:[1]}] [] [{ACC:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAC {[{ACG:[1,2,3]}] [] [] [{TAA:[1,2,3]}] {5':[], ~5':[]} 3.0x}
+CAC {[{ACT:[3]}, {ACG:[2]}] [] [] [{TCA:[3]}, {GCA:[2,3]}] {5':[], ~5':[]} 3.0x}
+GAC {[] [] [{TCA:[3]}] [] {5':[], ~5':[]} 1.0x}
+ACC {[{CCC:[1]}] [] [{GTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+CCC {[{CCA:[1]}] [] [] [{ACC:[1]}] {5':[], ~5':[]} 1.0x}
+GCC {[{CCG:[2]}] [{AGG:[2]}] [{GCC:[2]}] [] {5':[], ~5':[]} 2.0x}
+AGC {[{GCA:[2,3]}] [] [] [{AAG:[2,3]}] {5':[], ~5':[]} 2.0x}
+AAG {[{AGC:[2,3]}] [] [] [{TAA:[2,3]}] {5':[], ~5':[]} 2.0x}
+CAG {[{AGG:[2]}] [] [] [{ACA:[2]}] {5':[], ~5':[]} 1.0x}
+ACG {[] [{CCG:[2]}] [] [{CAC:[2]}, {AAC:[1,2,3]}] {5':[], ~5':[(2-0_0),(3-0_0),(1-0_0)]} 4.0x}
+CCG {[] [{ACG:[2]}] [] [{GCC:[2]}] {5':[], ~5':[]} 1.0x}
+AGG {[] [{GCC:[2]}] [] [{CAG:[2]}] {5':[], ~5':[]} 1.0x}
+ATG {[] [{CCA:[1]}] [{ATG:[1]}] [] {5':[], ~5':[]} 2.0x}
+ACT {[{CTA:[3]}] [] [] [{CAC:[3]}] {5':[], ~5':[]} 2.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/CyclePath/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/CyclePath/bin/part-00000
new file mode 100755
index 0000000..e1ff8fe
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/CyclePath/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/CyclePath/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/CyclePath/graphviz/result.ps
new file mode 100644
index 0000000..9e84c3d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/CyclePath/graphviz/result.ps
@@ -0,0 +1,804 @@
+%!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 946 249
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 910 213 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% CCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 19 moveto
+0 123 lineto
+56 123 lineto
+56 19 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 106.4 moveto 30 (CCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 97 moveto
+56 97 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 80.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 71 moveto
+56 71 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 54.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 45 moveto
+56 45 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 28.4 moveto 23 (1.0) alignedtext
+grestore
+% CAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 82 moveto
+140 186 lineto
+196 186 lineto
+196 82 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 169.4 moveto 31 (CAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 160 moveto
+196 160 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 143.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 134 moveto
+196 134 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 117.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 108 moveto
+196 108 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 91.4 moveto 23 (2.0) alignedtext
+grestore
+% CCA->CAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56 98.12 moveto
+61.65 102.58 67.77 106.78 74 110 curveto
+91.26 118.91 112.06 124.67 129.69 128.3 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.18 131.76 moveto
+139.66 130.2 lineto
+130.49 124.89 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.18 131.76 moveto
+139.66 130.2 lineto
+130.49 124.89 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 131.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 846 20 moveto
+846 124 lineto
+902 124 lineto
+902 20 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+859 107.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 846 98 moveto
+902 98 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+860 81.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 846 72 moveto
+902 72 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+854 55.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 846 46 moveto
+902 46 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+862.5 29.4 moveto 23 (1.0) alignedtext
+grestore
+% CCA->CCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.03 65.57 moveto
+84.21 60.6 128.95 54 168 54 curveto
+168 54 168 54 734 54 curveto
+768.66 54 807.75 59.49 835.8 64.41 curveto
+stroke
+0 1 1 edgecolor
+newpath 835.52 67.92 moveto
+845.98 66.26 lineto
+836.76 61.03 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 835.52 67.92 moveto
+845.98 66.26 lineto
+836.76 61.03 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+432 59.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CAG->CCA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.99 100.84 moveto
+134.48 95.9 128.4 91.35 122 88 curveto
+104.93 79.06 83.99 74.74 66.21 72.68 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.45 69.18 moveto
+56.16 71.71 lineto
+65.78 76.15 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.45 69.18 moveto
+56.16 71.71 lineto
+65.78 76.15 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 93.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA
+gsave
+0 0 0.75294 nodecolor
+newpath 280.5 101 moveto
+280.5 205 lineto
+345.5 205 lineto
+345.5 101 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280.5 101 moveto
+280.5 205 lineto
+345.5 205 lineto
+345.5 101 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+297.5 188.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280.5 179 moveto
+345.5 179 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+299 162.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280.5 153 moveto
+345.5 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288.5 136.4 moveto 49 (~5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280.5 127 moveto
+345.5 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+301.5 110.4 moveto 23 (2.0) alignedtext
+grestore
+% CAG->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196 142.95 moveto
+201.89 144.54 208.11 146 214 147 curveto
+232.14 150.08 252.38 151.63 269.8 152.4 curveto
+stroke
+0 0 0 edgecolor
+newpath 270.13 155.91 moveto
+280.25 152.78 lineto
+270.38 148.91 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 270.13 155.91 moveto
+280.25 152.78 lineto
+270.38 148.91 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 156.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CCC->CCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 845.86 47.42 moveto
+819.02 26.57 776.5 0 734 0 curveto
+168 0 168 0 168 0 curveto
+129.76 0 91.38 21.33 64.5 40.61 curveto
+stroke
+0 0 0 edgecolor
+newpath 62.15 38 moveto
+56.2 46.76 lineto
+66.31 43.62 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 62.15 38 moveto
+56.2 46.76 lineto
+66.31 43.62 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+433.5 5.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 706 82 moveto
+706 186 lineto
+762 186 lineto
+762 82 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+718.5 169.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 706 160 moveto
+762 160 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+720 143.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 706 134 moveto
+762 134 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+714 117.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 706 108 moveto
+762 108 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+722.5 91.4 moveto 23 (1.0) alignedtext
+grestore
+% CCC->GCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 845.97 74.07 moveto
+826.57 76.41 800.63 81.4 780 92 curveto
+776.68 93.71 773.42 95.72 770.26 97.92 curveto
+stroke
+0 1 1 edgecolor
+newpath 767.98 95.26 moveto
+762.17 104.11 lineto
+772.24 100.81 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 767.98 95.26 moveto
+762.17 104.11 lineto
+772.24 100.81 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+780 97.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->CAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 280.28 135.06 moveto
+274.36 132.55 268.11 130.37 262 129 curveto
+244.04 124.98 223.69 125.47 206.52 127.27 curveto
+stroke
+0 1 1 edgecolor
+newpath 205.8 123.84 moveto
+196.3 128.54 lineto
+206.66 130.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 205.8 123.84 moveto
+196.3 128.54 lineto
+206.66 130.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 134.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428 95 moveto
+428 199 lineto
+484 199 lineto
+484 95 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+442 182.4 moveto 28 (CTC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428 173 moveto
+484 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+442 156.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428 147 moveto
+484 147 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+436 130.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428 121 moveto
+484 121 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+444.5 104.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 345.81 151.62 moveto
+367.16 150.73 395.11 149.55 417.51 148.61 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 417.85 152.1 moveto
+427.69 148.19 lineto
+417.55 145.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 417.85 152.1 moveto
+427.69 148.19 lineto
+417.55 145.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+364 155.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CTC->AGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 427.95 131.92 moveto
+422.17 129.47 416 127.31 410 126 curveto
+390.02 121.66 383.84 121.07 364 126 curveto
+360.99 126.75 357.95 127.71 354.95 128.83 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 353.37 125.7 moveto
+345.53 132.83 lineto
+356.1 132.14 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 353.37 125.7 moveto
+345.53 132.83 lineto
+356.1 132.14 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+364 131.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 566 95 moveto
+566 199 lineto
+622 199 lineto
+622 95 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+578.5 182.4 moveto 31 (AGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 566 173 moveto
+622 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+580 156.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 566 147 moveto
+622 147 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574 130.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 566 121 moveto
+622 121 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+582.5 104.4 moveto 23 (1.0) alignedtext
+grestore
+% CTC->AGC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 484.26 147 moveto
+504.82 147 532.89 147 555.5 147 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 555.78 150.5 moveto
+565.78 147 lineto
+555.78 143.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 555.78 150.5 moveto
+565.78 147 lineto
+555.78 143.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+502 152.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% GCC->CCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 762.3 130.12 moveto
+781.58 126.68 807.28 120.53 828 110 curveto
+831.29 108.33 834.55 106.39 837.73 104.29 curveto
+stroke
+0 0 0 edgecolor
+newpath 839.83 107.08 moveto
+845.92 98.41 lineto
+835.75 101.4 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 839.83 107.08 moveto
+845.92 98.41 lineto
+835.75 101.4 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+781.5 131.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GCC->AGC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 705.84 114.38 moveto
+700.17 111.33 694.08 108.65 688 107 curveto
+667.41 101.4 659.98 99.53 640 107 curveto
+636.73 108.22 633.54 109.8 630.46 111.61 curveto
+stroke
+0 1 1 edgecolor
+newpath 628.43 108.75 moveto
+622.11 117.25 lineto
+632.35 114.55 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 628.43 108.75 moveto
+622.11 117.25 lineto
+632.35 114.55 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+640 112.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGC->CTC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 565.77 128.1 moveto
+560.11 125.17 554.03 122.59 548 121 curveto
+528.23 115.8 521.77 115.8 502 121 curveto
+499.17 121.74 496.34 122.71 493.54 123.82 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 491.85 120.74 moveto
+484.23 128.1 lineto
+494.77 127.1 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 491.85 120.74 moveto
+484.23 128.1 lineto
+494.77 127.1 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+502 126.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% AGC->GCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 622.33 144.37 moveto
+643.39 142.41 672.37 139.72 695.53 137.57 curveto
+stroke
+0 0 0 edgecolor
+newpath 696.08 141.04 moveto
+705.71 136.63 lineto
+695.43 134.07 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 696.08 141.04 moveto
+705.71 136.63 lineto
+695.43 134.07 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+641.5 147.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 946 249
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/CyclePath/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/CyclePath/test.txt
new file mode 100644
index 0000000..cc4b32b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/CyclePath/test.txt
@@ -0,0 +1,7 @@
+CCA {[{CAG:[1]}] [] [] [{CCC:[1]}] {5':[], ~5':[]} 1.0x}
+AGA {[] [{CTC:[1]}] [] [{CAG:[1]}] {5':[], ~5':[(1-0_0)]} 2.0x}
+CCC {[{CCA:[1]}] [] [] [{GCC:[1]}] {5':[], ~5':[]} 1.0x}
+GCC {[{CCC:[1]}] [] [] [{AGC:[1]}] {5':[], ~5':[]} 1.0x}
+AGC {[{GCC:[1]}] [] [{CTC:[1]}] [] {5':[], ~5':[]} 1.0x}
+CTC {[] [{AGA:[1]}] [{AGC:[1]}] [] {5':[], ~5':[]} 1.0x}
+CAG {[{AGA:[1]}] [] [] [{CCA:[1]}] {5':[], ~5':[]} 2.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/..binmerge.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/..binmerge.crc
new file mode 100644
index 0000000..eb709bd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/..binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/.binmerge b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/.binmerge
new file mode 100755
index 0000000..f7eefdf
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/.binmerge
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/bin/.part-00000.crc
new file mode 100644
index 0000000..ed34868
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/bin/part-00000
new file mode 100755
index 0000000..1ccd2f5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/data
new file mode 100644
index 0000000..efd4331
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/data
@@ -0,0 +1,2 @@
+ATA {[] [{CTA:[1]}] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [] [] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/graphviz/result.ps
new file mode 100644
index 0000000..f9fb5b5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/FR/graphviz/result.ps
@@ -0,0 +1,329 @@
+%!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 238 148
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 202 112 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 87.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 0 moveto
+138 104 lineto
+194 104 lineto
+194 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 78 moveto
+194 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 52 moveto
+194 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+146 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 26 moveto
+194 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 56.26 52 moveto
+76.82 52 104.89 52 127.5 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 127.78 55.5 moveto
+137.78 52 lineto
+127.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 127.78 55.5 moveto
+137.78 52 lineto
+127.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 137.51 35.99 moveto
+131.87 33.51 125.87 31.33 120 30 curveto
+100.06 25.48 93.94 25.48 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 35.4 moveto 46 (FR: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 238 148
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/bin/.part-00000.crc
new file mode 100644
index 0000000..1474029
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/bin/part-00000
new file mode 100755
index 0000000..9b737e9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/data
new file mode 100644
index 0000000..53ef518
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/data
@@ -0,0 +1,6 @@
+AAA {[{AAC:[1,2]}] [] [] [{GAA:[2]}, {CAA:[1]}] {5':[], ~5':[]} 2.0x}
+CAA {[{AAA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+GAA {[{AAA:[2]}] [] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+TAA {[{AAC:[3]}] [] [] [] {5':[(3-0_0)], ~5':[]} 1.0x}
+AAC {[{ACC:[1,2,3]}] [] [] [{TAA:[3]}, {AAA:[1,2]}] {5':[], ~5':[]} 3.0x}
+ACC {[] [] [] [{AAC:[1,2,3]}] {5':[], ~5':[]} 3.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/graphviz/result.ps
new file mode 100644
index 0000000..a259444
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/LeftAdj/graphviz/result.ps
@@ -0,0 +1,691 @@
+%!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 422 452
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 386 416 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 136 moveto
+0 240 lineto
+56 240 lineto
+56 136 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 223.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 214 moveto
+56 214 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 197.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 188 moveto
+56 188 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 171.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 162 moveto
+56 162 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 145.4 moveto 23 (2.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 244 moveto
+154 348 lineto
+210 348 lineto
+210 244 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166.5 331.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 322 moveto
+210 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+168 305.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 296 moveto
+210 296 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162 279.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 270 moveto
+210 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 253.4 moveto 23 (3.0) alignedtext
+grestore
+% AAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 47.76 240.32 moveto
+54.46 252.25 63.1 263.81 74 272 curveto
+93.89 286.94 121.29 292.9 143.51 295.15 curveto
+stroke
+0 0 0 edgecolor
+newpath 143.39 298.65 moveto
+153.63 295.96 lineto
+143.94 291.68 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 143.39 298.65 moveto
+153.63 295.96 lineto
+143.94 291.68 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76 299.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% GAA
+gsave
+0 0 0.75294 nodecolor
+newpath 154 122 moveto
+154 226 lineto
+210 226 lineto
+210 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 122 moveto
+154 226 lineto
+210 226 lineto
+210 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166 209.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 200 moveto
+210 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+163.5 183.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 174 moveto
+210 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 148 moveto
+210 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.13 189.77 moveto
+78.01 190.67 109.09 190.86 136 187 curveto
+138.52 186.64 141.09 186.18 143.67 185.65 curveto
+stroke
+0 1 1 edgecolor
+newpath 144.62 189.02 moveto
+153.54 183.31 lineto
+143.01 182.21 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 144.62 189.02 moveto
+153.54 183.31 lineto
+143.01 182.21 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81 195.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CAA
+gsave
+0 0 0.75294 nodecolor
+newpath 154 0 moveto
+154 104 lineto
+210 104 lineto
+210 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 0 moveto
+154 104 lineto
+210 104 lineto
+210 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166.5 87.4 moveto 31 (CAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 78 moveto
+210 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+163.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 52 moveto
+210 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 26 moveto
+210 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->CAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.01 157.31 moveto
+61.79 151.4 67.97 145.37 74 140 curveto
+99.82 117 109.29 114.97 136 93 curveto
+139.25 90.32 142.59 87.5 145.92 84.64 curveto
+stroke
+0 1 1 edgecolor
+newpath 148.36 87.16 moveto
+153.6 77.95 lineto
+143.76 81.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 148.36 87.16 moveto
+153.6 77.95 lineto
+143.76 81.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81 145.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 153.88 265.56 moveto
+148.2 260.1 142.1 254.67 136 250 curveto
+123.68 240.57 91.21 222.21 65.06 207.91 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.58 204.75 moveto
+56.12 203.04 lineto
+63.23 210.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.58 204.75 moveto
+56.12 203.04 lineto
+63.23 210.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 255.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% TAA
+gsave
+0 0 0.75294 nodecolor
+newpath 322 304 moveto
+322 408 lineto
+378 408 lineto
+378 304 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 322 304 moveto
+322 408 lineto
+378 408 lineto
+378 304 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+335.5 391.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 322 382 moveto
+378 382 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+331.5 365.4 moveto 37 (5':[3]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 322 356 moveto
+378 356 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+330 339.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 322 330 moveto
+378 330 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+338.5 313.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 210.06 323.73 moveto
+215.65 328.07 221.74 332.08 228 335 curveto
+254.24 347.25 286.66 352.42 311.48 354.58 curveto
+stroke
+0 1 1 edgecolor
+newpath 311.38 358.08 moveto
+321.61 355.32 lineto
+311.9 351.1 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 311.38 358.08 moveto
+321.61 355.32 lineto
+311.9 351.1 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+242 358.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% ACC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 322 182 moveto
+322 286 lineto
+378 286 lineto
+378 182 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+335 269.4 moveto 30 (ACC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 322 260 moveto
+378 260 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+336 243.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 322 234 moveto
+378 234 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+330 217.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 322 208 moveto
+378 208 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+338.5 191.4 moveto 23 (3.0) alignedtext
+grestore
+% AAC->ACC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 210.01 283.21 moveto
+215.9 280.69 222.11 278.16 228 276 curveto
+261.13 263.83 270.76 264.86 304 253 curveto
+306.75 252.02 309.57 250.97 312.4 249.88 curveto
+stroke
+0 0 0 edgecolor
+newpath 313.94 253.03 moveto
+321.95 246.1 lineto
+311.36 246.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 313.94 253.03 moveto
+321.95 246.1 lineto
+311.36 246.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+230 281.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% GAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 153.67 166.86 moveto
+131.67 162.45 100.55 158.73 74 165 curveto
+71.32 165.63 68.62 166.45 65.95 167.39 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 170.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 153.63 49.79 moveto
+129.83 49.47 96.26 52.81 74 71 curveto
+57 84.89 46.26 105.92 39.48 126.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 36.12 125.39 moveto
+36.55 135.97 lineto
+42.81 127.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 36.12 125.39 moveto
+36.55 135.97 lineto
+42.81 127.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 76.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% TAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 321.94 328.27 moveto
+316.35 323.93 310.26 319.92 304 317 curveto
+277.76 304.75 245.34 299.58 220.52 297.42 curveto
+stroke
+0 0 0 edgecolor
+newpath 220.62 293.92 moveto
+210.39 296.68 lineto
+220.1 300.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 220.62 293.92 moveto
+210.39 296.68 lineto
+220.1 300.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+243.5 322.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% ACC->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 321.88 225.98 moveto
+295.99 220.22 257.26 215.86 228 231 curveto
+224.2 232.97 220.65 235.41 217.34 238.18 curveto
+stroke
+0 1 1 edgecolor
+newpath 214.84 235.72 moveto
+210.05 245.17 lineto
+219.69 240.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 214.84 235.72 moveto
+210.05 245.17 lineto
+219.69 240.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+228.5 236.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 422 452
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/..binmerge.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/..binmerge.crc
new file mode 100644
index 0000000..f615d7a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/..binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/.binmerge b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/.binmerge
new file mode 100755
index 0000000..e996933
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/.binmerge
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/bin/.part-00000.crc
new file mode 100644
index 0000000..c7abd4b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/bin/part-00000
new file mode 100755
index 0000000..dae9aa0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/data
new file mode 100644
index 0000000..dbffaeb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/data
@@ -0,0 +1,2 @@
+AGA {[] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+CTA {[] [] [{AGA:[1]}] [] {5':[], ~5':[(1-0_0)]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/graphviz/result.ps
new file mode 100644
index 0000000..a8adbf3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RF/graphviz/result.ps
@@ -0,0 +1,329 @@
+%!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 248 148
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 212 112 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA
+gsave
+0 0 0.75294 nodecolor
+newpath 138.5 0 moveto
+138.5 104 lineto
+203.5 104 lineto
+203.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 138.5 0 moveto
+138.5 104 lineto
+203.5 104 lineto
+203.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+157 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 138.5 78 moveto
+203.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+157 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 138.5 52 moveto
+203.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+146.5 35.4 moveto 49 (~5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 138.5 26 moveto
+203.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+159.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.25 52 moveto
+76.72 52 104.77 52 128.01 52 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 128.3 55.5 moveto
+138.3 52 lineto
+128.3 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 128.3 55.5 moveto
+138.3 52 lineto
+128.3 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 138.44 35.65 moveto
+132.45 33.31 126.14 31.27 120 30 curveto
+99.98 25.87 93.94 25.48 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 35.4 moveto 46 (RF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 248 148
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/bin/.part-00000.crc
new file mode 100644
index 0000000..8224396
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/bin/part-00000
new file mode 100755
index 0000000..66956cf
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/data
new file mode 100644
index 0000000..c46c274
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/data
@@ -0,0 +1,6 @@
+AAA {[{AAT:[3]}, {AAC:[1,2]}] [] [] [{GAA:[1,2,3]}] {5':[], ~5':[]} 3.0x}
+GAA {[{AAA:[1,2,3]}] [] [] [] {5':[(2-0_0),(3-0_0),(1-0_0)], ~5':[]} 3.0x}
+AAC {[{ACG:[1]}, {ACC:[2]}] [] [] [{AAA:[1,2]}] {5':[], ~5':[]} 2.0x}
+ACC {[] [] [] [{AAC:[2]}] {5':[], ~5':[]} 1.0x}
+ACG {[] [] [] [{AAC:[1]}] {5':[], ~5':[]} 1.0x}
+AAT {[] [] [] [{AAA:[3]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/graphviz/result.ps
new file mode 100644
index 0000000..7662ee1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RightAdj/graphviz/result.ps
@@ -0,0 +1,671 @@
+%!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 432 392
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 396 356 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 136 moveto
+0 240 lineto
+56 240 lineto
+56 136 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 223.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 214 moveto
+56 214 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 197.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 188 moveto
+56 188 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 171.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 162 moveto
+56 162 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 145.4 moveto 23 (3.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 244 moveto
+180 348 lineto
+236 348 lineto
+236 244 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+193.5 331.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 322 moveto
+236 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+194 305.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 296 moveto
+236 296 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 279.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 270 moveto
+236 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 253.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 47.28 240.2 moveto
+54.02 252.28 62.8 263.94 74 272 curveto
+101.77 291.97 140.97 297.03 169.8 297.66 curveto
+stroke
+0 0 0 edgecolor
+newpath 169.89 301.16 moveto
+179.91 297.71 lineto
+169.93 294.16 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 169.89 301.16 moveto
+179.91 297.71 lineto
+169.93 294.16 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+89.5 301.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 122 moveto
+180 226 lineto
+236 226 lineto
+236 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+192.5 209.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 200 moveto
+236 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+194 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 174 moveto
+236 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 148 moveto
+236 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 131.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.21 189.46 moveto
+81 190.34 118.01 190.67 150 187 curveto
+156.46 186.26 163.25 185.09 169.82 183.76 curveto
+stroke
+0 0 0 edgecolor
+newpath 170.86 187.12 moveto
+179.88 181.56 lineto
+169.37 180.28 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 170.86 187.12 moveto
+179.88 181.56 lineto
+169.37 180.28 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+83 195.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% GAA
+gsave
+0 0 0.75294 nodecolor
+newpath 168 0 moveto
+168 104 lineto
+248 104 lineto
+248 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 0 moveto
+168 104 lineto
+248 104 lineto
+248 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+192 87.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 78 moveto
+248 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+176 61.4 moveto 64 (5':[2,3,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 52 moveto
+248 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 26 moveto
+248 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAA->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.16 154.62 moveto
+61.78 148.77 67.86 142.97 74 138 curveto
+104.5 113.29 117.06 114.35 150 93 curveto
+153.08 91.01 156.23 88.92 159.38 86.79 curveto
+stroke
+0 1 1 edgecolor
+newpath 161.44 89.63 moveto
+167.72 81.1 lineto
+157.49 83.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 161.44 89.63 moveto
+167.72 81.1 lineto
+157.49 83.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 143.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 179.96 271.85 moveto
+170.72 264.42 160.19 256.49 150 250 curveto
+118.15 229.71 107.63 229.18 74 212 curveto
+71.11 210.52 68.13 208.99 65.13 207.44 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.67 204.3 moveto
+56.18 202.8 lineto
+63.45 210.51 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.67 204.3 moveto
+56.18 202.8 lineto
+63.45 210.51 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+88 255.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% AAC->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 179.89 167.33 moveto
+152.49 161.95 109.85 156.54 74 165 curveto
+71.32 165.63 68.62 166.45 65.95 167.39 curveto
+stroke
+0 1 1 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81.5 170.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% ACG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 182 moveto
+332 286 lineto
+388 286 lineto
+388 182 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+344.5 269.4 moveto 31 (ACG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 260 moveto
+388 260 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+346 243.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 234 moveto
+388 234 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+340 217.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 208 moveto
+388 208 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+348.5 191.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->ACG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 236.28 196.08 moveto
+245.37 202.32 255.74 208.59 266 213 curveto
+283.59 220.56 304.26 225.56 321.73 228.78 curveto
+stroke
+0 0 0 edgecolor
+newpath 321.14 232.23 moveto
+331.59 230.47 lineto
+322.33 225.33 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 321.14 232.23 moveto
+331.59 230.47 lineto
+322.33 225.33 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+267.5 232.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ACC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 60 moveto
+332 164 lineto
+388 164 lineto
+388 60 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+345 147.4 moveto 30 (ACC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 138 moveto
+388 138 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+346 121.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 112 moveto
+388 112 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+340 95.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 86 moveto
+388 86 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+348.5 69.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->ACC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 236.36 162.55 moveto
+257.72 153.91 287.72 141.76 314 131 curveto
+316.7 129.9 319.49 128.75 322.29 127.6 curveto
+stroke
+0 0 0 edgecolor
+newpath 323.88 130.73 moveto
+331.79 123.68 lineto
+321.21 124.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 323.88 130.73 moveto
+331.79 123.68 lineto
+321.21 124.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+267.5 154.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% GAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 167.83 47.65 moveto
+138.82 46.71 100.28 50.25 74 71 curveto
+56.7 84.66 45.89 105.76 39.14 126.29 curveto
+stroke
+0 0 0 edgecolor
+newpath 35.76 125.39 moveto
+36.23 135.98 lineto
+42.46 127.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 35.76 125.39 moveto
+36.23 135.98 lineto
+42.46 127.41 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76 76.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% ACG->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 331.79 202.91 moveto
+326.3 198.3 320.28 194.08 314 191 curveto
+293.09 180.76 267.36 176.47 246.48 174.75 curveto
+stroke
+0 1 1 edgecolor
+newpath 246.57 171.25 moveto
+236.36 174.09 lineto
+246.11 178.24 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 246.57 171.25 moveto
+236.36 174.09 lineto
+246.11 178.24 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+266 196.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ACC->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 331.6 104.8 moveto
+312.27 101.38 286.56 99.79 266 109 curveto
+257.69 112.72 250.08 118.29 243.3 124.63 curveto
+stroke
+0 1 1 edgecolor
+newpath 240.8 122.18 moveto
+236.27 131.76 lineto
+245.78 127.09 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 240.8 122.18 moveto
+236.27 131.76 lineto
+245.78 127.09 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+266 114.4 moveto 48 (RR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 432 392
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/..binmerge.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/..binmerge.crc
new file mode 100644
index 0000000..890e9d3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/..binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/.binmerge b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/.binmerge
new file mode 100755
index 0000000..196d723
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/.binmerge
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/bin/.part-00000.crc
new file mode 100644
index 0000000..469efeb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/bin/part-00000
new file mode 100755
index 0000000..9c75a38
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/data
new file mode 100644
index 0000000..7ba9403
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/data
@@ -0,0 +1,8 @@
+CCA {[{CAG:[1,2]}] [] [] [{CCC:[1,2]}] {5':[], ~5':[]} 2.0x}
+AGA {[] [{CTC:[1,2]}] [] [{AAG:[2]}, {CAG:[1]}] {5':[], ~5':[(1-0_0)]} 3.0x}
+CCC {[{CCA:[1,2]}] [] [] [{GCC:[1,2]}] {5':[], ~5':[]} 2.0x}
+GCC {[{CCC:[1,2]}] [] [] [{AGC:[1,2]}] {5':[], ~5':[]} 2.0x}
+AGC {[{GCC:[1,2]}] [] [{CTC:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+CTC {[] [{AGA:[1,2]}] [{AGC:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+AAG {[{AGA:[2]}] [] [] [] {5':[], ~5':[]} 1.0x}
+CAG {[{AGA:[1]}] [] [] [{CCA:[1,2]}] {5':[], ~5':[(2-0_0)]} 3.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/graphviz/result.ps
new file mode 100644
index 0000000..b61cb2d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/RingPath/graphviz/result.ps
@@ -0,0 +1,899 @@
+%!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 1032 360
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 996 324 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% CCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 19 moveto
+0 123 lineto
+56 123 lineto
+56 19 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 106.4 moveto 30 (CCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 97 moveto
+56 97 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 80.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 71 moveto
+56 71 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 54.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 45 moveto
+56 45 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 28.4 moveto 23 (2.0) alignedtext
+grestore
+% CAG
+gsave
+0 0 0.75294 nodecolor
+newpath 154.5 85 moveto
+154.5 189 lineto
+219.5 189 lineto
+219.5 85 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154.5 85 moveto
+154.5 189 lineto
+219.5 189 lineto
+219.5 85 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+171.5 172.4 moveto 31 (CAG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154.5 163 moveto
+219.5 163 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+173 146.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154.5 137 moveto
+219.5 137 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162.5 120.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154.5 111 moveto
+219.5 111 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+175.5 94.4 moveto 23 (3.0) alignedtext
+grestore
+% CCA->CAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.22 98.4 moveto
+61.79 102.77 67.84 106.88 74 110 curveto
+95.9 121.09 122.52 127.74 144.42 131.66 curveto
+stroke
+0 0 0 edgecolor
+newpath 144 135.14 moveto
+154.44 133.33 lineto
+145.15 128.24 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 144 135.14 moveto
+154.44 133.33 lineto
+145.15 128.24 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76 134.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 932 20 moveto
+932 124 lineto
+988 124 lineto
+988 20 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+945 107.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 932 98 moveto
+988 98 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+946 81.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 932 72 moveto
+988 72 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+940 55.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 932 46 moveto
+988 46 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+948.5 29.4 moveto 23 (2.0) alignedtext
+grestore
+% CCA->CCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.05 66.17 moveto
+87.74 61.15 140.92 54 187 54 curveto
+187 54 187 54 806 54 curveto
+845.66 54 890.68 59.96 921.76 65.02 curveto
+stroke
+0 1 1 edgecolor
+newpath 921.29 68.5 moveto
+931.73 66.7 lineto
+922.45 61.59 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 921.29 68.5 moveto
+931.73 66.7 lineto
+922.45 61.59 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+466.5 59.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% CAG->CCA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 154.41 100.33 moveto
+148.7 95.56 142.49 91.22 136 88 curveto
+114.38 77.27 87.58 73 66.09 71.43 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.19 67.93 moveto
+56.01 70.85 lineto
+65.8 74.92 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.19 67.93 moveto
+56.01 70.85 lineto
+65.8 74.92 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 93.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AGA
+gsave
+0 0 0.75294 nodecolor
+newpath 304.5 129 moveto
+304.5 233 lineto
+369.5 233 lineto
+369.5 129 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 304.5 129 moveto
+304.5 233 lineto
+369.5 233 lineto
+369.5 129 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+321.5 216.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 304.5 207 moveto
+369.5 207 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+323 190.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 304.5 181 moveto
+369.5 181 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+312.5 164.4 moveto 49 (~5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 304.5 155 moveto
+369.5 155 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+325.5 138.4 moveto 23 (3.0) alignedtext
+grestore
+% CAG->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 219.69 150.57 moveto
+225.72 152.87 232.01 155.11 238 157 curveto
+256.19 162.74 276.62 167.9 294.18 171.96 curveto
+stroke
+0 0 0 edgecolor
+newpath 293.62 175.42 moveto
+304.14 174.21 lineto
+295.16 168.59 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 293.62 175.42 moveto
+304.14 174.21 lineto
+295.16 168.59 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+239.5 174.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CCC->CCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 931.75 49.61 moveto
+902.18 28.48 853.52 0 806 0 curveto
+187 0 187 0 187 0 curveto
+142.15 0 95.88 23.84 64.91 43.9 curveto
+stroke
+0 0 0 edgecolor
+newpath 62.58 41.24 moveto
+56.2 49.7 lineto
+66.46 47.07 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 62.58 41.24 moveto
+56.2 49.7 lineto
+66.46 47.07 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+468 5.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% GCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 83 moveto
+778 187 lineto
+834 187 lineto
+834 83 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+790.5 170.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 161 moveto
+834 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+792 144.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 135 moveto
+834 135 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+786 118.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 109 moveto
+834 109 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+794.5 92.4 moveto 23 (2.0) alignedtext
+grestore
+% CCC->GCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 931.58 73.32 moveto
+908.97 75.33 877.08 80.38 852 93 curveto
+848.66 94.68 845.39 96.67 842.22 98.85 curveto
+stroke
+0 1 1 edgecolor
+newpath 839.96 96.18 moveto
+834.12 105.02 lineto
+844.2 101.75 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 839.96 96.18 moveto
+834.12 105.02 lineto
+844.2 101.75 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+852.5 98.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AGA->CAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 304.44 149.04 moveto
+298.68 144.97 292.45 141.39 286 139 curveto
+268.35 132.46 247.68 131.15 229.81 131.79 curveto
+stroke
+0 1 1 edgecolor
+newpath 229.44 128.31 moveto
+219.65 132.37 lineto
+229.84 135.3 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 229.44 128.31 moveto
+219.65 132.37 lineto
+229.84 135.3 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+238 144.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 469 212 moveto
+469 316 lineto
+525 316 lineto
+525 212 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+483 299.4 moveto 28 (CTC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 469 290 moveto
+525 290 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+483 273.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 469 264 moveto
+525 264 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+477 247.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 469 238 moveto
+525 238 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+485.5 221.4 moveto 23 (2.0) alignedtext
+grestore
+% AGA->CTC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 369.7 226.47 moveto
+375.28 232.01 381.42 237.08 388 241 curveto
+409.37 253.73 436.79 259.47 458.78 262.04 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 458.47 265.52 moveto
+468.77 263.03 lineto
+459.16 258.56 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 458.47 265.52 moveto
+468.77 263.03 lineto
+459.16 258.56 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+388 265.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 469 90 moveto
+469 194 lineto
+525 194 lineto
+525 90 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+481 177.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 469 168 moveto
+525 168 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+483 151.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 469 142 moveto
+525 142 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+477 125.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 469 116 moveto
+525 116 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+485.5 99.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->AAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 369.82 175.72 moveto
+392.06 171.85 422.02 166.04 448 159 curveto
+451.65 158.01 455.42 156.89 459.17 155.71 curveto
+stroke
+0 1 1 edgecolor
+newpath 460.57 158.93 moveto
+468.96 152.47 lineto
+458.37 152.28 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 460.57 158.93 moveto
+468.96 152.47 lineto
+458.37 152.28 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+394 176.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CTC->AGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 468.79 234.5 moveto
+462.35 228.82 455.25 223.31 448 219 curveto
+426.84 206.42 400.92 197.25 379.45 191.07 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 380.19 187.65 moveto
+369.62 188.36 lineto
+378.33 194.39 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 380.19 187.65 moveto
+369.62 188.36 lineto
+378.33 194.39 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+388 224.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% AGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 624 134 moveto
+624 238 lineto
+680 238 lineto
+680 134 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+636.5 221.4 moveto 31 (AGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 624 212 moveto
+680 212 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+638 195.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 624 186 moveto
+680 186 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+632 169.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 624 160 moveto
+680 160 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+640.5 143.4 moveto 23 (2.0) alignedtext
+grestore
+% CTC->AGC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 525.26 263.08 moveto
+548.43 261.2 581.3 255.84 606 241 curveto
+609.66 238.8 613.17 236.2 616.49 233.35 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 619.07 235.73 moveto
+623.92 226.31 lineto
+614.25 230.65 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 619.07 235.73 moveto
+623.92 226.31 lineto
+614.25 230.65 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+546 265.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% AAG->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 468.74 134.78 moveto
+446.17 130.39 414.1 127.3 388 137 curveto
+384.67 138.24 381.4 139.81 378.24 141.6 curveto
+stroke
+0 0 0 edgecolor
+newpath 376.11 138.82 moveto
+369.63 147.21 lineto
+379.92 144.69 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 376.11 138.82 moveto
+369.63 147.21 lineto
+379.92 144.69 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+395.5 142.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% GCC->CCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 834.31 132.48 moveto
+856.86 129.61 888.71 123.56 914 111 curveto
+917.29 109.37 920.54 107.45 923.7 105.36 curveto
+stroke
+0 0 0 edgecolor
+newpath 925.77 108.18 moveto
+931.82 99.48 lineto
+921.67 102.51 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 925.77 108.18 moveto
+931.82 99.48 lineto
+921.67 102.51 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+854 134.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% GCC->AGC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 777.66 130.89 moveto
+755.1 128.86 723.24 128.85 698 140 curveto
+694.6 141.5 691.31 143.38 688.16 145.51 curveto
+stroke
+0 1 1 edgecolor
+newpath 685.96 142.79 moveto
+680.18 151.66 lineto
+690.23 148.33 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 685.96 142.79 moveto
+680.18 151.66 lineto
+690.23 148.33 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+698.5 145.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AGC->CTC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 623.81 192.84 moveto
+601.75 198.89 570.75 208.95 546 223 curveto
+541.76 225.41 537.53 228.19 533.44 231.16 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 531.06 228.58 moveto
+525.26 237.44 lineto
+535.32 234.13 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 531.06 228.58 moveto
+525.26 237.44 lineto
+535.32 234.13 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+546 228.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% AGC->GCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 680.02 180.43 moveto
+702.12 175.64 733.52 167.93 760 158 curveto
+762.83 156.94 765.73 155.75 768.61 154.5 curveto
+stroke
+0 0 0 edgecolor
+newpath 770.09 157.67 moveto
+777.71 150.31 lineto
+767.16 151.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 770.09 157.67 moveto
+777.71 150.31 lineto
+767.16 151.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+700 181.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 1032 360
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SelfTandemRepeat/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/SelfTandemRepeat/bin/part-00000
new file mode 100755
index 0000000..0d0e9a8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SelfTandemRepeat/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SelfTandemRepeat/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/SelfTandemRepeat/graphviz/result.ps
new file mode 100644
index 0000000..bcdea9d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SelfTandemRepeat/graphviz/result.ps
@@ -0,0 +1,268 @@
+%!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 110 184
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 74 148 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GCC
+gsave
+0 0 0.75294 nodecolor
+newpath .5 0 moveto
+.5 104 lineto
+65.5 104 lineto
+65.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 0 moveto
+.5 104 lineto
+65.5 104 lineto
+65.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+17.5 87.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 78 moveto
+65.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+19 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 52 moveto
+65.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 35.4 moveto 49 (~5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 26 moveto
+65.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+21.5 9.4 moveto 23 (2.0) alignedtext
+grestore
+% GCC->GCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 21.5 104.2 moveto
+22.79 114.59 26.63 122 33 122 curveto
+37.08 122 40.13 118.96 42.12 114.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 45.56 114.74 moveto
+44.5 104.2 lineto
+38.75 113.1 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 45.56 114.74 moveto
+44.5 104.2 lineto
+38.75 113.1 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+10 127.4 moveto 46 (RF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 110 184
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SelfTandemRepeat/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/SelfTandemRepeat/test.txt
new file mode 100644
index 0000000..830daaa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SelfTandemRepeat/test.txt
@@ -0,0 +1 @@
+GCC {[] [] [{GCC:[1]}] [] {5':[], ~5':[(1-0_0)]} 2.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/bin/.part-00000.crc
new file mode 100644
index 0000000..61345b4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/bin/part-00000
new file mode 100755
index 0000000..fe0d8d3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/data
new file mode 100644
index 0000000..43d9cfc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/data
@@ -0,0 +1,12 @@
+GAA {[{AAC:[1]}] [] [] [{AGA:[1]}] {5':[], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1,2]}] [] [{AAT:[1,2]}] {5':[], ~5':[]} 2.0x}
+CTA {[] [{ATA:[1,2]}] [{AGC:[2]}, {AGA:[1]}] [] {5':[], ~5':[]} 2.0x}
+AAC {[{ACT:[1]}] [] [] [{GAA:[1]}] {5':[], ~5':[]} 1.0x}
+CCC {[] [{AGG:[2]}] [] [{GCC:[2]}] {5':[], ~5':[]} 1.0x}
+GCC {[{CCC:[2]}] [] [] [{AGC:[2]}] {5':[], ~5':[]} 1.0x}
+AGC {[{GCC:[2]}] [] [{CTA:[2]}] [] {5':[], ~5':[]} 1.0x}
+AAG {[{AGG:[2]}] [{ACT:[1]}] [] [] {5':[], ~5':[]} 2.0x}
+AGG {[] [{CCC:[2]}] [] [{AAG:[2]}] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1,2]}] [] [] [] {5':[(2-0_0),(1-0_0)], ~5':[]} 2.0x}
+ACT {[] [{AAG:[1]}] [] [{AAC:[1]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/graphviz/result.ps
new file mode 100644
index 0000000..1c100e3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleBridgePath/graphviz/result.ps
@@ -0,0 +1,1229 @@
+%!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 1532 287
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 1496 251 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 9 moveto
+0 113 lineto
+56 113 lineto
+56 9 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 96.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 70.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+56 61 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 44.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 35 moveto
+56 35 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 18.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 72 moveto
+140 176 lineto
+196 176 lineto
+196 72 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 159.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 150 moveto
+196 150 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 133.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 124 moveto
+196 124 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 107.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 98 moveto
+196 98 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 81.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56 88.12 moveto
+61.65 92.58 67.77 96.78 74 100 curveto
+91.26 108.91 112.06 114.67 129.69 118.3 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.18 121.76 moveto
+139.66 120.2 lineto
+130.49 114.89 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.18 121.76 moveto
+139.66 120.2 lineto
+130.49 114.89 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 121.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1268 0 moveto
+1268 104 lineto
+1324 104 lineto
+1324 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1280.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1268 78 moveto
+1324 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1282 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1268 52 moveto
+1324 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1276 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1268 26 moveto
+1324 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1284.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.03 55.57 moveto
+84.21 50.6 128.95 44 168 44 curveto
+168 44 168 44 1144 44 curveto
+1182.65 44 1226.75 46.61 1257.46 48.85 curveto
+stroke
+0 1 1 edgecolor
+newpath 1257.49 52.36 moveto
+1267.73 49.62 lineto
+1258.02 45.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1257.49 52.36 moveto
+1267.73 49.62 lineto
+1258.02 45.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+632 49.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.99 90.84 moveto
+134.48 85.9 128.4 81.35 122 78 curveto
+104.93 69.06 83.99 64.74 66.21 62.68 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.45 59.18 moveto
+56.16 61.71 lineto
+65.78 66.15 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.45 59.18 moveto
+56.16 61.71 lineto
+65.78 66.15 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 83.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ACT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 72 moveto
+280 176 lineto
+336 176 lineto
+336 72 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+293.5 159.4 moveto 29 (ACT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 150 moveto
+336 150 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 133.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 124 moveto
+336 124 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 107.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 98 moveto
+336 98 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 81.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->ACT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.33 124 moveto
+217.39 124 246.37 124 269.53 124 curveto
+stroke
+0 0 0 edgecolor
+newpath 269.71 127.5 moveto
+279.71 124 lineto
+269.71 120.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 269.71 127.5 moveto
+279.71 124 lineto
+269.71 120.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 129.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1267.74 37.03 moveto
+1237.85 22.62 1188.92 3 1144 3 curveto
+168 3 168 3 168 3 curveto
+130.89 3 92.17 20.61 64.88 36.42 curveto
+stroke
+0 0 0 edgecolor
+newpath 62.87 33.55 moveto
+56.09 41.69 lineto
+66.46 39.55 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 62.87 33.55 moveto
+56.09 41.69 lineto
+66.46 39.55 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+633.5 8.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1116 73 moveto
+1116 177 lineto
+1172 177 lineto
+1172 73 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1130 160.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1116 151 moveto
+1172 151 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1130 134.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1116 125 moveto
+1172 125 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1124 108.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1116 99 moveto
+1172 99 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1132.5 82.4 moveto 23 (2.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 1267.87 54.62 moveto
+1245.55 57.68 1214.2 64.2 1190 78 curveto
+1186.53 79.98 1183.15 82.3 1179.89 84.82 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1177.45 82.31 moveto
+1172.1 91.45 lineto
+1181.99 87.64 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1177.45 82.31 moveto
+1172.1 91.45 lineto
+1181.99 87.64 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1197 83.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 1172.19 118.94 moveto
+1198.87 112.91 1236.76 103.5 1250 96 curveto
+1253.42 94.06 1256.77 91.82 1260.02 89.39 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1262.29 92.05 moveto
+1267.83 83.02 lineto
+1257.87 86.62 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1262.29 92.05 moveto
+1267.83 83.02 lineto
+1257.87 86.62 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1197 119.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1268 139 moveto
+1268 243 lineto
+1324 243 lineto
+1324 139 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1282 226.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1268 217 moveto
+1324 217 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1282 200.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1268 191 moveto
+1324 191 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1276 174.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1268 165 moveto
+1324 165 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1284.5 148.4 moveto 23 (2.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 1172.26 164.59 moveto
+1177.59 169.83 1183.55 174.57 1190 178 curveto
+1210.58 188.95 1236.52 192.28 1257.59 192.83 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 1257.78 196.34 moveto
+1267.8 192.9 lineto
+1257.82 189.34 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 1257.78 196.34 moveto
+1267.8 192.9 lineto
+1257.82 189.34 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1190 197.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% AGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 978 76 moveto
+978 180 lineto
+1034 180 lineto
+1034 76 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+990.5 163.4 moveto 31 (AGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 978 154 moveto
+1034 154 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+992 137.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 978 128 moveto
+1034 128 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+986 111.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 978 102 moveto
+1034 102 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+994.5 85.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->AGC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 1115.88 97.64 moveto
+1110.34 93.69 1104.28 90.21 1098 88 curveto
+1078.72 81.21 1071.15 80.84 1052 88 curveto
+1048.73 89.22 1045.54 90.8 1042.46 92.61 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1040.43 89.75 moveto
+1034.11 98.25 lineto
+1044.35 95.55 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1040.43 89.75 moveto
+1034.11 98.25 lineto
+1044.35 95.55 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1052 93.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 1267.53 170.07 moveto
+1261.88 166.42 1255.88 162.88 1250 160 curveto
+1228.32 149.37 1202.63 140.79 1181.97 134.79 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 1182.85 131.4 moveto
+1172.27 132.06 lineto
+1180.95 138.14 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 1182.85 131.4 moveto
+1172.27 132.06 lineto
+1180.95 138.14 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1190 165.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 1422 138 moveto
+1422 242 lineto
+1488 242 lineto
+1488 138 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 1422 138 moveto
+1422 242 lineto
+1488 242 lineto
+1488 138 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1440.5 225.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 1422 216 moveto
+1488 216 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1430 199.4 moveto 50 (5':[2,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 1422 190 moveto
+1488 190 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1435 173.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 1422 164 moveto
+1488 164 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1443.5 147.4 moveto 23 (2.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1324.06 190.82 moveto
+1348.33 190.67 1383.81 190.45 1411.71 190.27 curveto
+stroke
+0 1 1 edgecolor
+newpath 1412.02 193.77 moveto
+1422 190.21 lineto
+1411.98 186.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1412.02 193.77 moveto
+1422 190.21 lineto
+1411.98 186.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1342.5 195.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1421.89 173.44 moveto
+1416.06 171.18 1409.95 169.23 1404 168 curveto
+1377.01 162.43 1368.82 161.67 1342 168 curveto
+1339.32 168.63 1336.62 169.45 1333.95 170.39 curveto
+stroke
+0 0 0 edgecolor
+newpath 1332.37 167.25 moveto
+1324.43 174.26 lineto
+1335.01 173.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1332.37 167.25 moveto
+1324.43 174.26 lineto
+1335.01 173.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1344 173.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% AGC->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 1034.26 127.39 moveto
+1054.82 126.94 1082.89 126.33 1105.5 125.84 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1105.86 129.33 moveto
+1115.78 125.61 lineto
+1105.7 122.33 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1105.86 129.33 moveto
+1115.78 125.61 lineto
+1105.7 122.33 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1052 131.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% GCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 838 81 moveto
+838 185 lineto
+894 185 lineto
+894 81 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+850.5 168.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 838 159 moveto
+894 159 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+852 142.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 838 133 moveto
+894 133 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+846 116.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 838 107 moveto
+894 107 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+854.5 90.4 moveto 23 (1.0) alignedtext
+grestore
+% AGC->GCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 977.95 112.92 moveto
+972.17 110.47 966 108.31 960 107 curveto
+939.15 102.47 932.63 101.57 912 107 curveto
+909.17 107.74 906.34 108.71 903.54 109.82 curveto
+stroke
+0 0 0 edgecolor
+newpath 901.85 106.74 moveto
+894.23 114.1 lineto
+904.77 113.1 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 901.85 106.74 moveto
+894.23 114.1 lineto
+904.77 113.1 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+913.5 112.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% ACT->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 279.51 107.99 moveto
+273.87 105.51 267.87 103.33 262 102 curveto
+241.2 97.28 234.8 97.28 214 102 curveto
+211.34 102.6 208.65 103.38 205.99 104.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 204.53 101.09 moveto
+196.49 107.99 lineto
+207.08 107.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 204.53 101.09 moveto
+196.49 107.99 lineto
+207.08 107.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 107.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 83 moveto
+418 187 lineto
+474 187 lineto
+474 83 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 170.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 161 moveto
+474 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 144.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 135 moveto
+474 135 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 118.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 109 moveto
+474 109 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 92.4 moveto 23 (2.0) alignedtext
+grestore
+% ACT->AAG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.1 130.29 moveto
+341.99 131.38 348.17 132.37 354 133 curveto
+371.46 134.88 390.89 135.52 407.37 135.63 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 407.73 139.13 moveto
+417.73 135.63 lineto
+407.74 132.13 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 407.73 139.13 moveto
+417.73 135.63 lineto
+407.74 132.13 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 140.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 698 91 moveto
+698 195 lineto
+754 195 lineto
+754 91 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+711 178.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 698 169 moveto
+754 169 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+712 152.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 698 143 moveto
+754 143 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+706 126.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 698 117 moveto
+754 117 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+714.5 100.4 moveto 23 (1.0) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 73 moveto
+558 177 lineto
+614 177 lineto
+614 73 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+569.5 160.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 151 moveto
+614 151 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572 134.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 125 moveto
+614 125 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 108.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 558 99 moveto
+614 99 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 82.4 moveto 23 (1.0) alignedtext
+grestore
+% CCC->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 697.97 114.91 moveto
+692.42 110.85 686.34 107.28 680 105 curveto
+659.93 97.78 652.89 100.66 632 105 curveto
+629.2 105.58 626.37 106.34 623.55 107.23 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 622.33 103.95 moveto
+614.11 110.63 lineto
+624.71 110.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 622.33 103.95 moveto
+614.11 110.63 lineto
+624.71 110.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+633 110.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% CCC->GCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 754.33 140.98 moveto
+775.39 139.47 804.37 137.4 827.53 135.75 curveto
+stroke
+0 1 1 edgecolor
+newpath 827.99 139.22 moveto
+837.71 135.02 lineto
+827.49 132.24 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 827.99 139.22 moveto
+837.71 135.02 lineto
+827.49 132.24 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+772 144.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AGG->CCC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 614.33 128.64 moveto
+635.39 131.35 664.37 135.08 687.53 138.05 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 687.35 141.56 moveto
+697.71 139.36 lineto
+688.24 134.62 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 687.35 141.56 moveto
+697.71 139.36 lineto
+688.24 134.62 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+633 141.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% AGG->AAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 557.83 111.35 moveto
+552.06 109.13 545.93 107.18 540 106 curveto
+519.07 101.85 512.5 100.08 492 106 curveto
+489.01 106.86 486.03 107.98 483.11 109.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 481.32 106.27 moveto
+474.01 113.93 lineto
+484.51 112.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 481.32 106.27 moveto
+474.01 113.93 lineto
+484.51 112.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 111.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% GCC->AGC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 894.33 131.99 moveto
+915.39 131.24 944.37 130.2 967.53 129.37 curveto
+stroke
+0 1 1 edgecolor
+newpath 967.84 132.87 moveto
+977.71 129.01 lineto
+967.59 125.87 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 967.84 132.87 moveto
+977.71 129.01 lineto
+967.59 125.87 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+912 136.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% GCC->CCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 837.83 119.35 moveto
+832.06 117.13 825.93 115.18 820 114 curveto
+799.07 109.85 792.5 108.08 772 114 curveto
+769.01 114.86 766.03 115.98 763.11 117.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 761.32 114.27 moveto
+754.01 121.93 lineto
+764.51 120.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 761.32 114.27 moveto
+754.01 121.93 lineto
+764.51 120.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+773.5 119.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAG->ACT
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.89 120.63 moveto
+412.11 118.3 405.97 116.24 400 115 curveto
+382.43 111.35 362.67 112.6 345.97 115.17 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 345.26 111.74 moveto
+336.01 116.91 lineto
+346.47 118.64 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 345.26 111.74 moveto
+336.01 116.91 lineto
+346.47 118.64 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 120.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAG->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 474.33 132.98 moveto
+495.39 131.47 524.37 129.4 547.53 127.75 curveto
+stroke
+0 0 0 edgecolor
+newpath 547.99 131.22 moveto
+557.71 127.02 lineto
+547.49 124.24 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 547.99 131.22 moveto
+557.71 127.02 lineto
+547.49 124.24 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 136.4 moveto 45 (FF: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 1532 287
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimplePath/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimplePath/bin/part-00000
new file mode 100755
index 0000000..7be8366
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimplePath/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimplePath/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimplePath/graphviz/result.ps
new file mode 100644
index 0000000..2e3afb6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimplePath/graphviz/result.ps
@@ -0,0 +1,1646 @@
+%!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 1382 370
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 1346 334 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 112 moveto
+0 216 lineto
+56 216 lineto
+56 112 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 199.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 190 moveto
+56 190 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 173.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 164 moveto
+56 164 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 147.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 138 moveto
+56 138 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 121.4 moveto 23 (1.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 173 moveto
+140 277 lineto
+196 277 lineto
+196 173 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 260.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 251 moveto
+196 251 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 234.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 225 moveto
+196 225 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 208.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 199 moveto
+196 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 182.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.1 192.19 moveto
+61.69 196.67 67.77 200.85 74 204 curveto
+91.22 212.7 112.01 217.82 129.65 220.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.21 224.3 moveto
+139.62 222.36 lineto
+130.27 217.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.21 224.3 moveto
+139.62 222.36 lineto
+130.27 217.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 224.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 51 moveto
+140 155 lineto
+196 155 lineto
+196 51 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 138.4 moveto 31 (CAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 129 moveto
+196 129 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 112.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 103 moveto
+196 103 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 86.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 77 moveto
+196 77 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 60.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->CAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 151.66 moveto
+77.68 142.35 107.16 129.51 130.47 119.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 131.94 122.53 moveto
+139.71 115.33 lineto
+129.15 116.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 131.94 122.53 moveto
+139.71 115.33 lineto
+129.15 116.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 148.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.97 194.29 moveto
+134.42 189.58 128.33 185.22 122 182 curveto
+104.79 173.25 83.84 168.73 66.09 166.41 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.38 162.92 moveto
+56.06 165.28 lineto
+65.6 169.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.38 162.92 moveto
+56.06 165.28 lineto
+65.6 169.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 187.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% ATC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 188 moveto
+280 292 lineto
+336 292 lineto
+336 188 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 275.4 moveto 28 (ATC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 266 moveto
+336 266 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 249.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 240 moveto
+336 240 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 223.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 214 moveto
+336 214 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 197.4 moveto 23 (1.0) alignedtext
+grestore
+% AAT->ATC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.33 228.04 moveto
+217.39 230.29 246.37 233.4 269.53 235.88 curveto
+stroke
+0 0 0 edgecolor
+newpath 269.4 239.38 moveto
+279.71 236.97 lineto
+270.14 232.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 269.4 239.38 moveto
+279.71 236.97 lineto
+270.14 232.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 239.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.77 96.66 moveto
+120.27 93.75 94.3 92.88 74 103 curveto
+70.36 104.81 66.94 107.06 63.73 109.62 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.19 107.21 moveto
+56.19 116.55 lineto
+65.92 112.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.19 107.21 moveto
+56.19 116.55 lineto
+65.92 112.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 108.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% TCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 61 moveto
+280 165 lineto
+336 165 lineto
+336 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 148.4 moveto 28 (TCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 139 moveto
+336 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 113 moveto
+336 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 87 moveto
+336 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% CAA->TCA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 196.17 116.65 moveto
+201.94 118.87 208.07 120.82 214 122 curveto
+232.11 125.59 252.48 124.28 269.61 121.69 curveto
+stroke
+0 1 1 edgecolor
+newpath 270.55 125.08 moveto
+279.82 119.94 lineto
+269.37 118.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 270.55 125.08 moveto
+279.82 119.94 lineto
+269.37 118.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 130.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% TCA->CAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 279.55 103.65 moveto
+273.8 102.13 267.75 100.8 262 100 curveto
+243.78 97.48 223.4 97.75 206.29 98.86 curveto
+stroke
+0 0 0 edgecolor
+newpath 205.81 95.38 moveto
+196.1 99.63 lineto
+206.34 102.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 205.81 95.38 moveto
+196.1 99.63 lineto
+206.34 102.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 105.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% ATG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 434 122 moveto
+434 226 lineto
+490 226 lineto
+490 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+447 209.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 434 200 moveto
+490 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+448 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 434 174 moveto
+490 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+442 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 434 148 moveto
+490 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+450.5 131.4 moveto 23 (2.0) alignedtext
+grestore
+% TCA->ATG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.03 141.33 moveto
+341.62 145.8 347.72 149.94 354 153 curveto
+375.69 163.58 402.27 168.83 423.63 171.44 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 423.34 174.93 moveto
+433.66 172.52 lineto
+424.09 167.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 423.34 174.93 moveto
+433.66 172.52 lineto
+424.09 167.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+362 176.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CTC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 434 0 moveto
+434 104 lineto
+490 104 lineto
+490 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+448 87.4 moveto 28 (CTC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 434 78 moveto
+490 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+448 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 434 52 moveto
+490 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+442 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 434 26 moveto
+490 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+450.5 9.4 moveto 23 (2.0) alignedtext
+grestore
+% TCA->CTC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 336.15 101.18 moveto
+342.03 98.77 348.21 96.27 354 94 curveto
+381.36 83.28 388.64 81.72 416 71 curveto
+418.72 69.94 421.51 68.82 424.33 67.69 curveto
+stroke
+0 1 1 edgecolor
+newpath 425.9 70.83 moveto
+433.85 63.82 lineto
+423.26 64.34 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 425.9 70.83 moveto
+433.85 63.82 lineto
+423.26 64.34 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354.5 99.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% TAA
+gsave
+0 0 0.75294 nodecolor
+newpath 1282 95 moveto
+1282 199 lineto
+1338 199 lineto
+1338 95 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 1282 95 moveto
+1282 199 lineto
+1338 199 lineto
+1338 95 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1295.5 182.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 1282 173 moveto
+1338 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1291.5 156.4 moveto 37 (5':[3]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 1282 147 moveto
+1338 147 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1290 130.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 1282 121 moveto
+1338 121 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1298.5 104.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1142 85 moveto
+1142 189 lineto
+1198 189 lineto
+1198 85 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1154.5 172.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1142 163 moveto
+1198 163 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1156 146.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1142 137 moveto
+1198 137 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1150 120.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1142 111 moveto
+1198 111 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1158.5 94.4 moveto 23 (1.0) alignedtext
+grestore
+% TAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1281.9 140.66 moveto
+1276.02 139.57 1269.83 138.6 1264 138 curveto
+1245.71 136.13 1225.32 135.71 1208.22 135.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 1208 132.33 moveto
+1198.04 135.96 lineto
+1208.09 139.33 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1208 132.33 moveto
+1198.04 135.96 lineto
+1208.09 139.33 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1217.5 143.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% AAC->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1198.17 150.65 moveto
+1203.94 152.87 1210.07 154.82 1216 156 curveto
+1234.11 159.59 1254.48 158.28 1271.61 155.69 curveto
+stroke
+0 1 1 edgecolor
+newpath 1272.55 159.08 moveto
+1281.82 153.94 lineto
+1271.37 152.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1272.55 159.08 moveto
+1281.82 153.94 lineto
+1271.37 152.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1216 164.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% ACG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1002 75 moveto
+1002 179 lineto
+1058 179 lineto
+1058 75 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1014.5 162.4 moveto 31 (ACG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1002 153 moveto
+1058 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1016 136.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1002 127 moveto
+1058 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1010 110.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1002 101 moveto
+1058 101 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1018.5 84.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->ACG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1141.9 130.66 moveto
+1136.02 129.57 1129.83 128.6 1124 128 curveto
+1105.71 126.13 1085.32 125.71 1068.22 125.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 1068 122.33 moveto
+1058.04 125.96 lineto
+1068.09 129.33 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1068 122.33 moveto
+1058.04 125.96 lineto
+1068.09 129.33 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1077.5 133.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% GCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 577 137 moveto
+577 241 lineto
+633 241 lineto
+633 137 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+589.5 224.4 moveto 31 (GCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 577 215 moveto
+633 215 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+591 198.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 577 189 moveto
+633 189 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+585 172.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 577 163 moveto
+633 163 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+593.5 146.4 moveto 23 (1.0) alignedtext
+grestore
+% GCA->ATG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 576.84 166.03 moveto
+569.78 161.5 561.94 157.41 554 155 curveto
+534.43 149.08 528.05 151.02 508 155 curveto
+505.31 155.53 502.58 156.23 499.87 157.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 498.5 153.8 moveto
+490.17 160.35 lineto
+500.76 160.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 498.5 153.8 moveto
+490.17 160.35 lineto
+500.76 160.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+508 160.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 722 136 moveto
+722 240 lineto
+778 240 lineto
+778 136 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+734.5 223.4 moveto 31 (CGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 722 214 moveto
+778 214 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+736 197.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 722 188 moveto
+778 188 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+730 171.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 722 162 moveto
+778 162 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+738.5 145.4 moveto 23 (1.0) alignedtext
+grestore
+% GCA->CGC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 633.3 188.8 moveto
+655.66 188.65 687.08 188.43 711.69 188.26 curveto
+stroke
+0 1 1 edgecolor
+newpath 711.79 191.76 moveto
+721.77 188.19 lineto
+711.75 184.76 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 711.79 191.76 moveto
+721.77 188.19 lineto
+711.75 184.76 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+656 193.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ATG->TCA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 433.78 142.94 moveto
+428.29 138.33 422.27 134.1 416 131 curveto
+394.47 120.37 367.89 115.85 346.48 114 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 346.66 110.5 moveto
+336.44 113.29 lineto
+346.16 117.48 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 346.66 110.5 moveto
+336.44 113.29 lineto
+346.16 117.48 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+362 136.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATG->GCA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 490.25 176.96 moveto
+512.09 179.25 542.55 182.45 566.6 184.97 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 566.5 188.48 moveto
+576.81 186.04 lineto
+567.23 181.52 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 566.5 188.48 moveto
+576.81 186.04 lineto
+567.23 181.52 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+508 189.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATG->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 449.78 226.2 moveto
+451.15 236.59 455.23 244 462 244 curveto
+466.34 244 469.57 240.96 471.69 236.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 475.12 236.76 moveto
+474.22 226.2 lineto
+468.34 235.02 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 475.12 236.76 moveto
+474.22 226.2 lineto
+468.34 235.02 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+439 249.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CGC->GCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 721.51 171.99 moveto
+715.87 169.51 709.87 167.33 704 166 curveto
+683.2 161.28 676.86 161.51 656 166 curveto
+651.55 166.96 647.03 168.33 642.6 169.94 curveto
+stroke
+0 0 0 edgecolor
+newpath 641.09 166.78 moveto
+633.13 173.77 lineto
+643.71 173.27 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 641.09 166.78 moveto
+633.13 173.77 lineto
+643.71 173.27 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+657.5 171.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CCG
+gsave
+0 0 0.75294 nodecolor
+newpath 862 136 moveto
+862 240 lineto
+918 240 lineto
+918 136 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 862 136 moveto
+862 240 lineto
+918 240 lineto
+918 136 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+874.5 223.4 moveto 31 (CCG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 862 214 moveto
+918 214 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+871.5 197.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 862 188 moveto
+918 188 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+870 171.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 862 162 moveto
+918 162 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+878.5 145.4 moveto 23 (2.0) alignedtext
+grestore
+% CGC->CCG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 778.33 188 moveto
+799.39 188 828.37 188 851.53 188 curveto
+stroke
+0 1 1 edgecolor
+newpath 851.71 191.5 moveto
+861.71 188 lineto
+851.71 184.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 851.71 191.5 moveto
+861.71 188 lineto
+851.71 184.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+796 193.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTC->TCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 433.74 44.09 moveto
+410.94 39.32 378.7 36.33 354 49 curveto
+350.23 50.93 346.7 53.33 343.41 56.06 curveto
+stroke
+0 0 0 edgecolor
+newpath 341 53.52 moveto
+336.16 62.94 lineto
+345.82 58.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 341 53.52 moveto
+336.16 62.94 lineto
+345.82 58.6 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+356 54.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% AGA
+gsave
+0 0 0.75294 nodecolor
+newpath 572.5 10 moveto
+572.5 114 lineto
+637.5 114 lineto
+637.5 10 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572.5 10 moveto
+572.5 114 lineto
+637.5 114 lineto
+637.5 10 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+589.5 97.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572.5 88 moveto
+637.5 88 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+591 71.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572.5 62 moveto
+637.5 62 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+580.5 45.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572.5 36 moveto
+637.5 36 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+593.5 19.4 moveto 23 (1.0) alignedtext
+grestore
+% CTC->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 490.17 65.65 moveto
+495.94 67.87 502.07 69.82 508 71 curveto
+525.58 74.49 545.24 73.55 562.23 71.24 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 563.08 74.65 moveto
+572.43 69.66 lineto
+562.01 67.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 563.08 74.65 moveto
+572.43 69.66 lineto
+562.01 67.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+508 79.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AGA->CTC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 572.46 55.44 moveto
+566.35 54.44 560 53.56 554 53 curveto
+536.52 51.37 517.09 50.96 500.6 51.02 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 500.21 47.52 moveto
+490.25 51.11 lineto
+500.28 54.52 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 500.21 47.52 moveto
+490.25 51.11 lineto
+500.28 54.52 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+508 58.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% GGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1142 207 moveto
+1142 311 lineto
+1198 311 lineto
+1198 207 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1153.5 294.4 moveto 33 (GGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1142 285 moveto
+1198 285 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1156 268.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1142 259 moveto
+1198 259 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1150 242.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1142 233 moveto
+1198 233 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1158.5 216.4 moveto 23 (1.0) alignedtext
+grestore
+% GAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1282 222 moveto
+1282 326 lineto
+1338 326 lineto
+1338 222 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1294.5 309.4 moveto 31 (GAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1282 300 moveto
+1338 300 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1296 283.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1282 274 moveto
+1338 274 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1290 257.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1282 248 moveto
+1338 248 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1298.5 231.4 moveto 23 (1.0) alignedtext
+grestore
+% GGA->GAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1198.33 262.04 moveto
+1219.39 264.29 1248.37 267.4 1271.53 269.88 curveto
+stroke
+0 0 0 edgecolor
+newpath 1271.4 273.38 moveto
+1281.71 270.97 lineto
+1272.14 266.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1271.4 273.38 moveto
+1281.71 270.97 lineto
+1272.14 266.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1217.5 273.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1002 197 moveto
+1002 301 lineto
+1058 301 lineto
+1058 197 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1015 284.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1002 275 moveto
+1058 275 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1016 258.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1002 249 moveto
+1058 249 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1010 232.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1002 223 moveto
+1058 223 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1018.5 206.4 moveto 23 (1.0) alignedtext
+grestore
+% GGA->CCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 1141.99 237.93 moveto
+1136.3 234.66 1130.17 231.78 1124 230 curveto
+1103.5 224.08 1096.93 225.85 1076 230 curveto
+1073.31 230.53 1070.58 231.23 1067.87 232.03 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1066.5 228.8 moveto
+1058.17 235.35 lineto
+1068.76 235.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1066.5 228.8 moveto
+1058.17 235.35 lineto
+1068.76 235.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1077 235.4 moveto 46 (RF: [3]) alignedtext
+grestore
+% GAC->GGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1281.97 250.62 moveto
+1276.33 247.07 1270.22 243.95 1264 242 curveto
+1246.01 236.36 1225.46 239.08 1208.17 243.85 curveto
+stroke
+0 1 1 edgecolor
+newpath 1206.94 240.56 moveto
+1198.41 246.85 lineto
+1209 247.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1206.94 240.56 moveto
+1198.41 246.85 lineto
+1209 247.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1216 247.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% CCC->GGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 1058.33 251.02 moveto
+1079.39 252.53 1108.37 254.6 1131.53 256.25 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1131.49 259.76 moveto
+1141.71 256.98 lineto
+1131.99 252.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1131.49 259.76 moveto
+1141.71 256.98 lineto
+1131.99 252.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1077 260.4 moveto 46 (RF: [3]) alignedtext
+grestore
+% CCC->CCG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1001.79 221.58 moveto
+996.22 217.21 990.17 213.11 984 210 curveto
+966.73 201.3 945.94 195.98 928.3 192.75 curveto
+stroke
+0 0 0 edgecolor
+newpath 928.78 189.28 moveto
+918.34 191.08 lineto
+927.62 196.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 928.78 189.28 moveto
+918.34 191.08 lineto
+927.62 196.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+937.5 215.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% ACG->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1058.17 140.65 moveto
+1063.94 142.87 1070.07 144.82 1076 146 curveto
+1094.11 149.59 1114.48 148.28 1131.61 145.69 curveto
+stroke
+0 1 1 edgecolor
+newpath 1132.55 149.08 moveto
+1141.82 143.94 lineto
+1131.37 142.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1132.55 149.08 moveto
+1141.82 143.94 lineto
+1131.37 142.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1076 154.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% ACG->CCG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 1001.76 121.08 moveto
+982.26 118.43 956.29 117.85 936 128 curveto
+932.34 129.83 928.89 132.1 925.65 134.69 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 923.05 132.33 moveto
+918.04 141.66 lineto
+927.78 137.49 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 923.05 132.33 moveto
+918.04 141.66 lineto
+927.78 137.49 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+937 133.4 moveto 46 (FR: [3]) alignedtext
+grestore
+% CCG->CGC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 861.51 171.99 moveto
+855.87 169.51 849.87 167.33 844 166 curveto
+823.2 161.28 816.8 161.28 796 166 curveto
+793.34 166.6 790.65 167.38 787.99 168.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 786.53 165.09 moveto
+778.49 171.99 lineto
+789.08 171.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 786.53 165.09 moveto
+778.49 171.99 lineto
+789.08 171.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+797.5 171.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CCG->CCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 918.1 216.19 moveto
+923.69 220.67 929.77 224.85 936 228 curveto
+953.22 236.7 974.01 241.82 991.65 244.83 curveto
+stroke
+0 1 1 edgecolor
+newpath 991.21 248.3 moveto
+1001.62 246.36 lineto
+992.27 241.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 991.21 248.3 moveto
+1001.62 246.36 lineto
+992.27 241.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+936 248.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% CCG->ACG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 918.33 175.66 moveto
+939.68 166.35 969.16 153.51 992.47 143.35 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 993.94 146.53 moveto
+1001.71 139.33 lineto
+991.15 140.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 993.94 146.53 moveto
+1001.71 139.33 lineto
+991.15 140.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+937 172.4 moveto 46 (FR: [3]) alignedtext
+grestore
+% ATC->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 279.88 215 moveto
+274.3 211.3 268.23 208.05 262 206 curveto
+241.74 199.32 234.93 201.85 214 206 curveto
+211.31 206.53 208.58 207.23 205.87 208.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 204.5 204.8 moveto
+196.17 211.35 lineto
+206.76 211.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 204.5 204.8 moveto
+196.17 211.35 lineto
+206.76 211.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 211.4 moveto 48 (RR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 1382 370
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimplePath/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimplePath/test.txt
new file mode 100644
index 0000000..d15dffa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimplePath/test.txt
@@ -0,0 +1,17 @@
+AAA {[{AAT:[2]}] [] [] [{CAA:[2]}] {5':[], ~5':[]} 1.0x}
+CAA {[{AAA:[2]}] [] [] [{TCA:[2]}] {5':[], ~5':[]} 1.0x}
+TAA {[{AAC:[3]}] [] [] [] {5':[(3-0_0)], ~5':[]} 1.0x}
+GCA {[] [{ATG:[1]}] [] [{CGC:[1]}] {5':[], ~5':[]} 1.0x}
+TCA {[{CAA:[2]}] [{ATG:[1]}] [] [{CTC:[1,2]}] {5':[], ~5':[]} 2.0x}
+AGA {[] [] [{CTC:[2]}] [] {5':[], ~5':[(2-0_0)]} 1.0x}
+GGA {[{GAC:[3]}] [] [{CCC:[3]}] [] {5':[], ~5':[]} 1.0x}
+AAC {[{ACG:[3]}] [] [] [{TAA:[3]}] {5':[], ~5':[]} 1.0x}
+GAC {[] [] [] [{GGA:[3]}] {5':[], ~5':[]} 1.0x}
+CCC {[{CCG:[3]}] [] [{GGA:[3]}] [] {5':[], ~5':[]} 1.0x}
+CGC {[{GCA:[1]}] [] [] [{CCG:[1]}] {5':[], ~5':[]} 1.0x}
+ATC {[] [] [] [{AAT:[2]}] {5':[], ~5':[]} 1.0x}
+CTC {[{TCA:[1,2]}] [] [{AGA:[2]}] [] {5':[], ~5':[]} 2.0x}
+ACG {[] [{CCG:[3]}] [] [{AAC:[3]}] {5':[], ~5':[]} 1.0x}
+CCG {[{CGC:[1]}] [{ACG:[3]}] [] [{CCC:[3]}] {5':[(1-0_0)], ~5':[]} 2.0x}
+ATG {[] [{TCA:[1]}, {GCA:[1]}] [{ATG:[1]}] [] {5':[], ~5':[]} 2.0x}
+AAT {[{ATC:[2]}] [] [] [{AAA:[2]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/bin/.part-00000.crc
new file mode 100644
index 0000000..a57811c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/bin/part-00000
new file mode 100755
index 0000000..ca453fa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/data
new file mode 100644
index 0000000..ffd50f0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/data
@@ -0,0 +1,14 @@
+AAA {[{AAT:[3]}, {AAC:[1,2]}] [] [] [{GAA:[1,2,3]}] {5':[], ~5':[]} 3.0x}
+CAA {[{AAG:[1]}] [] [] [{TCA:[1]}] {5':[], ~5':[]} 1.0x}
+GAA {[{AAA:[1,2,3]}] [] [] [] {5':[(2-0_0),(3-0_0),(1-0_0)], ~5':[]} 3.0x}
+CCA {[{CAG:[2]}] [] [] [{CCC:[2]}] {5':[], ~5':[]} 1.0x}
+TCA {[{CAA:[1]}] [] [] [] {5':[], ~5':[]} 1.0x}
+AGA {[] [{ATC:[3]}] [] [] {5':[], ~5':[]} 1.0x}
+AAC {[{ACC:[1,2]}] [] [] [{AAA:[1,2]}] {5':[], ~5':[]} 2.0x}
+ACC {[] [{AGG:[1,2]}] [] [{AAC:[1,2]}] {5':[], ~5':[]} 2.0x}
+CCC {[{CCA:[2]}] [] [] [] {5':[], ~5':[]} 1.0x}
+ATC {[] [{AGA:[3]}] [] [{AAT:[3]}] {5':[], ~5':[]} 1.0x}
+AAG {[{AGG:[1]}] [] [] [{CAA:[1]}] {5':[], ~5':[]} 1.0x}
+CAG {[{AGG:[2]}] [] [] [{CCA:[2]}] {5':[], ~5':[]} 1.0x}
+AGG {[] [{ACC:[1,2]}] [] [{AAG:[1]}, {CAG:[2]}] {5':[], ~5':[]} 2.0x}
+AAT {[{ATC:[3]}] [] [] [{AAA:[3]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/graphviz/result.ps
new file mode 100644
index 0000000..fbb3676
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/SimpleTreePath/graphviz/result.ps
@@ -0,0 +1,1351 @@
+%!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 1018 406
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 982 370 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 136 moveto
+0 240 lineto
+56 240 lineto
+56 136 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 223.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 214 moveto
+56 214 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 197.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 188 moveto
+56 188 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 171.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 162 moveto
+56 162 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 145.4 moveto 23 (3.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 244 moveto
+180 348 lineto
+236 348 lineto
+236 244 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+193.5 331.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 322 moveto
+236 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+194 305.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 296 moveto
+236 296 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 279.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 270 moveto
+236 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 253.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 47.28 240.2 moveto
+54.02 252.28 62.8 263.94 74 272 curveto
+101.77 291.97 140.97 297.03 169.8 297.66 curveto
+stroke
+0 0 0 edgecolor
+newpath 169.89 301.16 moveto
+179.91 297.71 lineto
+169.93 294.16 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 169.89 301.16 moveto
+179.91 297.71 lineto
+169.93 294.16 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+89.5 301.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 122 moveto
+180 226 lineto
+236 226 lineto
+236 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+192.5 209.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 200 moveto
+236 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+194 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 174 moveto
+236 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 148 moveto
+236 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 131.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.21 189.46 moveto
+81 190.34 118.01 190.67 150 187 curveto
+156.46 186.26 163.25 185.09 169.82 183.76 curveto
+stroke
+0 0 0 edgecolor
+newpath 170.86 187.12 moveto
+179.88 181.56 lineto
+169.37 180.28 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 170.86 187.12 moveto
+179.88 181.56 lineto
+169.37 180.28 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+83 195.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% GAA
+gsave
+0 0 0.75294 nodecolor
+newpath 168 0 moveto
+168 104 lineto
+248 104 lineto
+248 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 0 moveto
+168 104 lineto
+248 104 lineto
+248 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+192 87.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 78 moveto
+248 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+176 61.4 moveto 64 (5':[2,3,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 52 moveto
+248 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 26 moveto
+248 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAA->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.16 154.62 moveto
+61.78 148.77 67.86 142.97 74 138 curveto
+104.5 113.29 117.06 114.35 150 93 curveto
+153.08 91.01 156.23 88.92 159.38 86.79 curveto
+stroke
+0 1 1 edgecolor
+newpath 161.44 89.63 moveto
+167.72 81.1 lineto
+157.49 83.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 161.44 89.63 moveto
+167.72 81.1 lineto
+157.49 83.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 143.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 179.96 271.85 moveto
+170.72 264.42 160.19 256.49 150 250 curveto
+118.15 229.71 107.63 229.18 74 212 curveto
+71.11 210.52 68.13 208.99 65.13 207.44 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.67 204.3 moveto
+56.18 202.8 lineto
+63.45 210.51 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.67 204.3 moveto
+56.18 202.8 lineto
+63.45 210.51 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+88 255.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% ATC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 346 243 moveto
+346 347 lineto
+402 347 lineto
+402 243 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+360 330.4 moveto 28 (ATC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 346 321 moveto
+402 321 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+360 304.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 346 295 moveto
+402 295 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+354 278.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 346 269 moveto
+402 269 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+362.5 252.4 moveto 23 (1.0) alignedtext
+grestore
+% AAT->ATC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 236.16 295.83 moveto
+263.55 295.67 305.36 295.41 335.75 295.23 curveto
+stroke
+0 0 0 edgecolor
+newpath 336 298.73 moveto
+345.98 295.17 lineto
+335.96 291.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 336 298.73 moveto
+345.98 295.17 lineto
+335.96 291.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+274.5 300.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% AAC->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 179.89 167.33 moveto
+152.49 161.95 109.85 156.54 74 165 curveto
+71.32 165.63 68.62 166.45 65.95 167.39 curveto
+stroke
+0 1 1 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81.5 170.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% ACC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 346 121 moveto
+346 225 lineto
+402 225 lineto
+402 121 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+359 208.4 moveto 30 (ACC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 346 199 moveto
+402 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+360 182.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 346 173 moveto
+402 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+354 156.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 346 147 moveto
+402 147 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+362.5 130.4 moveto 23 (2.0) alignedtext
+grestore
+% AAC->ACC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 236.24 178.69 moveto
+245.67 180.04 256.26 181.33 266 182 curveto
+293.49 183.89 300.57 184.66 328 182 curveto
+330.55 181.75 333.17 181.43 335.8 181.05 curveto
+stroke
+0 0 0 edgecolor
+newpath 336.61 184.47 moveto
+345.91 179.39 lineto
+335.47 177.56 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 336.61 184.47 moveto
+345.91 179.39 lineto
+335.47 177.56 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+268 188.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% GAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 167.83 47.65 moveto
+138.82 46.71 100.28 50.25 74 71 curveto
+56.7 84.66 45.89 105.76 39.14 126.29 curveto
+stroke
+0 0 0 edgecolor
+newpath 35.76 125.39 moveto
+36.23 135.98 lineto
+42.46 127.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 35.76 125.39 moveto
+36.23 135.98 lineto
+42.46 127.41 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76 76.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% CAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 202 moveto
+778 306 lineto
+834 306 lineto
+834 202 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+790.5 289.4 moveto 31 (CAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 280 moveto
+834 280 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+792 263.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 254 moveto
+834 254 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+786 237.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 228 moveto
+834 228 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+794.5 211.4 moveto 23 (1.0) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 192 moveto
+638 296 lineto
+694 296 lineto
+694 192 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+650 279.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 270 moveto
+694 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+652 253.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 244 moveto
+694 244 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+646 227.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 218 moveto
+694 218 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+654.5 201.4 moveto 23 (1.0) alignedtext
+grestore
+% CAA->AAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 777.99 232.93 moveto
+772.3 229.66 766.17 226.78 760 225 curveto
+739.5 219.08 732.93 220.85 712 225 curveto
+709.31 225.53 706.58 226.23 703.87 227.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 702.5 223.8 moveto
+694.17 230.35 lineto
+704.76 230.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 702.5 223.8 moveto
+694.17 230.35 lineto
+704.76 230.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+713.5 230.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% TCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 918 217 moveto
+918 321 lineto
+974 321 lineto
+974 217 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+932 304.4 moveto 28 (TCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 918 295 moveto
+974 295 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+932 278.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 918 269 moveto
+974 269 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+926 252.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 918 243 moveto
+974 243 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+934.5 226.4 moveto 23 (1.0) alignedtext
+grestore
+% CAA->TCA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 834.33 257.04 moveto
+855.39 259.29 884.37 262.4 907.53 264.88 curveto
+stroke
+0 1 1 edgecolor
+newpath 907.4 268.38 moveto
+917.71 265.97 lineto
+908.14 261.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 907.4 268.38 moveto
+917.71 265.97 lineto
+908.14 261.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+852 268.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAG->CAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 694.33 246.02 moveto
+715.39 247.53 744.37 249.6 767.53 251.25 curveto
+stroke
+0 1 1 edgecolor
+newpath 767.49 254.76 moveto
+777.71 251.98 lineto
+767.99 247.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 767.49 254.76 moveto
+777.71 251.98 lineto
+767.99 247.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+712 255.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 498 131 moveto
+498 235 lineto
+554 235 lineto
+554 131 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+509.5 218.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 498 209 moveto
+554 209 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+512 192.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 498 183 moveto
+554 183 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+506 166.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 498 157 moveto
+554 157 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+514.5 140.4 moveto 23 (2.0) alignedtext
+grestore
+% AAG->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 637.79 216.58 moveto
+632.22 212.21 626.17 208.11 620 205 curveto
+602.73 196.3 581.94 190.98 564.3 187.75 curveto
+stroke
+0 0 0 edgecolor
+newpath 564.78 184.28 moveto
+554.34 186.08 lineto
+563.62 191.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 564.78 184.28 moveto
+554.34 186.08 lineto
+563.62 191.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+573.5 210.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% TCA->CAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 917.97 245.62 moveto
+912.33 242.07 906.22 238.95 900 237 curveto
+882.01 231.36 861.46 234.08 844.17 238.85 curveto
+stroke
+0 0 0 edgecolor
+newpath 842.94 235.56 moveto
+834.41 241.85 lineto
+845 242.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 842.94 235.56 moveto
+834.41 241.85 lineto
+845 242.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+853.5 242.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 80 moveto
+778 184 lineto
+834 184 lineto
+834 80 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+791 167.4 moveto 30 (CCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 158 moveto
+834 158 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+792 141.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 132 moveto
+834 132 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+786 115.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 778 106 moveto
+834 106 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+794.5 89.4 moveto 23 (1.0) alignedtext
+grestore
+% CAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 70 moveto
+638 174 lineto
+694 174 lineto
+694 70 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+650.5 157.4 moveto 31 (CAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 148 moveto
+694 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+652 131.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 122 moveto
+694 122 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+646 105.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 638 96 moveto
+694 96 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+654.5 79.4 moveto 23 (1.0) alignedtext
+grestore
+% CCA->CAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 777.9 125.66 moveto
+772.02 124.57 765.83 123.6 760 123 curveto
+741.71 121.13 721.32 120.71 704.22 120.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 704 117.33 moveto
+694.04 120.96 lineto
+704.09 124.33 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 704 117.33 moveto
+694.04 120.96 lineto
+704.09 124.33 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+713.5 128.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 918 90 moveto
+918 194 lineto
+974 194 lineto
+974 90 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+931 177.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 918 168 moveto
+974 168 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+932 151.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 918 142 moveto
+974 142 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+926 125.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 918 116 moveto
+974 116 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+934.5 99.4 moveto 23 (1.0) alignedtext
+grestore
+% CCA->CCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 834.17 145.65 moveto
+839.94 147.87 846.07 149.82 852 151 curveto
+870.11 154.59 890.48 153.28 907.61 150.69 curveto
+stroke
+0 1 1 edgecolor
+newpath 908.55 154.08 moveto
+917.82 148.94 lineto
+907.37 147.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 908.55 154.08 moveto
+917.82 148.94 lineto
+907.37 147.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+852 158.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CAG->CCA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 694.17 135.65 moveto
+699.94 137.87 706.07 139.82 712 141 curveto
+730.11 144.59 750.48 143.28 767.61 140.69 curveto
+stroke
+0 1 1 edgecolor
+newpath 768.55 144.08 moveto
+777.82 138.94 lineto
+767.37 137.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 768.55 144.08 moveto
+777.82 138.94 lineto
+767.37 137.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+712 148.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CAG->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 637.76 116.08 moveto
+618.26 113.43 592.29 112.85 572 123 curveto
+568.34 124.83 564.89 127.1 561.65 129.69 curveto
+stroke
+0 0 0 edgecolor
+newpath 559.05 127.33 moveto
+554.04 136.66 lineto
+563.78 132.49 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 559.05 127.33 moveto
+554.04 136.66 lineto
+563.78 132.49 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+573.5 128.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CCC->CCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 917.55 132.65 moveto
+911.8 131.13 905.75 129.8 900 129 curveto
+881.78 126.48 861.4 126.75 844.29 127.86 curveto
+stroke
+0 0 0 edgecolor
+newpath 843.81 124.38 moveto
+834.1 128.63 lineto
+844.34 131.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 843.81 124.38 moveto
+834.1 128.63 lineto
+844.34 131.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+853.5 134.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 498 258 moveto
+498 362 lineto
+554 362 lineto
+554 258 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+510.5 345.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 498 336 moveto
+554 336 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+512 319.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 498 310 moveto
+554 310 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+506 293.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 498 284 moveto
+554 284 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+514.5 267.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->ATC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 497.88 285 moveto
+492.3 281.3 486.23 278.05 480 276 curveto
+454.67 267.66 446.16 270.81 420 276 curveto
+417.31 276.53 414.58 277.23 411.87 278.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 410.5 274.8 moveto
+402.17 281.35 lineto
+412.76 281.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 410.5 274.8 moveto
+402.17 281.35 lineto
+412.76 281.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+427 281.4 moveto 46 (FR: [3]) alignedtext
+grestore
+% ATC->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 345.99 273.93 moveto
+340.3 270.66 334.17 267.78 328 266 curveto
+301.53 258.35 292.77 259.49 266 266 curveto
+259.12 267.67 252.14 270.32 245.52 273.36 curveto
+stroke
+0 1 1 edgecolor
+newpath 243.53 270.44 moveto
+236.14 278.03 lineto
+246.65 276.71 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 243.53 270.44 moveto
+236.14 278.03 lineto
+246.65 276.71 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+273 271.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% ATC->AGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 402.23 297.79 moveto
+426.34 300.16 461.22 303.61 487.81 306.23 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 487.62 309.73 moveto
+497.92 307.23 lineto
+488.31 302.76 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 487.62 309.73 moveto
+497.92 307.23 lineto
+488.31 302.76 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+427 310.4 moveto 46 (FR: [3]) alignedtext
+grestore
+% ACC->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 345.55 163.65 moveto
+339.8 162.13 333.75 160.8 328 160 curveto
+300.71 156.22 293.36 156.74 266 160 curveto
+259.52 160.77 252.72 162.01 246.14 163.44 curveto
+stroke
+0 1 1 edgecolor
+newpath 245.01 160.11 moveto
+236.08 165.81 lineto
+246.61 166.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 245.01 160.11 moveto
+236.08 165.81 lineto
+246.61 166.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+266.5 165.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% ACC->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 402.17 186.65 moveto
+407.94 188.87 414.07 190.82 420 192 curveto
+442.21 196.41 467.47 194.53 487.75 191.37 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 488.6 194.78 moveto
+497.87 189.63 lineto
+487.42 187.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 488.6 194.78 moveto
+497.87 189.63 lineto
+487.42 187.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+420 199.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% AGG->AAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 554.1 211.19 moveto
+559.69 215.67 565.77 219.85 572 223 curveto
+589.22 231.7 610.01 236.82 627.65 239.83 curveto
+stroke
+0 1 1 edgecolor
+newpath 627.21 243.3 moveto
+637.62 241.36 lineto
+628.27 236.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 627.21 243.3 moveto
+637.62 241.36 lineto
+628.27 236.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+572 243.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGG->CAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 554.33 170.66 moveto
+575.68 161.35 605.16 148.51 628.47 138.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 629.94 141.53 moveto
+637.71 134.33 lineto
+627.15 135.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 629.94 141.53 moveto
+637.71 134.33 lineto
+627.15 135.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+572 166.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AGG->ACC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 497.55 173.65 moveto
+491.8 172.13 485.75 170.8 480 170 curveto
+457.64 166.9 432.38 167.46 412.13 168.88 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 411.72 165.4 moveto
+402.04 169.69 lineto
+412.28 172.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 411.72 165.4 moveto
+402.04 169.69 lineto
+412.28 172.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+420 175.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 1018 406
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/bin/.part-00000.crc
new file mode 100644
index 0000000..505542f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/bin/part-00000
new file mode 100755
index 0000000..6a31cca
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/data
new file mode 100644
index 0000000..0c9e6b6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/data
@@ -0,0 +1,5 @@
+CCA {[] [] [] [{CCC:[1]}] {5':[], ~5':[]} 1.0x}
+CCC {[{CCA:[1]}] [] [] [{GCC:[1]}] {5':[], ~5':[]} 1.0x}
+GCC {[{CCC:[1]}] [{AGG:[1]}] [{GCC:[1]}] [] {5':[], ~5':[]} 2.0x}
+AAG {[{AGG:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+AGG {[] [{GCC:[1]}] [] [{AAG:[1]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/graphviz/result.ps
new file mode 100644
index 0000000..478b877
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithMergeEdge/graphviz/result.ps
@@ -0,0 +1,608 @@
+%!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 658 184
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 622 148 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% CCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 87.4 moveto 30 (CCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153 87.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CCA->CCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 52 moveto
+77.39 52 106.37 52 129.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CCC->CCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 35.99 moveto
+133.87 33.51 127.87 31.33 122 30 curveto
+101.2 25.28 94.8 25.28 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 0 moveto
+280 104 lineto
+336 104 lineto
+336 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292.5 87.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 78 moveto
+336 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 52 moveto
+336 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 26 moveto
+336 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 9.4 moveto 23 (2.0) alignedtext
+grestore
+% CCC->GCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 196.33 52 moveto
+217.39 52 246.37 52 269.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 269.71 55.5 moveto
+279.71 52 lineto
+269.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 269.71 55.5 moveto
+279.71 52 lineto
+269.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GCC->CCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 279.51 35.99 moveto
+273.87 33.51 267.87 31.33 262 30 curveto
+241.2 25.28 234.8 25.28 214 30 curveto
+211.34 30.6 208.65 31.38 205.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GCC->GCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 295.78 104.2 moveto
+297.15 114.59 301.23 122 308 122 curveto
+312.34 122 315.57 118.96 317.69 114.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 321.12 114.76 moveto
+320.22 104.2 lineto
+314.34 113.02 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 321.12 114.76 moveto
+320.22 104.2 lineto
+314.34 113.02 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+285 127.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 0 moveto
+418 104 lineto
+474 104 lineto
+474 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+429.5 87.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 78 moveto
+474 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 52 moveto
+474 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 26 moveto
+474 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GCC->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.26 52 moveto
+356.82 52 384.89 52 407.5 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 407.78 55.5 moveto
+417.78 52 lineto
+407.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 407.78 55.5 moveto
+417.78 52 lineto
+407.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 57.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AGG->GCC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.51 35.99 moveto
+411.87 33.51 405.87 31.33 400 30 curveto
+380.06 25.48 373.94 25.48 354 30 curveto
+351.34 30.6 348.65 31.38 345.99 32.28 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 344.53 29.09 moveto
+336.49 35.99 lineto
+347.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 344.53 29.09 moveto
+336.49 35.99 lineto
+347.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 35.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAG
+gsave
+0 0 0.75294 nodecolor
+newpath 558 0 moveto
+558 104 lineto
+614 104 lineto
+614 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 0 moveto
+558 104 lineto
+614 104 lineto
+614 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+570 87.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 78 moveto
+614 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+567.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 52 moveto
+614 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 26 moveto
+614 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGG->AAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 474.33 52 moveto
+495.39 52 524.37 52 547.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 547.71 55.5 moveto
+557.71 52 lineto
+547.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 547.71 55.5 moveto
+557.71 52 lineto
+547.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAG->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 557.83 38.35 moveto
+552.06 36.13 545.93 34.18 540 33 curveto
+519.07 28.85 512.93 28.85 492 33 curveto
+489.31 33.53 486.58 34.23 483.87 35.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 482.5 31.8 moveto
+474.17 38.35 lineto
+484.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 482.5 31.8 moveto
+474.17 38.35 lineto
+484.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 38.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 658 184
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/bin/.part-00000.crc
new file mode 100644
index 0000000..94f2f78
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/bin/part-00000
new file mode 100755
index 0000000..9e146d0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/data
new file mode 100644
index 0000000..ebca4aa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/data
@@ -0,0 +1,3 @@
+CCC {[] [] [] [{GCC:[1]}] {5':[], ~5':[]} 1.0x}
+GCC {[{CCC:[1]}] [{AGG:[1]}] [{GCC:[1]}] [] {5':[], ~5':[]} 2.0x}
+AGG {[] [{GCC:[1]}] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/graphviz/result.ps
new file mode 100644
index 0000000..2c0289f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/TandemRepeatWithUnmergeEdge/graphviz/result.ps
@@ -0,0 +1,438 @@
+%!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 378 184
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 342 148 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 87.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (2.0) alignedtext
+grestore
+% CCC->GCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 52 moveto
+77.39 52 106.37 52 129.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GCC->CCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 35.99 moveto
+133.87 33.51 127.87 31.33 122 30 curveto
+101.2 25.28 94.8 25.28 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GCC->GCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 155.78 104.2 moveto
+157.15 114.59 161.23 122 168 122 curveto
+172.34 122 175.57 118.96 177.69 114.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 181.12 114.76 moveto
+180.22 104.2 lineto
+174.34 113.02 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 181.12 114.76 moveto
+180.22 104.2 lineto
+174.34 113.02 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+145 127.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% AGG
+gsave
+0 0 0.75294 nodecolor
+newpath 278 0 moveto
+278 104 lineto
+334 104 lineto
+334 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 0 moveto
+278 104 lineto
+334 104 lineto
+334 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+289.5 87.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 78 moveto
+334 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+287.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 52 moveto
+334 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 26 moveto
+334 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GCC->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 196.26 52 moveto
+216.82 52 244.89 52 267.5 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 57.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AGG->GCC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 277.51 35.99 moveto
+271.87 33.51 265.87 31.33 260 30 curveto
+240.06 25.48 233.94 25.48 214 30 curveto
+211.34 30.6 208.65 31.38 205.99 32.28 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 35.4 moveto 46 (FR: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 378 184
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ThreeDuplicate/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/ThreeDuplicate/bin/part-00000
new file mode 100755
index 0000000..c1b4e20
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ThreeDuplicate/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ThreeDuplicate/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/ThreeDuplicate/graphviz/result.ps
new file mode 100644
index 0000000..96623fa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ThreeDuplicate/graphviz/result.ps
@@ -0,0 +1,693 @@
+%!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 962 184
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 926 148 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+80 104 lineto
+80 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+80 104 lineto
+80 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+24.5 87.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+80 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 61.4 moveto 64 (5':[2,3,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+80 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+20 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+80 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+28.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 0 moveto
+192 104 lineto
+248 104 lineto
+248 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+205.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 78 moveto
+248 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+206 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 52 moveto
+248 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+200 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 26 moveto
+248 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+208.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 80.4 52 moveto
+110.72 52 151.96 52 181.75 52 curveto
+stroke
+0 0 0 edgecolor
+newpath 181.77 55.5 moveto
+191.77 52 lineto
+181.77 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 181.77 55.5 moveto
+191.77 52 lineto
+181.77 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+100 57.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 191.51 35.99 moveto
+185.87 33.51 179.87 31.33 174 30 curveto
+141.06 22.53 131.22 23.91 98 30 curveto
+95.31 30.49 92.59 31.1 89.86 31.81 curveto
+stroke
+0 1 1 edgecolor
+newpath 88.64 28.52 moveto
+80.03 34.69 lineto
+90.61 35.23 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 88.64 28.52 moveto
+80.03 34.69 lineto
+90.61 35.23 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+98.5 35.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% ATC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 360 0 moveto
+360 104 lineto
+416 104 lineto
+416 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+374 87.4 moveto 28 (ATC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 360 78 moveto
+416 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+374 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 360 52 moveto
+416 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+368 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 360 26 moveto
+416 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+376.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAT->ATC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 248.12 52 moveto
+275.86 52 318.48 52 349.39 52 curveto
+stroke
+0 0 0 edgecolor
+newpath 349.79 55.5 moveto
+359.79 52 lineto
+349.79 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 349.79 55.5 moveto
+359.79 52 lineto
+349.79 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+268 57.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 694 0 moveto
+694 104 lineto
+750 104 lineto
+750 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+706 87.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 694 78 moveto
+750 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+708 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 694 52 moveto
+750 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+702 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 694 26 moveto
+750 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+710.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 862 0 moveto
+862 104 lineto
+918 104 lineto
+918 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+874.5 87.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 862 78 moveto
+918 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+876 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 862 52 moveto
+918 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+870 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 862 26 moveto
+918 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+878.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 750.12 52 moveto
+777.86 52 820.48 52 851.39 52 curveto
+stroke
+0 0 0 edgecolor
+newpath 851.79 55.5 moveto
+861.79 52 lineto
+851.79 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 851.79 55.5 moveto
+861.79 52 lineto
+851.79 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+770 57.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% CGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 526 0 moveto
+526 104 lineto
+582 104 lineto
+582 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+538.5 87.4 moveto 31 (CGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 526 78 moveto
+582 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+540 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 526 52 moveto
+582 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+534 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 526 26 moveto
+582 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+542.5 9.4 moveto 23 (6.0) alignedtext
+grestore
+% GAA->CGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 693.83 38.35 moveto
+688.06 36.13 681.93 34.18 676 33 curveto
+642.87 26.43 633.13 26.43 600 33 curveto
+597.31 33.53 594.58 34.23 591.87 35.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 590.5 31.8 moveto
+582.17 38.35 lineto
+592.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 590.5 31.8 moveto
+582.17 38.35 lineto
+592.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+600.5 38.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 861.51 35.99 moveto
+855.87 33.51 849.87 31.33 844 30 curveto
+811.06 22.53 800.94 22.53 768 30 curveto
+765.34 30.6 762.65 31.38 759.99 32.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 758.53 29.09 moveto
+750.49 35.99 lineto
+761.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 758.53 29.09 moveto
+750.49 35.99 lineto
+761.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+768.5 35.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% CGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 582.12 52 moveto
+609.86 52 652.48 52 683.39 52 curveto
+stroke
+0 0 0 edgecolor
+newpath 683.79 55.5 moveto
+693.79 52 lineto
+683.79 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 683.79 55.5 moveto
+693.79 52 lineto
+683.79 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+602 57.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% CGA->CGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 539.26 104.2 moveto
+540.92 114.59 545.83 122 554 122 curveto
+559.23 122 563.13 118.96 565.69 114.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 569.12 114.79 moveto
+568.74 104.2 lineto
+562.44 112.72 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 569.12 114.79 moveto
+568.74 104.2 lineto
+562.44 112.72 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+517.5 127.4 moveto 73 (RF: [1,2,3]) alignedtext
+grestore
+% CGA->ATC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 525.83 38.35 moveto
+520.06 36.13 513.93 34.18 508 33 curveto
+475.74 26.6 466.26 26.6 434 33 curveto
+431.31 33.53 428.58 34.23 425.87 35.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 424.5 31.8 moveto
+416.17 38.35 lineto
+426.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 424.5 31.8 moveto
+416.17 38.35 lineto
+426.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+434.5 38.4 moveto 73 (FR: [1,2,3]) alignedtext
+grestore
+% ATC->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 359.83 38.35 moveto
+354.06 36.13 347.93 34.18 342 33 curveto
+308.87 26.43 299.13 26.43 266 33 curveto
+263.31 33.53 260.58 34.23 257.87 35.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 256.5 31.8 moveto
+248.17 38.35 lineto
+258.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 256.5 31.8 moveto
+248.17 38.35 lineto
+258.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+266.5 38.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% ATC->CGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 416.16 52 moveto
+443.55 52 485.36 52 515.75 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 515.98 55.5 moveto
+525.98 52 lineto
+515.98 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 515.98 55.5 moveto
+525.98 52 lineto
+515.98 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+434.5 57.4 moveto 73 (FR: [1,2,3]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 962 184
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/ThreeDuplicate/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/ThreeDuplicate/test.txt
new file mode 100644
index 0000000..45adac8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/ThreeDuplicate/test.txt
@@ -0,0 +1,6 @@
+AAA {[{AAT:[1,2,3]}] [] [] [] {5':[(2-0_0),(3-0_0),(1-0_0)], ~5':[]} 3.0x}
+GAA {[{AAC:[1,2,3]}] [] [] [{CGA:[1,2,3]}] {5':[], ~5':[]} 3.0x}
+CGA {[{GAA:[1,2,3]}] [{ATC:[1,2,3]}] [{CGA:[1,2,3]}] [] {5':[], ~5':[]} 6.0x}
+AAC {[] [] [] [{GAA:[1,2,3]}] {5':[], ~5':[]} 3.0x}
+ATC {[] [{CGA:[1,2,3]}] [] [{AAT:[1,2,3]}] {5':[], ~5':[]} 3.0x}
+AAT {[{ATC:[1,2,3]}] [] [] [{AAA:[1,2,3]}] {5':[], ~5':[]} 3.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/bin/.part-00000.crc
new file mode 100644
index 0000000..13aef38
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/bin/part-00000
new file mode 100755
index 0000000..74b94a2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/graphviz/result.ps
new file mode 100644
index 0000000..6da55ef
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/graphviz/result.ps
@@ -0,0 +1,849 @@
+%!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 708 453
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 672 417 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 197 moveto
+0 301 lineto
+56 301 lineto
+56 197 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 284.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 275 moveto
+56 275 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 258.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 249 moveto
+56 249 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 232.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 223 moveto
+56 223 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 206.4 moveto 23 (2.0) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 305 moveto
+154 409 lineto
+210 409 lineto
+210 305 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166 392.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 383 moveto
+210 383 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+168 366.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 357 moveto
+210 357 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162 340.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 331 moveto
+210 331 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 314.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 47.76 301.32 moveto
+54.46 313.25 63.1 324.81 74 333 curveto
+93.89 347.94 121.29 353.9 143.51 356.15 curveto
+stroke
+0 0 0 edgecolor
+newpath 143.39 359.65 moveto
+153.63 356.96 lineto
+143.94 352.68 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 143.39 359.65 moveto
+153.63 356.96 lineto
+143.94 352.68 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 360.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 183 moveto
+154 287 lineto
+210 287 lineto
+210 183 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166.5 270.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 261 moveto
+210 261 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+168 244.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 235 moveto
+210 235 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162 218.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 209 moveto
+210 209 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 192.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.13 250.77 moveto
+78.01 251.67 109.09 251.86 136 248 curveto
+138.52 247.64 141.09 247.18 143.67 246.65 curveto
+stroke
+0 0 0 edgecolor
+newpath 144.62 250.02 moveto
+153.54 244.31 lineto
+143.01 243.21 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 144.62 250.02 moveto
+153.54 244.31 lineto
+143.01 243.21 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 256.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 61 moveto
+154 165 lineto
+210 165 lineto
+210 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166.5 148.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 139 moveto
+210 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+168 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 113 moveto
+210 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 87 moveto
+210 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.15 217.33 moveto
+61.87 211.38 67.99 205.35 74 200 curveto
+99.62 177.18 109.39 175.66 136 154 curveto
+139.27 151.34 142.62 148.53 145.95 145.68 curveto
+stroke
+0 1 1 edgecolor
+newpath 148.38 148.2 moveto
+153.64 138.99 lineto
+143.79 142.91 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 148.38 148.2 moveto
+153.64 138.99 lineto
+143.79 142.91 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 205.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AAG->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 153.88 326.56 moveto
+148.2 321.1 142.1 315.67 136 311 curveto
+123.68 301.57 91.21 283.21 65.06 268.91 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.58 265.75 moveto
+56.12 264.04 lineto
+63.23 271.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.58 265.75 moveto
+56.12 264.04 lineto
+63.23 271.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81 316.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 153.67 227.86 moveto
+131.67 223.45 100.55 219.73 74 226 curveto
+71.32 226.63 68.62 227.45 65.95 228.39 curveto
+stroke
+0 1 1 edgecolor
+newpath 64.37 225.25 moveto
+56.43 232.26 lineto
+67.01 231.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 64.37 225.25 moveto
+56.43 232.26 lineto
+67.01 231.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81 231.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 153.63 110.79 moveto
+129.83 110.47 96.26 113.81 74 132 curveto
+57 145.89 46.26 166.92 39.48 187.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 36.12 186.39 moveto
+36.55 196.97 lineto
+42.81 188.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 36.12 186.39 moveto
+36.55 196.97 lineto
+42.81 188.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76 137.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 306 61 moveto
+306 165 lineto
+362 165 lineto
+362 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+320 148.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 306 139 moveto
+362 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+320 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 306 113 moveto
+362 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+314 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 306 87 moveto
+362 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+322.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 210.23 113 moveto
+234.34 113 269.22 113 295.81 113 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 295.92 116.5 moveto
+305.92 113 lineto
+295.92 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 295.92 116.5 moveto
+305.92 113 lineto
+295.92 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+228 118.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 305.51 96.99 moveto
+299.87 94.51 293.87 92.33 288 91 curveto
+261.99 85.1 254.01 85.1 228 91 curveto
+225.34 91.6 222.65 92.38 219.99 93.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 218.53 90.09 moveto
+210.49 96.99 lineto
+221.08 96.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 218.53 90.09 moveto
+210.49 96.99 lineto
+221.08 96.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+228 96.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 458 61 moveto
+458 165 lineto
+514 165 lineto
+514 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+472 148.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 458 139 moveto
+514 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+472 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 458 113 moveto
+514 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+466 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 458 87 moveto
+514 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+474.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 362.23 113 moveto
+386.34 113 421.22 113 447.81 113 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 447.92 116.5 moveto
+457.92 113 lineto
+447.92 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 447.92 116.5 moveto
+457.92 113 lineto
+447.92 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+380 118.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 457.83 99.35 moveto
+452.06 97.13 445.93 95.18 440 94 curveto
+413.84 88.81 406.16 88.81 380 94 curveto
+377.31 94.53 374.58 95.23 371.87 96.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 370.5 92.8 moveto
+362.17 99.35 lineto
+372.76 99.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 370.5 92.8 moveto
+362.17 99.35 lineto
+372.76 99.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+380 99.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% ATG
+gsave
+0 0 0.75294 nodecolor
+newpath 598.5 122 moveto
+598.5 226 lineto
+663.5 226 lineto
+663.5 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 598.5 122 moveto
+598.5 226 lineto
+663.5 226 lineto
+663.5 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+616 209.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 598.5 200 moveto
+663.5 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+617 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 598.5 174 moveto
+663.5 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+606.5 157.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 598.5 148 moveto
+663.5 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+619.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 514.07 141.25 moveto
+519.66 145.72 525.75 149.88 532 153 curveto
+549.43 161.69 570.33 166.79 588.43 169.78 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 588.02 173.26 moveto
+598.43 171.27 lineto
+589.06 166.34 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 588.02 173.26 moveto
+598.43 171.27 lineto
+589.06 166.34 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+533 173.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 603 0 moveto
+603 104 lineto
+659 104 lineto
+659 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 603 0 moveto
+603 104 lineto
+659 104 lineto
+659 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+616.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 603 78 moveto
+659 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+612.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 603 52 moveto
+659 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+611 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 603 26 moveto
+659 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+619.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 514.3 101.09 moveto
+536.86 91.6 568.64 78.23 593.34 67.84 curveto
+stroke
+0 1 1 edgecolor
+newpath 594.91 70.98 moveto
+602.77 63.88 lineto
+592.19 64.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 594.91 70.98 moveto
+602.77 63.88 lineto
+592.19 64.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+532 99.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ATG->ATA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 598.41 142.45 moveto
+592.61 138.07 586.38 134.04 580 131 curveto
+562.7 122.75 541.9 118.28 524.27 115.86 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 524.66 112.38 moveto
+514.31 114.66 lineto
+523.82 119.33 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 524.66 112.38 moveto
+514.31 114.66 lineto
+523.82 119.33 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+533 136.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 602.58 45.52 moveto
+581.91 42.3 553.84 41.11 532 52 curveto
+528.36 53.81 524.94 56.06 521.73 58.62 curveto
+stroke
+0 0 0 edgecolor
+newpath 519.19 56.21 moveto
+514.19 65.55 lineto
+523.92 61.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 519.19 56.21 moveto
+514.19 65.55 lineto
+523.92 61.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+533.5 57.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 708 453
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/test.txt
new file mode 100644
index 0000000..ea21058
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_6/test.txt
@@ -0,0 +1,8 @@
+GAA {[{AAG:[2]}, {AAC:[1]}] [] [] [{AGA:[1,2]}] {5':[], ~5':[]} 2.0x}
+AGA {[{GAA:[1,2]}] [] [{CTA:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+ATA {[] [{CTA:[1,2]}] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]} 2.0x}
+CTA {[] [{ATA:[1,2]}] [{AGA:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+AAC {[] [] [] [{GAA:[1]}] {5':[], ~5':[]} 1.0x}
+AAG {[] [] [] [{GAA:[2]}] {5':[], ~5':[]} 1.0x}
+ATG {[] [] [{ATA:[2]}] [] {5':[], ~5':[(2-0_0)]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/bin/.part-00000.crc
new file mode 100644
index 0000000..70530d5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/bin/part-00000
new file mode 100755
index 0000000..485b0a4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/graphviz/result.ps
new file mode 100644
index 0000000..b84114c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/graphviz/result.ps
@@ -0,0 +1,1188 @@
+%!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 1118 336
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 1082 300 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 112 moveto
+0 216 lineto
+56 216 lineto
+56 112 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 112 moveto
+0 216 lineto
+56 216 lineto
+56 112 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 199.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 190 moveto
+56 190 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 173.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 164 moveto
+56 164 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 147.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 138 moveto
+56 138 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 121.4 moveto 23 (1.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 112 moveto
+140 216 lineto
+196 216 lineto
+196 112 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 199.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 190 moveto
+196 190 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 173.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 164 moveto
+196 164 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 147.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 138 moveto
+196 138 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 121.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.33 164 moveto
+77.39 164 106.37 164 129.53 164 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.71 167.5 moveto
+139.71 164 lineto
+129.71 160.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.71 167.5 moveto
+139.71 164 lineto
+129.71 160.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 169.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.51 147.99 moveto
+133.87 145.51 127.87 143.33 122 142 curveto
+101.2 137.28 94.8 137.28 74 142 curveto
+71.34 142.6 68.65 143.38 65.99 144.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 64.53 141.09 moveto
+56.49 147.99 lineto
+67.08 147.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 64.53 141.09 moveto
+56.49 147.99 lineto
+67.08 147.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 147.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 112 moveto
+280 216 lineto
+336 216 lineto
+336 112 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 199.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 190 moveto
+336 190 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 173.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 164 moveto
+336 164 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 147.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 138 moveto
+336 138 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 121.4 moveto 23 (2.0) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.33 164 moveto
+217.39 164 246.37 164 269.53 164 curveto
+stroke
+0 0 0 edgecolor
+newpath 269.71 167.5 moveto
+279.71 164 lineto
+269.71 160.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 269.71 167.5 moveto
+279.71 164 lineto
+269.71 160.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 169.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 738 61 moveto
+738 165 lineto
+794 165 lineto
+794 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+750 148.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 738 139 moveto
+794 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+752 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 738 113 moveto
+794 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+746 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 738 87 moveto
+794 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+754.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 878 122 moveto
+878 226 lineto
+934 226 lineto
+934 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+890 209.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 878 200 moveto
+934 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+892 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 878 174 moveto
+934 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+886 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 878 148 moveto
+934 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+894.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 794.1 141.19 moveto
+799.69 145.67 805.77 149.85 812 153 curveto
+829.22 161.7 850.01 166.82 867.65 169.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 867.21 173.3 moveto
+877.62 171.36 lineto
+868.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 867.21 173.3 moveto
+877.62 171.36 lineto
+868.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+813.5 173.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 878 0 moveto
+878 104 lineto
+934 104 lineto
+934 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+890.5 87.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 878 78 moveto
+934 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+892 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 878 52 moveto
+934 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+886 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 878 26 moveto
+934 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+894.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 794.33 100.66 moveto
+815.68 91.35 845.16 78.51 868.47 68.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 869.94 71.53 moveto
+877.71 64.33 lineto
+867.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 869.94 71.53 moveto
+877.71 64.33 lineto
+867.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+813.5 97.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 584 61 moveto
+584 165 lineto
+640 165 lineto
+640 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+596.5 148.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 584 139 moveto
+640 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+598 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 584 113 moveto
+640 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+592 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 584 87 moveto
+640 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+600.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 737.83 99.35 moveto
+732.06 97.13 725.93 95.18 720 94 curveto
+692.97 88.64 685.03 88.64 658 94 curveto
+655.31 94.53 652.58 95.23 649.87 96.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 648.5 92.8 moveto
+640.17 99.35 lineto
+650.76 99.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 648.5 92.8 moveto
+640.17 99.35 lineto
+650.76 99.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+658.5 99.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AAG->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 877.97 143.29 moveto
+872.42 138.58 866.33 134.22 860 131 curveto
+842.79 122.25 821.84 117.73 804.09 115.41 curveto
+stroke
+0 1 1 edgecolor
+newpath 804.38 111.92 moveto
+794.06 114.28 lineto
+803.6 118.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 804.38 111.92 moveto
+794.06 114.28 lineto
+803.6 118.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+812 136.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1018 137 moveto
+1018 241 lineto
+1074 241 lineto
+1074 137 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1029.5 224.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1018 215 moveto
+1074 215 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1032 198.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1018 189 moveto
+1074 189 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1026 172.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1018 163 moveto
+1074 163 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1034.5 146.4 moveto 23 (1.0) alignedtext
+grestore
+% AAG->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 934.33 177.04 moveto
+955.39 179.29 984.37 182.4 1007.53 184.88 curveto
+stroke
+0 0 0 edgecolor
+newpath 1007.4 188.38 moveto
+1017.71 185.97 lineto
+1008.14 181.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1007.4 188.38 moveto
+1017.71 185.97 lineto
+1008.14 181.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+953.5 188.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 877.77 45.66 moveto
+858.27 42.75 832.3 41.88 812 52 curveto
+808.36 53.81 804.94 56.06 801.73 58.62 curveto
+stroke
+0 1 1 edgecolor
+newpath 799.19 56.21 moveto
+794.19 65.55 lineto
+803.92 61.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 799.19 56.21 moveto
+794.19 65.55 lineto
+803.92 61.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+812 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ACC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1018 10 moveto
+1018 114 lineto
+1074 114 lineto
+1074 10 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1031 97.4 moveto 30 (ACC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1018 88 moveto
+1074 88 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1032 71.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1018 62 moveto
+1074 62 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1026 45.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1018 36 moveto
+1074 36 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1034.5 19.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->ACC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 934.17 65.65 moveto
+939.94 67.87 946.07 69.82 952 71 curveto
+970.11 74.59 990.48 73.28 1007.61 70.69 curveto
+stroke
+0 0 0 edgecolor
+newpath 1008.55 74.08 moveto
+1017.82 68.94 lineto
+1007.37 67.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1008.55 74.08 moveto
+1017.82 68.94 lineto
+1007.37 67.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+953.5 79.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 640.25 113 moveto
+664.78 113 700.52 113 727.64 113 curveto
+stroke
+0 0 0 edgecolor
+newpath 727.93 116.5 moveto
+737.93 113 lineto
+727.93 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 727.93 116.5 moveto
+737.93 113 lineto
+727.93 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+660 118.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 432 51 moveto
+432 155 lineto
+488 155 lineto
+488 51 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+446 138.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 432 129 moveto
+488 129 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+446 112.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 432 103 moveto
+488 103 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+440 86.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 432 77 moveto
+488 77 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+448.5 60.4 moveto 23 (2.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 583.9 106.65 moveto
+578.02 105.56 571.83 104.59 566 104 curveto
+543.7 101.73 518.64 101.4 498.48 101.67 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 498.35 98.17 moveto
+488.42 101.86 lineto
+498.49 105.17 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 498.35 98.17 moveto
+488.42 101.86 lineto
+498.49 105.17 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+506 109.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% CCA
+gsave
+0 0 0.75294 nodecolor
+newpath 584 188 moveto
+584 292 lineto
+640 292 lineto
+640 188 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 188 moveto
+584 292 lineto
+640 292 lineto
+640 188 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+597 275.4 moveto 30 (CCA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 266 moveto
+640 266 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+593.5 249.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 240 moveto
+640 240 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+592 223.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 214 moveto
+640 214 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+600.5 197.4 moveto 23 (1.0) alignedtext
+grestore
+% ATG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 432 173 moveto
+432 277 lineto
+488 277 lineto
+488 173 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+445 260.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 432 251 moveto
+488 251 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+446 234.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 432 225 moveto
+488 225 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+440 208.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 432 199 moveto
+488 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+448.5 182.4 moveto 23 (1.0) alignedtext
+grestore
+% CCA->ATG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 583.88 215 moveto
+578.3 211.3 572.23 208.05 566 206 curveto
+540.67 197.66 532.16 200.81 506 206 curveto
+503.31 206.53 500.58 207.23 497.87 208.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 496.5 204.8 moveto
+488.17 211.35 lineto
+498.76 211.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 496.5 204.8 moveto
+488.17 211.35 lineto
+498.76 211.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+513 211.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATG->CCA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 488.23 227.79 moveto
+512.34 230.16 547.22 233.61 573.81 236.23 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 573.62 239.73 moveto
+583.92 237.23 lineto
+574.31 232.76 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 573.62 239.73 moveto
+583.92 237.23 lineto
+574.31 232.76 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+513 240.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATG->ATA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 431.77 193.96 moveto
+426.28 189.35 420.27 185.11 414 182 curveto
+393.11 171.65 367.37 167.12 346.49 165.18 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 346.6 161.68 moveto
+336.37 164.41 lineto
+346.07 168.66 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 346.6 161.68 moveto
+336.37 164.41 lineto
+346.07 168.66 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+361 187.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 488.17 116.65 moveto
+493.94 118.87 500.07 120.82 506 122 curveto
+528.21 126.41 553.47 124.53 573.75 121.37 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 574.6 124.78 moveto
+583.87 119.63 lineto
+573.42 117.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 574.6 124.78 moveto
+583.87 119.63 lineto
+573.42 117.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+506 130.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 431.81 95.12 moveto
+409.46 90.47 378.08 87.65 354 100 curveto
+350.23 101.93 346.7 104.33 343.41 107.06 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 341 104.52 moveto
+336.16 113.94 lineto
+345.82 109.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 341 104.52 moveto
+336.16 113.94 lineto
+345.82 109.6 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 105.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 279.83 150.35 moveto
+274.06 148.13 267.93 146.18 262 145 curveto
+241.07 140.85 234.93 140.85 214 145 curveto
+211.31 145.53 208.58 146.23 205.87 147.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 204.5 143.8 moveto
+196.17 150.35 lineto
+206.76 150.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 204.5 143.8 moveto
+196.17 150.35 lineto
+206.76 150.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 150.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ATA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 336.04 192.32 moveto
+341.63 196.78 347.73 200.93 354 204 curveto
+375.04 214.31 400.78 219.56 421.63 222.23 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 421.4 225.73 moveto
+431.73 223.38 lineto
+422.19 218.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 421.4 225.73 moveto
+431.73 223.38 lineto
+422.19 218.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+361 225.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.17 152.23 moveto
+342.05 149.81 348.22 147.3 354 145 curveto
+380.53 134.44 387.47 132.56 414 122 curveto
+416.71 120.92 419.5 119.8 422.31 118.66 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 423.89 121.79 moveto
+431.83 114.77 lineto
+421.25 115.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 423.89 121.79 moveto
+431.83 114.77 lineto
+421.25 115.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 150.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% ACC->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1017.55 52.65 moveto
+1011.8 51.13 1005.75 49.8 1000 49 curveto
+981.78 46.48 961.4 46.75 944.29 47.86 curveto
+stroke
+0 1 1 edgecolor
+newpath 943.81 44.38 moveto
+934.1 48.63 lineto
+944.34 51.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 943.81 44.38 moveto
+934.1 48.63 lineto
+944.34 51.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+952 54.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGG->AAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1017.97 165.62 moveto
+1012.33 162.07 1006.22 158.95 1000 157 curveto
+982.01 151.36 961.46 154.08 944.17 158.85 curveto
+stroke
+0 1 1 edgecolor
+newpath 942.94 155.56 moveto
+934.41 161.85 lineto
+945 162.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 942.94 155.56 moveto
+934.41 161.85 lineto
+945 162.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+952 162.4 moveto 48 (RR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 1118 336
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/test.txt b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/test.txt
new file mode 100644
index 0000000..36a4bdd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_7/test.txt
@@ -0,0 +1,12 @@
+AAA {[{AAT:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+GAA {[{AAG:[2]}, {AAC:[1]}] [] [] [{AGA:[1,2]}] {5':[], ~5':[]} 2.0x}
+CCA {[] [{ATG:[2]}] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+AGA {[{GAA:[1,2]}] [] [{CTA:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+ATA {[] [{CTA:[1,2]}] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]} 2.0x}
+CTA {[] [{ATA:[1,2]}] [{AGA:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+AAC {[{ACC:[1]}] [] [] [{GAA:[1]}] {5':[], ~5':[]} 1.0x}
+ACC {[] [] [] [{AAC:[1]}] {5':[], ~5':[]} 1.0x}
+AAG {[{AGG:[2]}] [] [] [{GAA:[2]}] {5':[], ~5':[]} 1.0x}
+AGG {[] [] [] [{AAG:[2]}] {5':[], ~5':[]} 1.0x}
+ATG {[] [{CCA:[2]}] [{ATA:[2]}] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [{AAA:[1]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/..binmerge.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/..binmerge.crc
new file mode 100644
index 0000000..41b1639
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/..binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/.binmerge b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/.binmerge
new file mode 100755
index 0000000..147869b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/.binmerge
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/bin/.part-00000.crc
new file mode 100644
index 0000000..1cb49b3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/bin/part-00000
new file mode 100755
index 0000000..41f98fa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/data
new file mode 100644
index 0000000..7b94e8f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/data
@@ -0,0 +1,4 @@
+ATA {[] [{CTA:[1,2]}] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]} 2.0x}
+CTA {[] [{ATA:[1,2]}] [] [] {5':[], ~5':[]} 2.0x}
+ATG {[] [] [{ATA:[2]}] [] {5':[], ~5':[(2-0_0)]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/graphviz/result.ps
new file mode 100644
index 0000000..b6db264
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_FR/graphviz/result.ps
@@ -0,0 +1,510 @@
+%!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 262 392
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 226 356 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 136 moveto
+0 240 lineto
+56 240 lineto
+56 136 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 223.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 214 moveto
+56 214 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 197.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 188 moveto
+56 188 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 171.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 162 moveto
+56 162 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 145.4 moveto 23 (2.0) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 157 244 moveto
+157 348 lineto
+213 348 lineto
+213 244 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+171 331.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 157 322 moveto
+213 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+171 305.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 157 296 moveto
+213 296 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+165 279.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 157 270 moveto
+213 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+173.5 253.4 moveto 23 (2.0) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 47.72 240.36 moveto
+54.43 252.29 63.08 263.84 74 272 curveto
+94.82 287.55 123.63 293.45 146.68 295.51 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 146.6 299.02 moveto
+156.82 296.21 lineto
+147.08 292.03 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 146.6 299.02 moveto
+156.82 296.21 lineto
+147.08 292.03 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 298.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% ATG
+gsave
+0 0 0.75294 nodecolor
+newpath 152.5 122 moveto
+152.5 226 lineto
+217.5 226 lineto
+217.5 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 152.5 122 moveto
+152.5 226 lineto
+217.5 226 lineto
+217.5 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170 209.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 152.5 200 moveto
+217.5 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+171 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 152.5 174 moveto
+217.5 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+160.5 157.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 152.5 148 moveto
+217.5 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+173.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.02 189.56 moveto
+77.47 190.31 107.72 190.42 134 187 curveto
+136.71 186.65 139.48 186.2 142.27 185.68 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 143.24 189.05 moveto
+152.3 183.57 lineto
+141.8 182.21 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 143.24 189.05 moveto
+152.3 183.57 lineto
+141.8 182.21 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81 194.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 157 0 moveto
+157 104 lineto
+213 104 lineto
+213 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 157 0 moveto
+157 104 lineto
+213 104 lineto
+213 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 157 78 moveto
+213 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 157 52 moveto
+213 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+165 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 157 26 moveto
+213 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+173.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.22 156.41 moveto
+61.94 150.45 68.03 144.4 74 139 curveto
+98.92 116.45 107.57 113.75 134 93 curveto
+138.75 89.27 143.73 85.32 148.63 81.4 curveto
+stroke
+0 1 1 edgecolor
+newpath 151.15 83.87 moveto
+156.77 74.89 lineto
+146.77 78.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 151.15 83.87 moveto
+156.77 74.89 lineto
+146.77 78.41 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+80 144.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 156.75 268.65 moveto
+149.57 262.24 141.7 255.63 134 250 curveto
+112.27 234.1 86.17 218.8 65.32 207.37 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 66.89 204.25 moveto
+56.43 202.57 lineto
+63.56 210.4 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 66.89 204.25 moveto
+56.43 202.57 lineto
+63.56 210.4 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 255.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% ATG->ATA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 152.05 166.03 moveto
+129.76 161.92 99.78 158.91 74 165 curveto
+71.32 165.63 68.62 166.45 65.95 167.39 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81 170.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 156.82 49.59 moveto
+132.32 49.02 97.21 52.12 74 71 curveto
+56.97 84.85 46.22 105.88 39.45 126.3 curveto
+stroke
+0 0 0 edgecolor
+newpath 36.08 125.34 moveto
+36.52 135.93 lineto
+42.78 127.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 36.08 125.34 moveto
+36.52 135.93 lineto
+42.78 127.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81.5 76.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 262 392
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/..binmerge.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/..binmerge.crc
new file mode 100644
index 0000000..cf8405d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/..binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/.binmerge b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/.binmerge
new file mode 100755
index 0000000..58ab875
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/.binmerge
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/bin/.part-00000.crc
new file mode 100644
index 0000000..b1a723f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/bin/part-00000
new file mode 100755
index 0000000..cc057f3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/data
new file mode 100644
index 0000000..1de6348
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/data
@@ -0,0 +1,4 @@
+AGA {[] [] [{CTA:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+ATA {[] [{CTA:[1]}] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+CTA {[] [{GTA:[2]}, {ATA:[1]}] [{AGA:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+GTA {[] [{CTA:[2]}] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/graphviz/result.ps
new file mode 100644
index 0000000..bfb33b7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/head_RF/graphviz/result.ps
@@ -0,0 +1,508 @@
+%!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 390 270
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 354 234 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 148.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 152 61 moveto
+152 165 lineto
+208 165 lineto
+208 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166 148.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 152 139 moveto
+208 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 152 113 moveto
+208 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+160 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 152 87 moveto
+208 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+168.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.23 113 moveto
+80.34 113 115.22 113 141.81 113 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 141.92 116.5 moveto
+151.92 113 lineto
+141.92 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 141.92 116.5 moveto
+151.92 113 lineto
+141.92 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 118.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 151.51 96.99 moveto
+145.87 94.51 139.87 92.33 134 91 curveto
+107.99 85.1 100.01 85.1 74 91 curveto
+71.34 91.6 68.65 92.38 65.99 93.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 64.53 90.09 moveto
+56.49 96.99 lineto
+67.08 96.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 64.53 90.09 moveto
+56.49 96.99 lineto
+67.08 96.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% ATA
+gsave
+0 0 0.75294 nodecolor
+newpath 290 122 moveto
+290 226 lineto
+346 226 lineto
+346 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 122 moveto
+290 226 lineto
+346 226 lineto
+346 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304 209.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 200 moveto
+346 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+299.5 183.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 174 moveto
+346 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 148 moveto
+346 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 208.11 141.17 moveto
+213.7 145.64 219.77 149.84 226 153 curveto
+242.57 161.42 262.52 166.5 279.61 169.55 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 279.39 173.06 moveto
+289.81 171.2 lineto
+280.5 166.15 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 279.39 173.06 moveto
+289.81 171.2 lineto
+280.5 166.15 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+226 172.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% GTA
+gsave
+0 0 0.75294 nodecolor
+newpath 290 0 moveto
+290 104 lineto
+346 104 lineto
+346 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 0 moveto
+290 104 lineto
+346 104 lineto
+346 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+303.5 87.4 moveto 29 (GTA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 78 moveto
+346 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+299.5 61.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 52 moveto
+346 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 26 moveto
+346 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->GTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 208.26 100.51 moveto
+229.1 91.3 257.66 78.67 280.42 68.61 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 282.05 71.72 moveto
+289.78 64.47 lineto
+279.22 65.32 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 282.05 71.72 moveto
+289.78 64.47 lineto
+279.22 65.32 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+226 97.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 289.78 146.6 moveto
+284.21 142.23 278.16 138.12 272 135 curveto
+255.38 126.58 235.42 121.3 218.35 118.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 218.6 114.53 moveto
+208.15 116.25 lineto
+217.39 121.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 218.6 114.53 moveto
+208.15 116.25 lineto
+217.39 121.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+226 140.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% GTA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 289.95 45.73 moveto
+270.92 42.94 245.73 42.17 226 52 curveto
+222.36 53.81 218.94 56.06 215.73 58.62 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 213.19 56.21 moveto
+208.19 65.55 lineto
+217.92 61.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 213.19 56.21 moveto
+208.19 65.55 lineto
+217.92 61.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+226 57.4 moveto 46 (FR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 390 270
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/..binmerge.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/..binmerge.crc
new file mode 100644
index 0000000..d9fd91b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/..binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/.binmerge b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/.binmerge
new file mode 100755
index 0000000..fad1801
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/.binmerge
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/bin/.part-00000.crc
new file mode 100644
index 0000000..f659cad
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/bin/part-00000
new file mode 100755
index 0000000..53fd046
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/data
new file mode 100644
index 0000000..be15e42
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/data
@@ -0,0 +1,6 @@
+AGA {[] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1,2]}] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]} 2.0x}
+CTA {[] [{ATA:[1,2]}] [{AGG:[2]}, {AGA:[1]}] [] {5':[], ~5':[]} 2.0x}
+AGG {[] [] [{CTA:[2]}] [] {5':[], ~5':[]} 1.0x}
+ATG {[] [] [{ATA:[2]}] [] {5':[], ~5':[(2-0_0)]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/graphviz/result.ps
new file mode 100644
index 0000000..c3bc947
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_FR/graphviz/result.ps
@@ -0,0 +1,678 @@
+%!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 540 330
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 504 294 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 148.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 61 moveto
+138 165 lineto
+194 165 lineto
+194 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 148.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 139 moveto
+194 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 113 moveto
+194 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+146 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 87 moveto
+194 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.26 113 moveto
+76.82 113 104.89 113 127.5 113 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 127.78 116.5 moveto
+137.78 113 lineto
+127.78 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 127.78 116.5 moveto
+137.78 113 lineto
+127.78 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 118.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 137.51 96.99 moveto
+131.87 94.51 125.87 92.33 120 91 curveto
+100.06 86.48 93.94 86.48 74 91 curveto
+71.34 91.6 68.65 92.38 65.99 93.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 64.53 90.09 moveto
+56.49 96.99 lineto
+67.08 96.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 64.53 90.09 moveto
+56.49 96.99 lineto
+67.08 96.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 122 moveto
+290 226 lineto
+346 226 lineto
+346 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304 209.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 200 moveto
+346 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 174 moveto
+346 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 148 moveto
+346 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 131.4 moveto 23 (2.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 194.04 141.32 moveto
+199.63 145.78 205.73 149.93 212 153 curveto
+233.04 163.31 258.78 168.56 279.63 171.23 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 279.4 174.73 moveto
+289.73 172.38 lineto
+280.19 167.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 279.4 174.73 moveto
+289.73 172.38 lineto
+280.19 167.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 174.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 0 moveto
+290 104 lineto
+346 104 lineto
+346 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+301.5 87.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 78 moveto
+346 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 52 moveto
+346 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 26 moveto
+346 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->AGG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 194.39 101.88 moveto
+215.76 93.48 245.76 81.62 272 71 curveto
+274.7 69.91 277.49 68.77 280.3 67.62 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 281.89 70.76 moveto
+289.81 63.72 lineto
+279.23 64.28 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 281.89 70.76 moveto
+289.81 63.72 lineto
+279.23 64.28 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+219 98.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 289.86 146.45 moveto
+284.28 142.09 278.21 138.03 272 135 curveto
+250.9 124.71 225.16 119.22 204.33 116.3 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 204.59 112.81 moveto
+194.23 115.03 lineto
+203.72 119.75 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 204.59 112.81 moveto
+194.23 115.03 lineto
+203.72 119.75 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 140.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% ATG
+gsave
+0 0 0.75294 nodecolor
+newpath 430.5 182 moveto
+430.5 286 lineto
+495.5 286 lineto
+495.5 182 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430.5 182 moveto
+430.5 286 lineto
+495.5 286 lineto
+495.5 182 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+448 269.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430.5 260 moveto
+495.5 260 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+449 243.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430.5 234 moveto
+495.5 234 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+438.5 217.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430.5 208 moveto
+495.5 208 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+451.5 191.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 346.15 201.53 moveto
+351.73 205.89 357.8 209.96 364 213 curveto
+381.49 221.58 402.39 226.67 420.48 229.68 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 420.06 233.15 moveto
+430.47 231.18 lineto
+421.11 226.23 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 420.06 233.15 moveto
+430.47 231.18 lineto
+421.11 226.23 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+365 232.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 435 60 moveto
+435 164 lineto
+491 164 lineto
+491 60 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 435 60 moveto
+435 164 lineto
+491 164 lineto
+491 60 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+448.5 147.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 435 138 moveto
+491 138 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+444.5 121.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 435 112 moveto
+491 112 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+443 95.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 435 86 moveto
+491 86 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+451.5 69.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 346.3 161.9 moveto
+368.86 152.25 400.64 138.66 425.34 128.1 curveto
+stroke
+0 1 1 edgecolor
+newpath 426.95 131.22 moveto
+434.77 124.07 lineto
+424.2 124.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 426.95 131.22 moveto
+434.77 124.07 lineto
+424.2 124.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+364 158.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ATG->ATA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 430.43 202.4 moveto
+424.63 198.02 418.39 194.01 412 191 curveto
+394.69 182.86 373.89 178.6 356.26 176.38 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 356.62 172.9 moveto
+346.3 175.3 lineto
+355.87 179.86 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 356.62 172.9 moveto
+346.3 175.3 lineto
+355.87 179.86 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+365 196.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 434.97 105.08 moveto
+414.24 101.48 385.91 99.87 364 111 curveto
+360.37 112.85 356.96 115.13 353.76 117.72 curveto
+stroke
+0 0 0 edgecolor
+newpath 351.18 115.33 moveto
+346.26 124.71 lineto
+355.96 120.45 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 351.18 115.33 moveto
+346.26 124.71 lineto
+355.96 120.45 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+365.5 116.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGG->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 289.81 44.12 moveto
+267.46 39.47 236.08 36.65 212 49 curveto
+208.23 50.93 204.7 53.33 201.41 56.06 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 199 53.52 moveto
+194.16 62.94 lineto
+203.82 58.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 199 53.52 moveto
+194.16 62.94 lineto
+203.82 58.6 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+219 54.4 moveto 46 (RF: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 540 330
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/..binmerge.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/..binmerge.crc
new file mode 100644
index 0000000..0878180
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/..binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/.binmerge b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/.binmerge
new file mode 100755
index 0000000..4a858dd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/.binmerge
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/bin/.part-00000.crc
new file mode 100644
index 0000000..3973aee
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/bin/part-00000
new file mode 100755
index 0000000..0c15b43
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/data b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/data
new file mode 100644
index 0000000..0993bb0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/data
@@ -0,0 +1,6 @@
+GAA {[] [] [] [{AGA:[1]}] {5':[], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}, {GAC:[2]}] [] [{CTA:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+ATA {[] [{CTA:[1]}] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+CTA {[] [{GTA:[2]}, {ATA:[1]}] [{AGA:[1,2]}] [] {5':[], ~5':[]} 2.0x}
+GTA {[] [{CTA:[2]}] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+GAC {[] [] [] [{AGA:[2]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/graphviz/result.ps
new file mode 100644
index 0000000..9958dbd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/PathMerge/twohead_RF/graphviz/result.ps
@@ -0,0 +1,679 @@
+%!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 530 331
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 494 295 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 122 moveto
+0 226 lineto
+56 226 lineto
+56 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 209.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 200 moveto
+56 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 174 moveto
+56 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 148 moveto
+56 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 209.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+196 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 131.4 moveto 23 (2.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 174 moveto
+77.39 174 106.37 174 129.53 174 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 177.5 moveto
+139.71 174 lineto
+129.71 170.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 177.5 moveto
+139.71 174 lineto
+129.71 170.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 179.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 157.99 moveto
+133.87 155.51 127.87 153.33 122 152 curveto
+101.2 147.28 94.8 147.28 74 152 curveto
+71.34 152.6 68.65 153.38 65.99 154.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 151.09 moveto
+56.49 157.99 lineto
+67.08 157.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 151.09 moveto
+56.49 157.99 lineto
+67.08 157.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 157.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 292 183 moveto
+292 287 lineto
+348 287 lineto
+348 183 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304.5 270.4 moveto 31 (GAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 292 261 moveto
+348 261 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306 244.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 292 235 moveto
+348 235 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+300 218.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 292 209 moveto
+348 209 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+308.5 192.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->GAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.04 202.32 moveto
+201.63 206.78 207.73 210.93 214 214 curveto
+235.04 224.31 260.78 229.56 281.63 232.23 curveto
+stroke
+0 0 0 edgecolor
+newpath 281.4 235.73 moveto
+291.73 233.38 lineto
+282.19 228.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 281.4 235.73 moveto
+291.73 233.38 lineto
+282.19 228.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+221.5 235.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 292 61 moveto
+292 165 lineto
+348 165 lineto
+348 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306 148.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 292 139 moveto
+348 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 292 113 moveto
+348 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+300 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 292 87 moveto
+348 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+308.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.17 162.23 moveto
+202.05 159.81 208.22 157.3 214 155 curveto
+240.53 144.44 247.47 142.56 274 132 curveto
+276.71 130.92 279.5 129.8 282.31 128.66 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 283.89 131.79 moveto
+291.83 124.77 lineto
+281.25 125.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 283.89 131.79 moveto
+291.83 124.77 lineto
+281.25 125.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 160.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% GAC->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 291.77 203.96 moveto
+286.28 199.35 280.27 195.11 274 192 curveto
+253.11 181.65 227.37 177.12 206.49 175.18 curveto
+stroke
+0 1 1 edgecolor
+newpath 206.6 171.68 moveto
+196.37 174.41 lineto
+206.07 178.66 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 206.6 171.68 moveto
+196.37 174.41 lineto
+206.07 178.66 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+220 197.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 291.81 105.12 moveto
+269.46 100.47 238.08 97.65 214 110 curveto
+210.23 111.93 206.7 114.33 203.41 117.06 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 201 114.52 moveto
+196.16 123.94 lineto
+205.82 119.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 201 114.52 moveto
+196.16 123.94 lineto
+205.82 119.6 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 115.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% ATA
+gsave
+0 0 0.75294 nodecolor
+newpath 430 122 moveto
+430 226 lineto
+486 226 lineto
+486 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430 122 moveto
+430 226 lineto
+486 226 lineto
+486 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+444 209.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430 200 moveto
+486 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+439.5 183.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430 174 moveto
+486 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+438 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430 148 moveto
+486 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+446.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 348.11 141.17 moveto
+353.7 145.64 359.77 149.84 366 153 curveto
+382.57 161.42 402.52 166.5 419.61 169.55 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 419.39 173.06 moveto
+429.81 171.2 lineto
+420.5 166.15 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 419.39 173.06 moveto
+429.81 171.2 lineto
+420.5 166.15 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+366 172.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% GTA
+gsave
+0 0 0.75294 nodecolor
+newpath 430 0 moveto
+430 104 lineto
+486 104 lineto
+486 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430 0 moveto
+430 104 lineto
+486 104 lineto
+486 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+443.5 87.4 moveto 29 (GTA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430 78 moveto
+486 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+439.5 61.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430 52 moveto
+486 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+438 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 430 26 moveto
+486 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+446.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->GTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 348.26 100.51 moveto
+369.1 91.3 397.66 78.67 420.42 68.61 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 422.05 71.72 moveto
+429.78 64.47 lineto
+419.22 65.32 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 422.05 71.72 moveto
+429.78 64.47 lineto
+419.22 65.32 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+366 97.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 429.78 146.6 moveto
+424.21 142.23 418.16 138.12 412 135 curveto
+395.38 126.58 375.42 121.3 358.35 118.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 358.6 114.53 moveto
+348.15 116.25 lineto
+357.39 121.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 358.6 114.53 moveto
+348.15 116.25 lineto
+357.39 121.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+366 140.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% GTA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 429.95 45.73 moveto
+410.92 42.94 385.73 42.17 366 52 curveto
+362.36 53.81 358.94 56.06 355.73 58.62 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 353.19 56.21 moveto
+348.19 65.55 lineto
+357.92 61.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 353.19 56.21 moveto
+348.19 65.55 lineto
+357.92 61.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+366 57.4 moveto 46 (FR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 530 331
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/RemoveLowCoverage/MaxCoverage_6/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/RemoveLowCoverage/MaxCoverage_6/bin/part-00000
new file mode 100755
index 0000000..c1b4e20
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/RemoveLowCoverage/MaxCoverage_6/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/RemoveLowCoverage/MaxCoverage_6/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/RemoveLowCoverage/MaxCoverage_6/graphviz/result.ps
new file mode 100644
index 0000000..96623fa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/RemoveLowCoverage/MaxCoverage_6/graphviz/result.ps
@@ -0,0 +1,693 @@
+%!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 962 184
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 926 148 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+80 104 lineto
+80 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+80 104 lineto
+80 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+24.5 87.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+80 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 61.4 moveto 64 (5':[2,3,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+80 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+20 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+80 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+28.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 0 moveto
+192 104 lineto
+248 104 lineto
+248 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+205.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 78 moveto
+248 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+206 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 52 moveto
+248 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+200 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 26 moveto
+248 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+208.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 80.4 52 moveto
+110.72 52 151.96 52 181.75 52 curveto
+stroke
+0 0 0 edgecolor
+newpath 181.77 55.5 moveto
+191.77 52 lineto
+181.77 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 181.77 55.5 moveto
+191.77 52 lineto
+181.77 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+100 57.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 191.51 35.99 moveto
+185.87 33.51 179.87 31.33 174 30 curveto
+141.06 22.53 131.22 23.91 98 30 curveto
+95.31 30.49 92.59 31.1 89.86 31.81 curveto
+stroke
+0 1 1 edgecolor
+newpath 88.64 28.52 moveto
+80.03 34.69 lineto
+90.61 35.23 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 88.64 28.52 moveto
+80.03 34.69 lineto
+90.61 35.23 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+98.5 35.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% ATC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 360 0 moveto
+360 104 lineto
+416 104 lineto
+416 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+374 87.4 moveto 28 (ATC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 360 78 moveto
+416 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+374 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 360 52 moveto
+416 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+368 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 360 26 moveto
+416 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+376.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAT->ATC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 248.12 52 moveto
+275.86 52 318.48 52 349.39 52 curveto
+stroke
+0 0 0 edgecolor
+newpath 349.79 55.5 moveto
+359.79 52 lineto
+349.79 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 349.79 55.5 moveto
+359.79 52 lineto
+349.79 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+268 57.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 694 0 moveto
+694 104 lineto
+750 104 lineto
+750 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+706 87.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 694 78 moveto
+750 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+708 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 694 52 moveto
+750 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+702 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 694 26 moveto
+750 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+710.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 862 0 moveto
+862 104 lineto
+918 104 lineto
+918 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+874.5 87.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 862 78 moveto
+918 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+876 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 862 52 moveto
+918 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+870 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 862 26 moveto
+918 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+878.5 9.4 moveto 23 (3.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 750.12 52 moveto
+777.86 52 820.48 52 851.39 52 curveto
+stroke
+0 0 0 edgecolor
+newpath 851.79 55.5 moveto
+861.79 52 lineto
+851.79 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 851.79 55.5 moveto
+861.79 52 lineto
+851.79 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+770 57.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% CGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 526 0 moveto
+526 104 lineto
+582 104 lineto
+582 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+538.5 87.4 moveto 31 (CGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 526 78 moveto
+582 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+540 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 526 52 moveto
+582 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+534 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 526 26 moveto
+582 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+542.5 9.4 moveto 23 (6.0) alignedtext
+grestore
+% GAA->CGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 693.83 38.35 moveto
+688.06 36.13 681.93 34.18 676 33 curveto
+642.87 26.43 633.13 26.43 600 33 curveto
+597.31 33.53 594.58 34.23 591.87 35.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 590.5 31.8 moveto
+582.17 38.35 lineto
+592.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 590.5 31.8 moveto
+582.17 38.35 lineto
+592.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+600.5 38.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 861.51 35.99 moveto
+855.87 33.51 849.87 31.33 844 30 curveto
+811.06 22.53 800.94 22.53 768 30 curveto
+765.34 30.6 762.65 31.38 759.99 32.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 758.53 29.09 moveto
+750.49 35.99 lineto
+761.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 758.53 29.09 moveto
+750.49 35.99 lineto
+761.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+768.5 35.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% CGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 582.12 52 moveto
+609.86 52 652.48 52 683.39 52 curveto
+stroke
+0 0 0 edgecolor
+newpath 683.79 55.5 moveto
+693.79 52 lineto
+683.79 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 683.79 55.5 moveto
+693.79 52 lineto
+683.79 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+602 57.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% CGA->CGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 539.26 104.2 moveto
+540.92 114.59 545.83 122 554 122 curveto
+559.23 122 563.13 118.96 565.69 114.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 569.12 114.79 moveto
+568.74 104.2 lineto
+562.44 112.72 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 569.12 114.79 moveto
+568.74 104.2 lineto
+562.44 112.72 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+517.5 127.4 moveto 73 (RF: [1,2,3]) alignedtext
+grestore
+% CGA->ATC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 525.83 38.35 moveto
+520.06 36.13 513.93 34.18 508 33 curveto
+475.74 26.6 466.26 26.6 434 33 curveto
+431.31 33.53 428.58 34.23 425.87 35.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 424.5 31.8 moveto
+416.17 38.35 lineto
+426.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 424.5 31.8 moveto
+416.17 38.35 lineto
+426.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+434.5 38.4 moveto 73 (FR: [1,2,3]) alignedtext
+grestore
+% ATC->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 359.83 38.35 moveto
+354.06 36.13 347.93 34.18 342 33 curveto
+308.87 26.43 299.13 26.43 266 33 curveto
+263.31 33.53 260.58 34.23 257.87 35.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 256.5 31.8 moveto
+248.17 38.35 lineto
+258.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 256.5 31.8 moveto
+248.17 38.35 lineto
+258.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+266.5 38.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% ATC->CGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 416.16 52 moveto
+443.55 52 485.36 52 515.75 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 515.98 55.5 moveto
+525.98 52 lineto
+515.98 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 515.98 55.5 moveto
+525.98 52 lineto
+515.98 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+434.5 57.4 moveto 73 (FR: [1,2,3]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 962 184
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/RemoveLowCoverage/MaxCoverage_6/test.txt b/genomix/genomix-pregelix/data/TestSet/RemoveLowCoverage/MaxCoverage_6/test.txt
new file mode 100644
index 0000000..45adac8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/RemoveLowCoverage/MaxCoverage_6/test.txt
@@ -0,0 +1,6 @@
+AAA {[{AAT:[1,2,3]}] [] [] [] {5':[(2-0_0),(3-0_0),(1-0_0)], ~5':[]} 3.0x}
+GAA {[{AAC:[1,2,3]}] [] [] [{CGA:[1,2,3]}] {5':[], ~5':[]} 3.0x}
+CGA {[{GAA:[1,2,3]}] [{ATC:[1,2,3]}] [{CGA:[1,2,3]}] [] {5':[], ~5':[]} 6.0x}
+AAC {[] [] [] [{GAA:[1,2,3]}] {5':[], ~5':[]} 3.0x}
+ATC {[] [{CGA:[1,2,3]}] [] [{AAT:[1,2,3]}] {5':[], ~5':[]} 3.0x}
+AAT {[{ATC:[1,2,3]}] [] [] [{AAA:[1,2,3]}] {5':[], ~5':[]} 3.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/.test.txt.binmerge.crc b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/.test.txt.binmerge.crc
new file mode 100644
index 0000000..ec3988a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/.test.txt.binmerge.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/bin/.part-00000.crc
new file mode 100644
index 0000000..4109544
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/bin/part-00000
new file mode 100755
index 0000000..3182511
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/graphviz/result.ps
new file mode 100644
index 0000000..f811680
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/graphviz/result.ps
@@ -0,0 +1,933 @@
+%!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 658 305
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 622 269 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 148.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 209.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+196 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.1 141.19 moveto
+61.69 145.67 67.77 149.85 74 153 curveto
+91.22 161.7 112.01 166.82 129.65 169.83 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.21 173.3 moveto
+139.62 171.36 lineto
+130.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 173.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 100.66 moveto
+77.68 91.35 107.16 78.51 130.47 68.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 131.94 71.53 moveto
+139.71 64.33 lineto
+129.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.97 143.29 moveto
+134.42 138.58 128.33 134.22 122 131 curveto
+104.79 122.25 83.84 117.73 66.09 115.41 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.38 111.92 moveto
+56.06 114.28 lineto
+65.6 118.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 136.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ACT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 132 moveto
+280 236 lineto
+336 236 lineto
+336 132 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+293.5 219.4 moveto 29 (ACT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 210 moveto
+336 210 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 193.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 184 moveto
+336 184 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 167.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 158 moveto
+336 158 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 141.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->ACT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.33 176.02 moveto
+217.39 177.53 246.37 179.6 269.53 181.25 curveto
+stroke
+0 0 0 edgecolor
+newpath 269.49 184.76 moveto
+279.71 181.98 lineto
+269.99 177.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 269.49 184.76 moveto
+279.71 181.98 lineto
+269.99 177.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215.5 185.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.74 45.17 moveto
+120.24 41.97 94.26 40.8 74 51 curveto
+70.33 52.85 66.89 55.14 63.66 57.74 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.02 55.41 moveto
+56.08 64.78 lineto
+65.79 60.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 56.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 10 moveto
+280 114 lineto
+336 114 lineto
+336 10 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 97.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 88 moveto
+336 88 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294 71.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 62 moveto
+336 62 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 45.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 280 36 moveto
+336 36 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296.5 19.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.17 65.65 moveto
+201.94 67.87 208.07 69.82 214 71 curveto
+232.11 74.59 252.48 73.28 269.61 70.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 270.55 74.08 moveto
+279.82 68.94 lineto
+269.37 67.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 270.55 74.08 moveto
+279.82 68.94 lineto
+269.37 67.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215 78.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% TAA
+gsave
+0 0 0.75294 nodecolor
+newpath 558 157 moveto
+558 261 lineto
+614 261 lineto
+614 157 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 157 moveto
+558 261 lineto
+614 261 lineto
+614 157 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+571.5 244.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 235 moveto
+614 235 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+567.5 218.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 209 moveto
+614 209 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 192.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 183 moveto
+614 183 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 166.4 moveto 23 (1.0) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 142 moveto
+418 246 lineto
+474 246 lineto
+474 142 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 229.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 220 moveto
+474 220 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 203.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 194 moveto
+474 194 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 177.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 168 moveto
+474 168 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 151.4 moveto 23 (1.0) alignedtext
+grestore
+% TAA->AAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 557.88 184 moveto
+552.3 180.3 546.23 177.05 540 175 curveto
+519.74 168.32 512.93 170.85 492 175 curveto
+489.31 175.53 486.58 176.23 483.87 177.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 482.5 173.8 moveto
+474.17 180.35 lineto
+484.76 180.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 482.5 173.8 moveto
+474.17 180.35 lineto
+484.76 180.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 180.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AAG->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 474.33 197.04 moveto
+495.39 199.29 524.37 202.4 547.53 204.88 curveto
+stroke
+0 1 1 edgecolor
+newpath 547.4 208.38 moveto
+557.71 205.97 lineto
+548.14 201.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 547.4 208.38 moveto
+557.71 205.97 lineto
+548.14 201.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 208.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAG->ACT
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.99 172.93 moveto
+412.3 169.66 406.17 166.78 400 165 curveto
+380.36 159.33 374.05 161.02 354 165 curveto
+351.31 165.53 348.58 166.23 345.87 167.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 344.5 163.8 moveto
+336.17 170.35 lineto
+346.76 170.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 344.5 163.8 moveto
+336.17 170.35 lineto
+346.76 170.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 170.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 279.55 52.65 moveto
+273.8 51.13 267.75 49.8 262 49 curveto
+243.78 46.48 223.4 46.75 206.29 47.86 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 205.81 44.38 moveto
+196.1 48.63 lineto
+206.34 51.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 205.81 44.38 moveto
+196.1 48.63 lineto
+206.34 51.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+215 54.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 20 moveto
+418 124 lineto
+474 124 lineto
+474 20 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 107.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 98 moveto
+474 98 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432 81.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 72 moveto
+474 72 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+426 55.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 418 46 moveto
+474 46 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+434.5 29.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.17 75.65 moveto
+341.94 77.87 348.07 79.82 354 81 curveto
+371.47 84.47 391.08 83.24 407.69 80.73 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 408.34 84.17 moveto
+417.6 79.04 lineto
+407.16 77.27 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 408.34 84.17 moveto
+417.6 79.04 lineto
+407.16 77.27 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 88.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 417.9 65.66 moveto
+412.02 64.57 405.83 63.6 400 63 curveto
+382.53 61.21 363.1 60.77 346.62 60.86 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 346.22 57.36 moveto
+336.26 60.98 lineto
+346.3 64.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 346.22 57.36 moveto
+336.26 60.98 lineto
+346.3 64.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 68.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 558 30 moveto
+558 134 lineto
+614 134 lineto
+614 30 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 30 moveto
+558 134 lineto
+614 134 lineto
+614 30 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+571.5 117.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 108 moveto
+614 108 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+567.5 91.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 82 moveto
+614 82 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+566 65.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 558 56 moveto
+614 56 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574.5 39.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 474.17 85.65 moveto
+479.94 87.87 486.07 89.82 492 91 curveto
+510.11 94.59 530.48 93.28 547.61 90.69 curveto
+stroke
+0 1 1 edgecolor
+newpath 548.55 94.08 moveto
+557.82 88.94 lineto
+547.37 87.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 548.55 94.08 moveto
+557.82 88.94 lineto
+547.37 87.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 98.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 557.55 72.65 moveto
+551.8 71.13 545.75 69.8 540 69 curveto
+521.78 66.48 501.4 66.75 484.29 67.86 curveto
+stroke
+0 0 0 edgecolor
+newpath 483.81 64.38 moveto
+474.1 68.63 lineto
+484.34 71.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 483.81 64.38 moveto
+474.1 68.63 lineto
+484.34 71.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+493.5 74.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ACT->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 279.99 162.93 moveto
+274.3 159.66 268.17 156.78 262 155 curveto
+241.5 149.08 234.93 150.85 214 155 curveto
+211.31 155.53 208.58 156.23 205.87 157.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 204.5 153.8 moveto
+196.17 160.35 lineto
+206.76 160.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 204.5 153.8 moveto
+196.17 160.35 lineto
+206.76 160.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 160.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ACT->AAG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 336.26 186.05 moveto
+356.82 187.54 384.89 189.57 407.5 191.21 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 407.55 194.72 moveto
+417.78 191.95 lineto
+408.06 187.74 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 407.55 194.72 moveto
+417.78 191.95 lineto
+408.06 187.74 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+354 195.4 moveto 46 (FR: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 658 305
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/test.txt b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/test.txt
new file mode 100644
index 0000000..3172010
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/Scaffolding/PairedEnd/test.txt
@@ -0,0 +1,9 @@
+GAA {[{AAC:[1]}] [] [] [{AGA:[1]}] {5':[], ~5':[]} 2.0x}
+TAA {[{AAG:[1]}] [] [] [] {5':[(1-0_1)], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAC {[{ACT:[1]}] [] [] [{GAA:[1]}] {5':[], ~5':[]} 1.0x}
+AAG {[] [{ACT:[1]}] [] [{TAA:[1]}] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+ACT {[] [{AAG:[1]}] [] [{AAC:[1]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/bin/.part-00000.crc
new file mode 100644
index 0000000..8102184
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/bin/part-00000
new file mode 100755
index 0000000..b1950dc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/data b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/data
new file mode 100644
index 0000000..ebba2b5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/data
@@ -0,0 +1,4 @@
+AAA {[{AAT:[1,2]}] [] [] [{TAA:[1]}, {GAA:[2]}] {5':[], ~5':[]} 2.0x}
+GAA {[{AAA:[2]}] [] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+TAA {[{AAA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+AAT {[] [] [] [{AAA:[1,2]}] {5':[], ~5':[]} 2.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/graphviz/result.ps
new file mode 100644
index 0000000..7f8c756
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/2to1/graphviz/result.ps
@@ -0,0 +1,510 @@
+%!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 254 392
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 218 356 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 136 moveto
+0 240 lineto
+56 240 lineto
+56 136 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 223.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 214 moveto
+56 214 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 197.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 188 moveto
+56 188 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 171.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 162 moveto
+56 162 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 145.4 moveto 23 (2.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 244 moveto
+154 348 lineto
+210 348 lineto
+210 244 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+167.5 331.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 322 moveto
+210 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+168 305.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 296 moveto
+210 296 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162 279.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 270 moveto
+210 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 253.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 47.76 240.32 moveto
+54.46 252.25 63.1 263.81 74 272 curveto
+93.89 286.94 121.29 292.9 143.51 295.15 curveto
+stroke
+0 0 0 edgecolor
+newpath 143.39 298.65 moveto
+153.63 295.96 lineto
+143.94 291.68 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 143.39 298.65 moveto
+153.63 295.96 lineto
+143.94 291.68 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76 299.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% TAA
+gsave
+0 0 0.75294 nodecolor
+newpath 154 122 moveto
+154 226 lineto
+210 226 lineto
+210 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 122 moveto
+154 226 lineto
+210 226 lineto
+210 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+167.5 209.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 200 moveto
+210 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+163.5 183.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 174 moveto
+210 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 148 moveto
+210 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.13 189.77 moveto
+78.01 190.67 109.09 190.86 136 187 curveto
+138.52 186.64 141.09 186.18 143.67 185.65 curveto
+stroke
+0 1 1 edgecolor
+newpath 144.62 189.02 moveto
+153.54 183.31 lineto
+143.01 182.21 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 144.62 189.02 moveto
+153.54 183.31 lineto
+143.01 182.21 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81 195.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GAA
+gsave
+0 0 0.75294 nodecolor
+newpath 154 0 moveto
+154 104 lineto
+210 104 lineto
+210 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 0 moveto
+154 104 lineto
+210 104 lineto
+210 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166 87.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 78 moveto
+210 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+163.5 61.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 52 moveto
+210 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154 26 moveto
+210 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.15 156.33 moveto
+61.87 150.38 67.99 144.35 74 139 curveto
+99.62 116.18 109.39 114.66 136 93 curveto
+139.27 90.34 142.62 87.53 145.95 84.68 curveto
+stroke
+0 1 1 edgecolor
+newpath 148.38 87.2 moveto
+153.64 77.99 lineto
+143.79 81.91 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 148.38 87.2 moveto
+153.64 77.99 lineto
+143.79 81.91 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81 144.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 153.88 265.56 moveto
+148.2 260.1 142.1 254.67 136 250 curveto
+123.68 240.57 91.21 222.21 65.06 207.91 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.58 204.75 moveto
+56.12 203.04 lineto
+63.23 210.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.58 204.75 moveto
+56.12 203.04 lineto
+63.23 210.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 255.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% TAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 153.67 166.86 moveto
+131.67 162.45 100.55 158.73 74 165 curveto
+71.32 165.63 68.62 166.45 65.95 167.39 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.37 164.25 moveto
+56.43 171.26 lineto
+67.01 170.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 170.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 153.63 49.79 moveto
+129.83 49.47 96.26 52.81 74 71 curveto
+57 84.89 46.26 105.92 39.48 126.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 36.12 125.39 moveto
+36.55 135.97 lineto
+42.81 127.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 36.12 125.39 moveto
+36.55 135.97 lineto
+42.81 127.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 76.4 moveto 45 (FF: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 254 392
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/bin/.part-00000.crc
new file mode 100644
index 0000000..22a96a2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/bin/part-00000
new file mode 100755
index 0000000..7f99bf1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/graphviz/result.ps
new file mode 100644
index 0000000..e52e930
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/graphviz/result.ps
@@ -0,0 +1,690 @@
+%!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 666 270
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 630 234 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GCA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 148.4 moveto 31 (GCA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 122.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% ATG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 61 moveto
+138 165 lineto
+194 165 lineto
+194 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+151 148.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 139 moveto
+194 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 113 moveto
+194 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+146 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 87 moveto
+194 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% GCA->ATG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 56.26 113 moveto
+76.82 113 104.89 113 127.5 113 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 127.78 116.5 moveto
+137.78 113 lineto
+127.78 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 127.78 116.5 moveto
+137.78 113 lineto
+127.78 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 118.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATG->GCA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 137.51 96.99 moveto
+131.87 94.51 125.87 92.33 120 91 curveto
+100.06 86.48 93.94 86.48 74 91 curveto
+71.34 91.6 68.65 92.38 65.99 93.28 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 64.53 90.09 moveto
+56.49 96.99 lineto
+67.08 96.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 64.53 90.09 moveto
+56.49 96.99 lineto
+67.08 96.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATA
+gsave
+0 0 0.75294 nodecolor
+newpath 276 61 moveto
+276 165 lineto
+332 165 lineto
+332 61 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 276 61 moveto
+276 165 lineto
+332 165 lineto
+332 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290 148.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 276 139 moveto
+332 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+285.5 122.4 moveto 37 (5':[3]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 276 113 moveto
+332 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+284 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 276 87 moveto
+332 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292.5 70.4 moveto 23 (3.0) alignedtext
+grestore
+% ATG->ATA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 194.26 113 moveto
+214.82 113 242.89 113 265.5 113 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 265.78 116.5 moveto
+275.78 113 lineto
+265.78 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 265.78 116.5 moveto
+275.78 113 lineto
+265.78 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 118.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% ATA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 275.83 99.35 moveto
+270.06 97.13 263.93 95.18 258 94 curveto
+237.95 90.02 232.05 90.02 212 94 curveto
+209.31 94.53 206.58 95.23 203.87 96.03 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 202.5 92.8 moveto
+194.17 99.35 lineto
+204.76 99.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 202.5 92.8 moveto
+194.17 99.35 lineto
+204.76 99.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 99.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428 122 moveto
+428 226 lineto
+484 226 lineto
+484 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+442 209.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428 200 moveto
+484 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+442 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428 174 moveto
+484 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+436 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428 148 moveto
+484 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+444.5 131.4 moveto 23 (2.0) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 332.04 141.32 moveto
+337.63 145.78 343.73 149.93 350 153 curveto
+371.04 163.31 396.78 168.56 417.63 171.23 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 417.4 174.73 moveto
+427.73 172.38 lineto
+418.19 167.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 417.4 174.73 moveto
+427.73 172.38 lineto
+418.19 167.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+350 175.4 moveto 60 (FR: [1,3]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 428 0 moveto
+428 104 lineto
+484 104 lineto
+484 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 428 0 moveto
+428 104 lineto
+484 104 lineto
+484 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+441.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 428 78 moveto
+484 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+437.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 428 52 moveto
+484 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+436 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 428 26 moveto
+484 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+444.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 332.17 101.23 moveto
+338.05 98.81 344.22 96.3 350 94 curveto
+376.53 83.44 383.47 81.56 410 71 curveto
+412.71 69.92 415.5 68.8 418.31 67.66 curveto
+stroke
+0 1 1 edgecolor
+newpath 419.89 70.79 moveto
+427.83 63.77 lineto
+417.25 64.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 419.89 70.79 moveto
+427.83 63.77 lineto
+417.25 64.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+356 99.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 427.77 142.96 moveto
+422.28 138.35 416.27 134.11 410 131 curveto
+389.11 120.65 363.37 116.12 342.49 114.18 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 342.6 110.68 moveto
+332.37 113.41 lineto
+342.07 117.66 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 342.6 110.68 moveto
+332.37 113.41 lineto
+342.07 117.66 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+350 136.4 moveto 60 (FR: [1,3]) alignedtext
+grestore
+% AGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 566 121 moveto
+566 225 lineto
+622 225 lineto
+622 121 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+578.5 208.4 moveto 31 (AGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 566 199 moveto
+622 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+580 182.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 566 173 moveto
+622 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+574 156.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 566 147 moveto
+622 147 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+582.5 130.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->AGC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 484.26 173.8 moveto
+504.82 173.65 532.89 173.44 555.5 173.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 555.8 176.78 moveto
+565.78 173.2 lineto
+555.75 169.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 555.8 176.78 moveto
+565.78 173.2 lineto
+555.75 169.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+502 179.4 moveto 46 (RF: [3]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 427.81 44.12 moveto
+405.46 39.47 374.08 36.65 350 49 curveto
+346.23 50.93 342.7 53.33 339.41 56.06 curveto
+stroke
+0 0 0 edgecolor
+newpath 337 53.52 moveto
+332.16 62.94 lineto
+341.82 58.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 337 53.52 moveto
+332.16 62.94 lineto
+341.82 58.6 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+357.5 54.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGC->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 565.95 157.92 moveto
+560.17 155.47 554 153.31 548 152 curveto
+528.02 147.66 521.94 147.48 502 152 curveto
+499.34 152.6 496.65 153.38 493.99 154.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 492.53 151.09 moveto
+484.49 157.99 lineto
+495.08 157.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 492.53 151.09 moveto
+484.49 157.99 lineto
+495.08 157.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+502 157.4 moveto 46 (RF: [3]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 666 270
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/test.txt b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/test.txt
new file mode 100644
index 0000000..717f9ac
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/AdjSplitRepeat/test.txt
@@ -0,0 +1,6 @@
+GCA {[] [{ATG:[2]}] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1,3]}] [{ATG:[2]}] [{AAT:[1]}] {5':[(3-0_0)], ~5':[]} 3.0x}
+CTA {[] [{ATA:[1,3]}] [{AGC:[3]}] [] {5':[], ~5':[]} 2.0x}
+AGC {[] [] [{CTA:[3]}] [] {5':[], ~5':[]} 1.0x}
+ATG {[] [{GCA:[2]}] [{ATA:[2]}] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/bin/.part-00000.crc
new file mode 100644
index 0000000..1eb0304
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/bin/part-00000
new file mode 100755
index 0000000..af2c113
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/data b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/data
new file mode 100644
index 0000000..9988a8f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/data
@@ -0,0 +1,7 @@
+AAA {[{AAT:[1,6]}, {AAG:[2,4]}, {AAC:[3,5,7]}] [] [] [{TAA:[1,4,7]}, {GAA:[2,5]}, {CAA:[3,6]}] {5':[], ~5':[]} 7.0x}
+CAA {[{AAA:[3,6]}] [] [] [] {5':[(3-0_0),(6-0_0)], ~5':[]} 2.0x}
+GAA {[{AAA:[2,5]}] [] [] [] {5':[(2-0_0),(5-0_0)], ~5':[]} 2.0x}
+TAA {[{AAA:[1,4,7]}] [] [] [] {5':[(7-0_0),(4-0_0),(1-0_0)], ~5':[]} 3.0x}
+AAC {[] [] [] [{AAA:[3,5,7]}] {5':[], ~5':[]} 3.0x}
+AAG {[] [] [] [{AAA:[2,4]}] {5':[], ~5':[]} 2.0x}
+AAT {[] [] [] [{AAA:[1,6]}] {5':[], ~5':[]} 2.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/graphviz/result.ps
new file mode 100644
index 0000000..1393cca
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/ComplexSplitManyTimes/graphviz/result.ps
@@ -0,0 +1,778 @@
+%!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 292 758
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 256 722 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 304 moveto
+0 408 lineto
+56 408 lineto
+56 304 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 391.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 382 moveto
+56 382 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 365.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 356 moveto
+56 356 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 339.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 330 moveto
+56 330 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 313.4 moveto 23 (7.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 610 moveto
+180 714 lineto
+236 714 lineto
+236 610 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+193.5 697.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 688 moveto
+236 688 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+194 671.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 662 moveto
+236 662 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 645.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 636 moveto
+236 636 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 619.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 30.9 408.05 moveto
+35.66 475.28 47.43 587.32 74 618 curveto
+97.8 645.49 139.08 655.89 169.54 659.78 curveto
+stroke
+0 0 0 edgecolor
+newpath 169.5 663.3 moveto
+179.83 660.9 lineto
+170.26 656.34 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 169.5 663.3 moveto
+179.83 660.9 lineto
+170.26 656.34 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+83 661.4 moveto 58 (FF: [1,6]) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 488 moveto
+180 592 lineto
+236 592 lineto
+236 488 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+192 575.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 566 moveto
+236 566 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+194 549.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 540 moveto
+236 540 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 523.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 514 moveto
+236 514 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 497.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->AAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 39.08 408.1 moveto
+47.72 444.11 60.49 487.81 74 501 curveto
+99.51 525.91 139.97 535.07 169.76 538.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 169.53 541.85 moveto
+179.81 539.29 lineto
+170.18 534.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 169.53 541.85 moveto
+179.81 539.29 lineto
+170.18 534.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+83 539.4 moveto 58 (FF: [2,4]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 366 moveto
+180 470 lineto
+236 470 lineto
+236 366 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+192.5 453.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 444 moveto
+236 444 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+194 427.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 418 moveto
+236 418 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 401.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 180 392 moveto
+236 392 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 375.4 moveto 23 (3.0) alignedtext
+grestore
+% AAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.21 384.69 moveto
+61.74 389.06 67.77 393.07 74 396 curveto
+104.18 410.18 141.91 415.41 169.64 417.24 curveto
+stroke
+0 0 0 edgecolor
+newpath 169.57 420.75 moveto
+179.74 417.79 lineto
+169.95 413.76 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 169.57 420.75 moveto
+179.74 417.79 lineto
+169.95 413.76 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76 420.4 moveto 72 (FF: [3,5,7]) alignedtext
+grestore
+% TAA
+gsave
+0 0 0.75294 nodecolor
+newpath 168 244 moveto
+168 348 lineto
+248 348 lineto
+248 244 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 244 moveto
+168 348 lineto
+248 348 lineto
+248 244 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+193.5 331.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 322 moveto
+248 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+176 305.4 moveto 64 (5':[7,4,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 296 moveto
+248 296 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 279.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 270 moveto
+248 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 253.4 moveto 23 (3.0) alignedtext
+grestore
+% AAA->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.05 343.9 moveto
+61.94 341.51 68.14 339.09 74 337 curveto
+107.24 325.14 116.26 324.34 150 314 curveto
+152.6 313.2 155.27 312.38 157.97 311.55 curveto
+stroke
+0 1 1 edgecolor
+newpath 159.24 314.82 moveto
+167.76 308.53 lineto
+157.17 308.13 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 159.24 314.82 moveto
+167.76 308.53 lineto
+157.17 308.13 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 342.4 moveto 75 (RR: [1,4,7]) alignedtext
+grestore
+% GAA
+gsave
+0 0 0.75294 nodecolor
+newpath 175 122 moveto
+175 226 lineto
+241 226 lineto
+241 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 175 122 moveto
+175 226 lineto
+241 226 lineto
+241 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+192 209.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 175 200 moveto
+241 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+183 183.4 moveto 50 (5':[2,5]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 175 174 moveto
+241 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 175 148 moveto
+241 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 131.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 45.88 303.82 moveto
+52.97 287.95 62.29 271.23 74 258 curveto
+87.79 242.43 132.17 215.88 166.11 196.79 curveto
+stroke
+0 1 1 edgecolor
+newpath 167.91 199.8 moveto
+174.93 191.87 lineto
+164.5 193.69 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 167.91 199.8 moveto
+174.93 191.87 lineto
+164.5 193.69 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81.5 263.4 moveto 61 (RR: [2,5]) alignedtext
+grestore
+% CAA
+gsave
+0 0 0.75294 nodecolor
+newpath 175 0 moveto
+175 104 lineto
+241 104 lineto
+241 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 175 0 moveto
+175 104 lineto
+241 104 lineto
+241 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+192.5 87.4 moveto 31 (CAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 175 78 moveto
+241 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+183 61.4 moveto 50 (5':[3,6]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 175 52 moveto
+241 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 175 26 moveto
+241 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+196.5 9.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->CAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 34.5 303.85 moveto
+42.13 249.17 56.05 167.7 74 142 curveto
+96.87 109.25 116.92 116.39 150 94 curveto
+155.34 90.39 160.89 86.52 166.36 82.64 curveto
+stroke
+0 1 1 edgecolor
+newpath 168.73 85.24 moveto
+174.83 76.57 lineto
+164.66 79.55 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 168.73 85.24 moveto
+174.83 76.57 lineto
+164.66 79.55 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81.5 147.4 moveto 61 (RR: [3,6]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 179.77 625.11 moveto
+170.92 614.94 160.67 604.4 150 596 curveto
+120.01 572.38 97.29 586.24 74 556 curveto
+57.58 534.67 44.52 468.85 36.57 418.49 curveto
+stroke
+0 1 1 edgecolor
+newpath 39.99 417.67 moveto
+35 408.32 lineto
+33.07 418.74 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 39.99 417.67 moveto
+35 408.32 lineto
+33.07 418.74 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81.5 601.4 moveto 61 (RR: [1,6]) alignedtext
+grestore
+% AAG->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 179.89 506.78 moveto
+170.89 497.19 160.52 487.13 150 479 curveto
+119.46 455.41 101.45 464.13 74 437 curveto
+67.97 431.04 62.47 424.11 57.55 416.88 curveto
+stroke
+0 1 1 edgecolor
+newpath 60.38 414.81 moveto
+52.04 408.27 lineto
+54.49 418.58 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 60.38 414.81 moveto
+52.04 408.27 lineto
+54.49 418.58 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81.5 484.4 moveto 61 (RR: [2,4]) alignedtext
+grestore
+% AAC->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 179.99 392.28 moveto
+171 385.3 160.6 378.45 150 374 curveto
+123.4 362.83 91 358.43 66.28 356.77 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.37 353.27 moveto
+56.19 356.21 lineto
+65.99 360.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.37 353.27 moveto
+56.19 356.21 lineto
+65.99 360.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 379.4 moveto 75 (RR: [3,5,7]) alignedtext
+grestore
+% TAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 167.95 285.07 moveto
+140.09 279.7 102.89 277.19 74 292 curveto
+70.23 293.93 66.7 296.33 63.41 299.06 curveto
+stroke
+0 0 0 edgecolor
+newpath 61 296.52 moveto
+56.16 305.94 lineto
+65.82 301.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61 296.52 moveto
+56.16 305.94 lineto
+65.82 301.6 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76 297.4 moveto 72 (FF: [1,4,7]) alignedtext
+grestore
+% GAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 174.89 166.67 moveto
+145.09 162.13 101.84 160.93 74 184 curveto
+56.89 198.18 44.49 250.7 36.9 294.01 curveto
+stroke
+0 0 0 edgecolor
+newpath 33.44 293.5 moveto
+35.22 303.95 lineto
+40.34 294.67 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 33.44 293.5 moveto
+35.22 303.95 lineto
+40.34 294.67 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+83 189.4 moveto 58 (FF: [2,5]) alignedtext
+grestore
+% CAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 174.88 46.99 moveto
+144.44 44.42 100.19 46.13 74 72 curveto
+43.5 102.13 33.22 219.57 29.76 293.66 curveto
+stroke
+0 0 0 edgecolor
+newpath 26.25 293.68 moveto
+29.31 303.82 lineto
+33.25 293.98 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 26.25 293.68 moveto
+29.31 303.82 lineto
+33.25 293.98 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+83 77.4 moveto 58 (FF: [3,6]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 292 758
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/bin/.part-00000.crc
new file mode 100644
index 0000000..96fd8c5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/bin/part-00000
new file mode 100755
index 0000000..ba717cf
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/data b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/data
new file mode 100644
index 0000000..505f643
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/data
@@ -0,0 +1,7 @@
+AAA {[{AAT:[1]}, {AAG:[2]}, {AAC:[3]}] [] [] [{TAA:[1]}, {GAA:[2]}, {CAA:[3]}] {5':[], ~5':[]} 3.0x}
+CAA {[{AAA:[3]}] [] [] [] {5':[(3-0_0)], ~5':[]} 1.0x}
+GAA {[{AAA:[2]}] [] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+TAA {[{AAA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
+AAC {[] [] [] [{AAA:[3]}] {5':[], ~5':[]} 1.0x}
+AAG {[] [] [] [{AAA:[2]}] {5':[], ~5':[]} 1.0x}
+AAT {[] [] [] [{AAA:[1]}] {5':[], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/graphviz/result.ps
new file mode 100644
index 0000000..6c17ffd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SimpleSplitManyTimes/graphviz/result.ps
@@ -0,0 +1,775 @@
+%!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 240 758
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 204 722 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 304 moveto
+0 408 lineto
+56 408 lineto
+56 304 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 391.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 382 moveto
+56 382 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 365.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 356 moveto
+56 356 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 339.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 330 moveto
+56 330 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 313.4 moveto 23 (3.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 610 moveto
+140 714 lineto
+196 714 lineto
+196 610 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 697.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 688 moveto
+196 688 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 671.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 662 moveto
+196 662 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 645.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 636 moveto
+196 636 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 619.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 31.5 408.17 moveto
+36.92 474.95 49.4 585.87 74 618 curveto
+87.68 635.87 110.39 646.78 130.06 653.26 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.12 656.63 moveto
+139.71 656.18 lineto
+131.15 649.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.12 656.63 moveto
+139.71 656.18 lineto
+131.15 649.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 655.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 488 moveto
+140 592 lineto
+196 592 lineto
+196 488 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 575.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 566 moveto
+196 566 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 549.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 540 moveto
+196 540 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 523.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 514 moveto
+196 514 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 497.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->AAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 33.53 408.07 moveto
+39.2 438.42 50.7 475.6 74 501 curveto
+88.65 516.96 110.83 526.58 129.97 532.27 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.08 535.66 moveto
+139.64 534.9 lineto
+130.91 528.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.08 535.66 moveto
+139.64 534.9 lineto
+130.91 528.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 534.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 366 moveto
+140 470 lineto
+196 470 lineto
+196 366 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 453.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 444 moveto
+196 444 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 427.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 418 moveto
+196 418 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 401.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 392 moveto
+196 392 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 375.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.13 384.14 moveto
+61.71 388.62 67.78 392.82 74 396 curveto
+91.21 404.81 112 410.14 129.65 413.35 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.18 416.82 moveto
+139.62 415 lineto
+130.33 409.91 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.18 416.82 moveto
+139.62 415 lineto
+130.33 409.91 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 416.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% TAA
+gsave
+0 0 0.75294 nodecolor
+newpath 140 244 moveto
+140 348 lineto
+196 348 lineto
+196 244 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 244 moveto
+140 348 lineto
+196 348 lineto
+196 244 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 331.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 322 moveto
+196 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+149.5 305.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 296 moveto
+196 296 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 279.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 270 moveto
+196 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 253.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 343.86 moveto
+77.68 334.71 107.16 322.08 130.47 312.09 curveto
+stroke
+0 1 1 edgecolor
+newpath 131.9 315.28 moveto
+139.71 308.12 lineto
+129.14 308.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 131.9 315.28 moveto
+139.71 308.12 lineto
+129.14 308.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 339.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GAA
+gsave
+0 0 0.75294 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 122 moveto
+140 226 lineto
+196 226 lineto
+196 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 209.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+149.5 183.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 148 moveto
+196 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 50.34 303.57 moveto
+57.08 290.13 65.1 276.07 74 264 curveto
+90.54 241.57 112.97 219.85 131.77 203.37 curveto
+stroke
+0 1 1 edgecolor
+newpath 134.29 205.83 moveto
+139.58 196.65 lineto
+129.72 200.52 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 134.29 205.83 moveto
+139.58 196.65 lineto
+129.72 200.52 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 269.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CAA
+gsave
+0 0 0.75294 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (CAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+149.5 61.4 moveto 37 (5':[3]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AAA->CAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 31.82 303.78 moveto
+36.77 260.43 48.11 198.28 74 150 curveto
+81.79 135.47 109.13 107.56 132.33 85.24 curveto
+stroke
+0 1 1 edgecolor
+newpath 134.87 87.65 moveto
+139.68 78.21 lineto
+130.03 82.58 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 134.87 87.65 moveto
+139.68 78.21 lineto
+130.03 82.58 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 155.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.81 618.77 moveto
+134.19 610.97 128.12 603.08 122 596 curveto
+102.87 573.88 88.65 576.31 74 551 curveto
+50.47 510.34 38.96 458.31 33.34 418.22 curveto
+stroke
+0 1 1 edgecolor
+newpath 36.81 417.76 moveto
+32.04 408.3 lineto
+29.87 418.67 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 36.81 417.76 moveto
+32.04 408.3 lineto
+29.87 418.67 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 601.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAG->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.95 500.86 moveto
+134.22 493.43 128.08 485.84 122 479 curveto
+102.37 456.91 92.41 456.11 74 433 curveto
+69.76 427.68 65.63 421.94 61.7 416.06 curveto
+stroke
+0 1 1 edgecolor
+newpath 64.46 413.89 moveto
+56.08 407.41 lineto
+58.59 417.7 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 64.46 413.89 moveto
+56.08 407.41 lineto
+58.59 417.7 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 484.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AAC->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.8 386.35 moveto
+134.3 381.61 128.29 377.24 122 374 curveto
+104.84 365.15 83.89 360.63 66.13 358.32 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.42 354.83 moveto
+56.09 357.21 lineto
+65.65 361.79 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.42 354.83 moveto
+56.09 357.21 lineto
+65.65 361.79 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 379.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% TAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.77 289.22 moveto
+120.27 286.05 94.3 284.88 74 295 curveto
+70.36 296.81 66.94 299.06 63.73 301.62 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.19 299.21 moveto
+56.19 308.55 lineto
+65.92 304.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.19 299.21 moveto
+56.19 308.55 lineto
+65.92 304.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 300.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.93 171.33 moveto
+119.22 170.96 91.69 174.02 74 190 curveto
+58.42 204.07 46.09 252.65 38.13 293.65 curveto
+stroke
+0 0 0 edgecolor
+newpath 34.67 293.14 moveto
+36.26 303.61 lineto
+41.55 294.43 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 34.67 293.14 moveto
+36.26 303.61 lineto
+41.55 294.43 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 195.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.66 50.8 moveto
+118.54 51.54 90.59 56.24 74 74 curveto
+45.02 105.03 34.23 220.67 30.26 293.88 curveto
+stroke
+0 0 0 edgecolor
+newpath 26.76 293.75 moveto
+29.74 303.92 lineto
+33.75 294.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 26.76 293.75 moveto
+29.74 303.92 lineto
+33.75 294.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 79.4 moveto 45 (FF: [3]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 240 758
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/bin/.part-00000.crc
new file mode 100644
index 0000000..a6df588
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/bin/part-00000
new file mode 100755
index 0000000..cae8624
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/graphviz/result.ps
new file mode 100644
index 0000000..d1b22d7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/graphviz/result.ps
@@ -0,0 +1,593 @@
+%!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 516 270
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 480 234 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GCA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 61 moveto
+0 165 lineto
+56 165 lineto
+56 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 148.4 moveto 31 (GCA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 139 moveto
+56 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 122.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 113 moveto
+56 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 87 moveto
+56 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% ATG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 61 moveto
+138 165 lineto
+194 165 lineto
+194 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+151 148.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 139 moveto
+194 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 113 moveto
+194 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+146 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 87 moveto
+194 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154.5 70.4 moveto 23 (1.0) alignedtext
+grestore
+% GCA->ATG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 56.26 113 moveto
+76.82 113 104.89 113 127.5 113 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 127.78 116.5 moveto
+137.78 113 lineto
+127.78 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 127.78 116.5 moveto
+137.78 113 lineto
+127.78 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 118.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATG->GCA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 137.51 96.99 moveto
+131.87 94.51 125.87 92.33 120 91 curveto
+100.06 86.48 93.94 86.48 74 91 curveto
+71.34 91.6 68.65 92.38 65.99 93.28 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 64.53 90.09 moveto
+56.49 96.99 lineto
+67.08 96.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 64.53 90.09 moveto
+56.49 96.99 lineto
+67.08 96.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 96.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 61 moveto
+276 165 lineto
+332 165 lineto
+332 61 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290 148.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 139 moveto
+332 139 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290 122.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 113 moveto
+332 113 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+284 96.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 276 87 moveto
+332 87 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292.5 70.4 moveto 23 (2.0) alignedtext
+grestore
+% ATG->ATA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 194.26 113 moveto
+214.82 113 242.89 113 265.5 113 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 265.78 116.5 moveto
+275.78 113 lineto
+265.78 109.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 265.78 116.5 moveto
+275.78 113 lineto
+265.78 109.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 118.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% ATA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 275.83 99.35 moveto
+270.06 97.13 263.93 95.18 258 94 curveto
+237.95 90.02 232.05 90.02 212 94 curveto
+209.31 94.53 206.58 95.23 203.87 96.03 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 202.5 92.8 moveto
+194.17 99.35 lineto
+204.76 99.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 202.5 92.8 moveto
+194.17 99.35 lineto
+204.76 99.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 99.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 122 moveto
+416 226 lineto
+472 226 lineto
+472 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 209.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 200 moveto
+472 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 174 moveto
+472 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 157.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 148 moveto
+472 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 332.1 141.19 moveto
+337.69 145.67 343.77 149.85 350 153 curveto
+367.22 161.7 388.01 166.82 405.65 169.83 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 405.21 173.3 moveto
+415.62 171.36 lineto
+406.27 166.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 405.21 173.3 moveto
+415.62 171.36 lineto
+406.27 166.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+351 173.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+429.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 78 moveto
+472 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+425.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 52 moveto
+472 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 416 26 moveto
+472 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 332.33 100.66 moveto
+353.68 91.35 383.16 78.51 406.47 68.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 407.94 71.53 moveto
+415.71 64.33 lineto
+405.15 65.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 407.94 71.53 moveto
+415.71 64.33 lineto
+405.15 65.11 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+350 97.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 415.97 143.29 moveto
+410.42 138.58 404.33 134.22 398 131 curveto
+380.79 122.25 359.84 117.73 342.09 115.41 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 342.38 111.92 moveto
+332.06 114.28 lineto
+341.6 118.88 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 342.38 111.92 moveto
+332.06 114.28 lineto
+341.6 118.88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+351 136.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 415.77 45.66 moveto
+396.27 42.75 370.3 41.88 350 52 curveto
+346.36 53.81 342.94 56.06 339.73 58.62 curveto
+stroke
+0 0 0 edgecolor
+newpath 337.19 56.21 moveto
+332.19 65.55 lineto
+341.92 61.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 337.19 56.21 moveto
+332.19 65.55 lineto
+341.92 61.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+351.5 57.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 516 270
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/test.txt b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/test.txt
new file mode 100644
index 0000000..17db920
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitOnce/test.txt
@@ -0,0 +1,5 @@
+GCA {[] [{ATG:[2]}] [] [] {5':[(2-0_0)], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]} 2.0x}
+CTA {[] [{ATA:[1]}] [] [] {5':[], ~5':[]} 1.0x}
+ATG {[] [{GCA:[2]}] [{ATA:[2]}] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/bin/.part-00000.crc b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/bin/.part-00000.crc
new file mode 100644
index 0000000..72b8bf2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/bin/.part-00000.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/bin/part-00000
new file mode 100755
index 0000000..a361d8e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/graphviz/result.ps
new file mode 100644
index 0000000..c435522
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/graphviz/result.ps
@@ -0,0 +1,594 @@
+%!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 250 514
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 214 478 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 182 moveto
+0 286 lineto
+56 286 lineto
+56 182 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 269.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 260 moveto
+56 260 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 243.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 234 moveto
+56 234 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 217.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 208 moveto
+56 208 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 191.4 moveto 23 (2.0) alignedtext
+grestore
+% GTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 145 366 moveto
+145 470 lineto
+201 470 lineto
+201 366 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158.5 453.4 moveto 29 (GTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 145 444 moveto
+201 444 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+159 427.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 145 418 moveto
+201 418 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153 401.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 145 392 moveto
+201 392 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+161.5 375.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->GTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 39.53 286.12 moveto
+48.36 321.88 61.15 365.25 74 379 curveto
+90.04 396.17 114.58 405.91 135.21 411.36 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 134.43 414.77 moveto
+144.97 413.7 lineto
+136.07 407.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 134.43 414.77 moveto
+144.97 413.7 lineto
+136.07 407.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 411.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 145 244 moveto
+145 348 lineto
+201 348 lineto
+201 244 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+159 331.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 145 322 moveto
+201 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+159 305.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 145 296 moveto
+201 296 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153 279.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 145 270 moveto
+201 270 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+161.5 253.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 56.1 262.2 moveto
+61.69 266.67 67.76 270.85 74 274 curveto
+92.83 283.5 115.72 288.93 134.75 292.01 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 134.47 295.51 moveto
+144.87 293.5 lineto
+135.48 288.58 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 134.47 295.51 moveto
+144.87 293.5 lineto
+135.48 288.58 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 294.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATG
+gsave
+0 0 0.75294 nodecolor
+newpath 140.5 122 moveto
+140.5 226 lineto
+205.5 226 lineto
+205.5 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 122 moveto
+140.5 226 lineto
+205.5 226 lineto
+205.5 122 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158 209.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 200 moveto
+205.5 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+159 183.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 174 moveto
+205.5 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148.5 157.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 148 moveto
+205.5 148 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+161.5 131.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.3 222.29 moveto
+77.62 213.47 107.18 201.23 131.22 191.29 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 132.57 194.52 moveto
+140.47 187.46 lineto
+129.89 188.05 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 132.57 194.52 moveto
+140.47 187.46 lineto
+129.89 188.05 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 219.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 145 0 moveto
+145 104 lineto
+201 104 lineto
+201 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 145 0 moveto
+145 104 lineto
+201 104 lineto
+201 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 145 78 moveto
+201 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 145 52 moveto
+201 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 145 26 moveto
+201 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+161.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 49.89 181.89 moveto
+56.68 168.31 64.83 154.1 74 142 curveto
+91.95 118.3 116.71 95.8 136.97 79.22 curveto
+stroke
+0 1 1 edgecolor
+newpath 139.17 81.94 moveto
+144.77 72.95 lineto
+134.79 76.48 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 139.17 81.94 moveto
+144.77 72.95 lineto
+134.79 76.48 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 147.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 144.79 382.91 moveto
+137.54 374.28 129.63 365.17 122 357 curveto
+101.83 335.41 92.41 334.11 74 311 curveto
+69.76 305.68 65.63 299.94 61.7 294.06 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 64.46 291.89 moveto
+56.08 285.41 lineto
+58.59 295.7 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 64.46 291.89 moveto
+56.08 285.41 lineto
+58.59 295.7 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 362.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 144.96 267.3 moveto
+137.95 261.46 130.11 255.92 122 252 curveto
+104.74 243.65 83.95 239.17 66.32 236.77 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 66.69 233.29 moveto
+56.35 235.58 lineto
+65.86 240.24 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 66.69 233.29 moveto
+56.35 235.58 lineto
+65.86 240.24 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 257.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATG->ATA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 140.11 166.4 moveto
+119.99 163.46 94.31 162.88 74 173 curveto
+70.36 174.81 66.94 177.06 63.73 179.62 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 61.19 177.21 moveto
+56.19 186.55 lineto
+65.92 182.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 61.19 177.21 moveto
+56.19 186.55 lineto
+65.92 182.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 178.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 144.77 49.61 moveto
+122.81 49.34 92.99 52.71 74 70 curveto
+58.7 83.93 46.38 131.65 38.35 172.05 curveto
+stroke
+0 0 0 edgecolor
+newpath 34.92 171.38 moveto
+36.46 181.87 lineto
+41.79 172.71 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 34.92 171.38 moveto
+36.46 181.87 lineto
+41.79 172.71 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 75.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 250 514
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/test.txt b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/test.txt
new file mode 100644
index 0000000..1a39b81
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/SplitRepeat/SplitTwice/test.txt
@@ -0,0 +1,5 @@
+ATA {[] [{GTA:[2]}, {CTA:[1]}] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]} 2.0x}
+CTA {[] [{ATA:[1]}] [] [] {5':[], ~5':[]} 1.0x}
+GTA {[] [{ATA:[2]}] [] [] {5':[], ~5':[]} 1.0x}
+ATG {[] [] [{ATA:[2]}] [] {5':[], ~5':[(2-0_0)]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/TipAdd/5/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/TipAdd/5/bin/part-00000
new file mode 100755
index 0000000..434239e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipAdd/5/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipAdd/5/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/TipAdd/5/graphviz/result.ps
new file mode 100644
index 0000000..4cdb861
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipAdd/5/graphviz/result.ps
@@ -0,0 +1,584 @@
+%!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 148
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 620 112 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 104 lineto
+56 104 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 87.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 104 lineto
+196 104 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 87.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 52 moveto
+77.39 52 106.37 52 129.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 55.5 moveto
+139.71 52 lineto
+129.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 35.99 moveto
+133.87 33.51 127.87 31.33 122 30 curveto
+101.2 25.28 94.8 25.28 74 30 curveto
+71.34 30.6 68.65 31.38 65.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 29.09 moveto
+56.49 35.99 lineto
+67.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 0 moveto
+278 104 lineto
+334 104 lineto
+334 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 78 moveto
+334 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 52 moveto
+334 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 26 moveto
+334 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.26 52 moveto
+216.82 52 244.89 52 267.5 52 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 267.78 55.5 moveto
+277.78 52 lineto
+267.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 57.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 277.51 35.99 moveto
+271.87 33.51 265.87 31.33 260 30 curveto
+240.06 25.48 233.94 25.48 214 30 curveto
+211.34 30.6 208.65 31.38 205.99 32.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 204.53 29.09 moveto
+196.49 35.99 lineto
+207.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 35.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 0 moveto
+416 104 lineto
+472 104 lineto
+472 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 87.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 78 moveto
+472 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 52 moveto
+472 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 26 moveto
+472 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 334.26 52 moveto
+354.82 52 382.89 52 405.5 52 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 405.78 55.5 moveto
+415.78 52 lineto
+405.78 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 405.78 55.5 moveto
+415.78 52 lineto
+405.78 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 57.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 415.83 38.35 moveto
+410.06 36.13 403.93 34.18 398 33 curveto
+377.95 29.02 372.05 29.02 352 33 curveto
+349.31 33.53 346.58 34.23 343.87 35.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 342.5 31.8 moveto
+334.17 38.35 lineto
+344.76 38.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 342.5 31.8 moveto
+334.17 38.35 lineto
+344.76 38.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 38.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 556 0 moveto
+556 104 lineto
+612 104 lineto
+612 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 0 moveto
+556 104 lineto
+612 104 lineto
+612 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+569.5 87.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 78 moveto
+612 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+565.5 61.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 52 moveto
+612 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+564 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 26 moveto
+612 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 472.33 52 moveto
+493.39 52 522.37 52 545.53 52 curveto
+stroke
+0 1 1 edgecolor
+newpath 545.71 55.5 moveto
+555.71 52 lineto
+545.71 48.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 545.71 55.5 moveto
+555.71 52 lineto
+545.71 48.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+490 57.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 555.51 35.99 moveto
+549.87 33.51 543.87 31.33 538 30 curveto
+517.2 25.28 510.8 25.28 490 30 curveto
+487.34 30.6 484.65 31.38 481.99 32.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 480.53 29.09 moveto
+472.49 35.99 lineto
+483.08 35.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 480.53 29.09 moveto
+472.49 35.99 lineto
+483.08 35.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+491.5 35.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 656 148
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/TipAdd/5/test.txt b/genomix/genomix-pregelix/data/TestSet/TipAdd/5/test.txt
new file mode 100644
index 0000000..205a2f1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipAdd/5/test.txt
@@ -0,0 +1,5 @@
+GAA {[] [] [] [{AGA:[1]}] {5':[], ~5':[]} 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]} 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]} 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}] [] {5':[], ~5':[]} 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]} 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/.txt.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/.txt.crc
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-0.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-0.crc
new file mode 100644
index 0000000..f6982c4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-1.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-1.crc
new file mode 100644
index 0000000..1259ae0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-2.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-2.crc
new file mode 100644
index 0000000..bdd8025
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-3.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-3.crc
new file mode 100644
index 0000000..409da70
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-4.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-4.crc
new file mode 100644
index 0000000..9c6fa2f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-5.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-5.crc
new file mode 100644
index 0000000..4b29ba1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-6.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-6.crc
new file mode 100644
index 0000000..25df251
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-7.crc b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-7.crc
new file mode 100644
index 0000000..a71d025
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-0 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-0
new file mode 100755
index 0000000..6921166
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-1 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-1
new file mode 100755
index 0000000..b938177
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-2 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-2
new file mode 100755
index 0000000..ef240fd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-3 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-3
new file mode 100755
index 0000000..a2861ed
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-4 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-4
new file mode 100755
index 0000000..e88d217
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-5 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-5
new file mode 100755
index 0000000..d3a0f39
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-6 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-6
new file mode 100755
index 0000000..e7102a6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-7 b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-7
new file mode 100755
index 0000000..4946f6e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/graphviz/result.ps
new file mode 100644
index 0000000..aa501dd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/graphviz/result.ps
@@ -0,0 +1,717 @@
+%!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 322
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 620 286 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 75 moveto
+0 205 lineto
+56 205 lineto
+56 75 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 188.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 179 moveto
+56 179 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 162.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 153 moveto
+56 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 136.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 127 moveto
+56 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 110.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 101 moveto
+56 101 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 84.4 moveto 32 (GAA) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 75 moveto
+140 205 lineto
+196 205 lineto
+196 75 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 188.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 179 moveto
+196 179 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 162.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 153 moveto
+196 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 136.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 127 moveto
+196 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 110.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 101 moveto
+196 101 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 84.4 moveto 31 (AGA) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 140 moveto
+77.39 140 106.37 140 129.53 140 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 143.5 moveto
+139.71 140 lineto
+129.71 136.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 143.5 moveto
+139.71 140 lineto
+129.71 136.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 145.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 123.99 moveto
+133.87 121.51 127.87 119.33 122 118 curveto
+101.2 113.28 94.8 113.28 74 118 curveto
+71.34 118.6 68.65 119.38 65.99 120.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 117.09 moveto
+56.49 123.99 lineto
+67.08 123.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 117.09 moveto
+56.49 123.99 lineto
+67.08 123.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 123.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 75 moveto
+278 205 lineto
+334 205 lineto
+334 75 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 188.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 179 moveto
+334 179 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 162.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 153 moveto
+334 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286 136.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 127 moveto
+334 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+294.5 110.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278 101 moveto
+334 101 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 84.4 moveto 28 (CTA) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.26 140 moveto
+216.82 140 244.89 140 267.5 140 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 267.78 143.5 moveto
+277.78 140 lineto
+267.78 136.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 267.78 143.5 moveto
+277.78 140 lineto
+267.78 136.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 145.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 148 moveto
+416 278 lineto
+472 278 lineto
+472 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 261.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 252 moveto
+472 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 226 moveto
+472 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 200 moveto
+472 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 174 moveto
+472 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 157.4 moveto 28 (ATA) alignedtext
+grestore
+% ATA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 415.76 183.92 moveto
+410.19 179.17 404.15 174.62 398 171 curveto
+381.37 161.2 361.21 153.96 344 148.96 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 344.83 145.56 moveto
+334.26 146.27 lineto
+342.97 152.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 344.83 145.56 moveto
+334.26 146.27 lineto
+342.97 152.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 176.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 556 147 moveto
+556 277 lineto
+612 277 lineto
+612 147 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 147 moveto
+556 277 lineto
+612 277 lineto
+612 147 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+569.5 260.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 251 moveto
+612 251 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+565.5 234.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 225 moveto
+612 225 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+564 208.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 199 moveto
+612 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+572.5 182.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 556 173 moveto
+612 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+569.5 156.4 moveto 29 (AAT) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 472.33 212.8 moveto
+493.39 212.65 522.37 212.44 545.53 212.27 curveto
+stroke
+0 1 1 edgecolor
+newpath 545.74 215.77 moveto
+555.71 212.2 lineto
+545.69 208.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 545.74 215.77 moveto
+555.71 212.2 lineto
+545.69 208.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+490 218.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 277.83 126.35 moveto
+272.06 124.13 265.93 122.18 260 121 curveto
+239.95 117.02 234.05 117.02 214 121 curveto
+211.31 121.53 208.58 122.23 205.87 123.03 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 204.5 119.8 moveto
+196.17 126.35 lineto
+206.76 126.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 204.5 119.8 moveto
+196.17 126.35 lineto
+206.76 126.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 126.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CTA->ATA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 334.24 175.16 moveto
+339.69 180.37 345.68 185.25 352 189 curveto
+368.22 198.64 388.29 204.45 405.54 207.94 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 405.4 211.47 moveto
+415.86 209.82 lineto
+406.65 204.58 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 405.4 211.47 moveto
+415.86 209.82 lineto
+406.65 204.58 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 212.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 0 moveto
+416 130 lineto
+472 130 lineto
+472 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+428.5 113.4 moveto 31 (AGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 104 moveto
+472 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+430 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 78 moveto
+472 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+424 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 52 moveto
+472 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+432.5 35.4 moveto 23 (0.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 416 26 moveto
+472 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+441.5 9.4 moveto 5 ( ) alignedtext
+grestore
+% CTA->AGC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 334.26 124.64 moveto
+355.19 113.27 383.91 97.66 406.72 85.26 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 408.66 88.19 moveto
+415.78 80.34 lineto
+405.32 82.04 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 408.66 88.19 moveto
+415.78 80.34 lineto
+405.32 82.04 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 119.4 moveto 46 (RF: [0]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 555.95 196.92 moveto
+550.17 194.47 544 192.31 538 191 curveto
+517.15 186.47 510.8 186.28 490 191 curveto
+487.34 191.6 484.65 192.38 481.99 193.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 480.53 190.09 moveto
+472.49 196.99 lineto
+483.08 196.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 480.53 190.09 moveto
+472.49 196.99 lineto
+483.08 196.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+491.5 196.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGC->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 415.99 60.23 moveto
+396.74 58.39 371.27 58.92 352 70 curveto
+348.06 72.26 344.4 75.02 341.01 78.1 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 338.45 75.72 moveto
+334.01 85.34 lineto
+343.48 80.59 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 338.45 75.72 moveto
+334.01 85.34 lineto
+343.48 80.59 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+352 75.4 moveto 46 (RF: [0]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 656 322
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/txt b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/txt
new file mode 100755
index 0000000..d3f52ac
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/TipRemove/RF_Tip/txt
@@ -0,0 +1,6 @@
+GAA {[] [] [] [{AGA:[1]}] {5':[], ~5':[]}GAA 1.0x}
+ATA {[] [{CTA:[1]}] [] [{AAT:[1]}] {5':[], ~5':[]}ATA 1.0x}
+CTA {[] [{ATA:[1]}] [{AGA:[1]}, {AGC:[0]}] [] {5':[], ~5':[]}CTA 1.0x}
+AGA {[{GAA:[1]}] [] [{CTA:[1]}] [] {5':[], ~5':[]}AGA 1.0x}
+AGC {[] [] [{CTA:[0]}] [] {5':[], ~5':[]} 0.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]}AAT 1.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/BridgePath/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/BridgePath/bin/part-00000
new file mode 100755
index 0000000..2501613
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/BridgePath/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/BridgePath/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/BridgePath/graphviz/result.ps
new file mode 100644
index 0000000..910cb8b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/BridgePath/graphviz/result.ps
@@ -0,0 +1,999 @@
+%!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 1254 267
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 1218 231 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 83 moveto
+0 187 lineto
+66 187 lineto
+66 83 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 83 moveto
+0 187 lineto
+66 187 lineto
+66 83 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+17.5 170.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 161 moveto
+66 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 144.4 moveto 50 (5':[2,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 135 moveto
+66 135 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 118.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 109 moveto
+66 109 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+21.5 92.4 moveto 23 (2.0) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 164 83 moveto
+164 187 lineto
+220 187 lineto
+220 83 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+177.5 170.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 164 161 moveto
+220 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+178 144.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 164 135 moveto
+220 135 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172 118.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 164 109 moveto
+220 109 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+180.5 92.4 moveto 23 (2.0) alignedtext
+grestore
+% AAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 66.33 135 moveto
+91.82 135 126.99 135 153.64 135 curveto
+stroke
+0 0 0 edgecolor
+newpath 153.76 138.5 moveto
+163.76 135 lineto
+153.76 131.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 153.76 138.5 moveto
+163.76 135 lineto
+153.76 131.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+86 140.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% AAT->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 163.51 118.99 moveto
+157.87 116.51 151.87 114.33 146 113 curveto
+119.13 106.9 110.99 107.43 84 113 curveto
+81.21 113.58 78.39 114.31 75.57 115.16 curveto
+stroke
+0 1 1 edgecolor
+newpath 74.42 111.86 moveto
+66.11 118.44 lineto
+76.7 118.47 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 74.42 111.86 moveto
+66.11 118.44 lineto
+76.7 118.47 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+84.5 118.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% ATC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 318 83 moveto
+318 187 lineto
+374 187 lineto
+374 83 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+332 170.4 moveto 28 (ATC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 318 161 moveto
+374 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+332 144.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 318 135 moveto
+374 135 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+326 118.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 318 109 moveto
+374 109 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+334.5 92.4 moveto 23 (2.0) alignedtext
+grestore
+% AAT->ATC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 220.25 135 moveto
+244.78 135 280.52 135 307.64 135 curveto
+stroke
+0 0 0 edgecolor
+newpath 307.93 138.5 moveto
+317.93 135 lineto
+307.93 131.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 307.93 138.5 moveto
+317.93 135 lineto
+307.93 131.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+240 140.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1014 19 moveto
+1014 123 lineto
+1070 123 lineto
+1070 19 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1026 106.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1014 97 moveto
+1070 97 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1028 80.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1014 71 moveto
+1070 71 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1022 54.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1014 45 moveto
+1070 45 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1030.5 28.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 874 6 moveto
+874 110 lineto
+930 110 lineto
+930 6 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+886.5 93.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 874 84 moveto
+930 84 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+888 67.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 874 58 moveto
+930 58 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+882 41.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 874 32 moveto
+930 32 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+890.5 15.4 moveto 23 (2.0) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1013.77 52.1 moveto
+1008.11 49.17 1002.03 46.59 996 45 curveto
+977.89 40.24 957.32 42.27 940.06 46 curveto
+stroke
+0 0 0 edgecolor
+newpath 939.21 42.6 moveto
+930.32 48.35 lineto
+940.86 49.4 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 939.21 42.6 moveto
+930.32 48.35 lineto
+940.86 49.4 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+949.5 50.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1154 82 moveto
+1154 186 lineto
+1210 186 lineto
+1210 82 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1166.5 169.4 moveto 31 (CGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1154 160 moveto
+1210 160 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1168 143.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1154 134 moveto
+1210 134 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1162 117.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 1154 108 moveto
+1210 108 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+1170.5 91.4 moveto 23 (2.0) alignedtext
+grestore
+% GAA->CGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 1070.02 86.12 moveto
+1075.91 89.16 1082.12 92.25 1088 95 curveto
+1106.2 103.5 1126.77 112.14 1144.02 119.13 curveto
+stroke
+0 1 1 edgecolor
+newpath 1143.17 122.55 moveto
+1153.75 123.03 lineto
+1145.77 116.06 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1143.17 122.55 moveto
+1153.75 123.03 lineto
+1145.77 116.06 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1088 120.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 930.21 61.17 moveto
+936.09 61.8 942.24 62.44 948 63 curveto
+966.23 64.77 986.46 66.52 1003.47 67.93 curveto
+stroke
+0 1 1 edgecolor
+newpath 1003.35 71.43 moveto
+1013.6 68.76 lineto
+1003.92 64.45 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 1003.35 71.43 moveto
+1013.6 68.76 lineto
+1003.92 64.45 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+948 73.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% TAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 734 6 moveto
+734 110 lineto
+790 110 lineto
+790 6 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+747.5 93.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 734 84 moveto
+790 84 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+748 67.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 734 58 moveto
+790 58 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+742 41.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 734 32 moveto
+790 32 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+750.5 15.4 moveto 23 (1.0) alignedtext
+grestore
+% AAC->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 873.73 45.78 moveto
+867.96 43.8 861.87 42.05 856 41 curveto
+835 37.24 829 37.24 808 41 curveto
+805.34 41.48 802.64 42.09 799.94 42.81 curveto
+stroke
+0 1 1 edgecolor
+newpath 798.8 39.5 moveto
+790.27 45.78 lineto
+800.86 46.19 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 798.8 39.5 moveto
+790.27 45.78 lineto
+800.86 46.19 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+808 46.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 1153.75 86.68 moveto
+1148.53 81.21 1142.61 76.38 1136 73 curveto
+1119.12 64.36 1098.19 63.15 1080.38 64.41 curveto
+stroke
+0 0 0 edgecolor
+newpath 1079.91 60.94 moveto
+1070.3 65.39 lineto
+1080.59 67.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 1079.91 60.94 moveto
+1070.3 65.39 lineto
+1080.59 67.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1089.5 78.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CGA->CGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 1169.42 186.2 moveto
+1170.83 196.59 1175.03 204 1182 204 curveto
+1186.47 204 1189.79 200.96 1191.98 196.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1195.41 196.76 moveto
+1194.58 186.2 lineto
+1188.64 194.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1195.41 196.76 moveto
+1194.58 186.2 lineto
+1188.64 194.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+1159 209.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CGA->ATC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 1153.97 139.43 moveto
+1125.79 144.4 1081.05 151 1042 151 curveto
+484 151 484 151 484 151 curveto
+450.1 151 411.83 146.18 384.2 141.83 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 384.6 138.35 moveto
+374.17 140.19 lineto
+383.48 145.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 384.6 138.35 moveto
+374.17 140.19 lineto
+383.48 145.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+739 156.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% TAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 790.18 61.55 moveto
+796.06 62.15 802.22 62.69 808 63 curveto
+829.3 64.15 834.7 64.15 856 63 curveto
+858.53 62.86 861.13 62.68 863.75 62.48 curveto
+stroke
+0 0 0 edgecolor
+newpath 864.18 65.95 moveto
+873.82 61.55 lineto
+863.54 58.98 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 864.18 65.95 moveto
+873.82 61.55 lineto
+863.54 58.98 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+809.5 69.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 594 0 moveto
+594 104 lineto
+650 104 lineto
+650 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+608 87.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 594 78 moveto
+650 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+608 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 594 52 moveto
+650 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+602 35.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 594 26 moveto
+650 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+610.5 9.4 moveto 23 (1.0) alignedtext
+grestore
+% TAA->CTA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 733.91 51.61 moveto
+728.02 50.52 721.83 49.57 716 49 curveto
+697.7 47.23 677.3 47.59 660.2 48.56 curveto
+stroke
+0 1 1 edgecolor
+newpath 659.78 45.08 moveto
+650.03 49.23 lineto
+660.24 52.07 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 659.78 45.08 moveto
+650.03 49.23 lineto
+660.24 52.07 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+668 54.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CTA->TAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 650.37 62.79 moveto
+656.12 64.54 662.19 66.08 668 67 curveto
+686.23 69.9 706.62 68.5 723.73 66.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 724.6 69.44 moveto
+733.92 64.39 lineto
+723.48 62.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 724.6 69.44 moveto
+733.92 64.39 lineto
+723.48 62.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+669.5 74.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 456 19 moveto
+456 123 lineto
+512 123 lineto
+512 19 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+468.5 106.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 456 97 moveto
+512 97 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+470 80.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 456 71 moveto
+512 71 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+464 54.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 456 45 moveto
+512 45 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+472.5 28.4 moveto 23 (1.0) alignedtext
+grestore
+% CTA->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 593.68 40.53 moveto
+575.2 34.71 550.75 30.16 530 37 curveto
+526.89 38.03 523.81 39.35 520.82 40.88 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 518.96 37.92 moveto
+512.12 46 lineto
+522.51 43.95 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 518.96 37.92 moveto
+512.12 46 lineto
+522.51 43.95 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+530 42.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AGA->CTA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 512.26 67.11 moveto
+532.91 64.27 561.15 60.38 583.81 57.26 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 584.35 60.72 moveto
+593.78 55.89 lineto
+583.39 53.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 584.35 60.72 moveto
+593.78 55.89 lineto
+583.39 53.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+530 70.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AGA->ATC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 455.85 66.69 moveto
+436.77 65.12 411.57 65.78 392 76 curveto
+388.24 77.96 384.7 80.38 381.37 83.11 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 378.94 80.6 moveto
+374 89.97 lineto
+383.71 85.72 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 378.94 80.6 moveto
+374 89.97 lineto
+383.71 85.72 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+392 81.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% ATC->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 317.83 121.35 moveto
+312.06 119.13 305.93 117.18 300 116 curveto
+272.97 110.64 265.03 110.64 238 116 curveto
+235.31 116.53 232.58 117.23 229.87 118.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 228.5 114.8 moveto
+220.17 121.35 lineto
+230.76 121.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 228.5 114.8 moveto
+220.17 121.35 lineto
+230.76 121.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+238.5 121.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% ATC->CGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 374.05 159.09 moveto
+400.55 179.34 442.36 205 484 205 curveto
+484 205 484 205 1042 205 curveto
+1080.24 205 1118.62 183.67 1145.5 164.39 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 1147.85 167 moveto
+1153.8 158.24 lineto
+1143.69 161.38 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 1147.85 167 moveto
+1153.8 158.24 lineto
+1143.69 161.38 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+739 210.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATC->AGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 374.33 122.76 moveto
+392.6 114.78 416.81 104.01 438 94 curveto
+440.82 92.67 443.72 91.27 446.63 89.86 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 448.45 92.86 moveto
+455.88 85.31 lineto
+445.36 86.58 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 448.45 92.86 moveto
+455.88 85.31 lineto
+445.36 86.58 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+392 120.4 moveto 46 (FR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 1254 267
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/BridgePath/test.txt b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/BridgePath/test.txt
new file mode 100644
index 0000000..aa3a366
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/BridgePath/test.txt
@@ -0,0 +1,9 @@
+AAA {[{AAT:[1,2]}] [] [] [] {5':[(2-0_0),(1-0_0)], ~5':[]} 2.0x}
+GAA {[{AAC:[1]}] [] [] [{CGA:[1]}] {5':[], ~5':[]} 1.0x}
+TAA {[{AAC:[2]}] [] [] [{CTA:[2]}] {5':[], ~5':[]} 1.0x}
+AGA {[] [{ATC:[2]}] [{CTA:[2]}] [] {5':[], ~5':[]} 1.0x}
+CGA {[{GAA:[1]}] [{ATC:[1]}] [{CGA:[1]}] [] {5':[], ~5':[]} 2.0x}
+CTA {[{TAA:[2]}] [] [{AGA:[2]}] [] {5':[], ~5':[]} 1.0x}
+AAC {[] [] [] [{TAA:[2]}, {GAA:[1]}] {5':[], ~5':[]} 2.0x}
+ATC {[] [{CGA:[1]}, {AGA:[2]}] [] [{AAT:[1,2]}] {5':[], ~5':[]} 2.0x}
+AAT {[{ATC:[1,2]}] [] [] [{AAA:[1,2]}] {5':[], ~5':[]} 2.0x}
diff --git a/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/SelfPath/bin/part-00000 b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/SelfPath/bin/part-00000
new file mode 100755
index 0000000..0d0e9a8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/SelfPath/bin/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/SelfPath/graphviz/result.ps b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/SelfPath/graphviz/result.ps
new file mode 100644
index 0000000..bcdea9d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/SelfPath/graphviz/result.ps
@@ -0,0 +1,268 @@
+%!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 110 184
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 74 148 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GCC
+gsave
+0 0 0.75294 nodecolor
+newpath .5 0 moveto
+.5 104 lineto
+65.5 104 lineto
+65.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 0 moveto
+.5 104 lineto
+65.5 104 lineto
+65.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+17.5 87.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 78 moveto
+65.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+19 61.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 52 moveto
+65.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 35.4 moveto 49 (~5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 26 moveto
+65.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+21.5 9.4 moveto 23 (2.0) alignedtext
+grestore
+% GCC->GCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 21.5 104.2 moveto
+22.79 114.59 26.63 122 33 122 curveto
+37.08 122 40.13 118.96 42.12 114.04 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 45.56 114.74 moveto
+44.5 104.2 lineto
+38.75 113.1 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 45.56 114.74 moveto
+44.5 104.2 lineto
+38.75 113.1 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+10 127.4 moveto 46 (RF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 110 184
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/SelfPath/test.txt b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/SelfPath/test.txt
new file mode 100644
index 0000000..830daaa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/TestSet/UnrollTandemRepeat/SelfPath/test.txt
@@ -0,0 +1 @@
+GCC {[] [] [{GCC:[1]}] [] {5':[], ~5':[(1-0_0)]} 2.0x}
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles.txt b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles.txt
new file mode 100644
index 0000000..2896107
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles.txt
@@ -0,0 +1,16 @@
+((2,1) [(3,1),(4,1),(2,2)] [] [] [(1,1)] CGTCC) (null)
+((2,2) [(2,3)] [] [] [(2,1)] GTCCT) (null)
+((2,3) [(2,4)] [] [] [(2,2)] TCCTT) (null)
+((2,4) [(4,4),(3,4)] [] [] [(1,4),(2,3)] CCTTA) (null)
+((4,1) [(4,2)] [] [] [(1,2),(2,1)] GTCCT) (null)
+((4,2) [(4,3)] [] [] [(4,1)] TCCTT) (null)
+((4,3) [(4,4)] [] [] [(1,4),(4,2)] CCTTA) (null)
+((4,4) [] [] [] [(2,4),(4,3)] CTTAG) (null)
+((1,1) [(2,1),(1,2)] [] [] [] ACGTC) (null)
+((1,2) [(3,1),(4,1),(1,3)] [] [] [(1,1)] CGTCC) (null)
+((1,3) [(1,4)] [] [] [(1,2)] GTCCT) (null)
+((1,4) [(3,3),(4,3),(2,4)] [] [] [(1,3)] TCCTT) (null)
+((3,1) [(3,2)] [] [] [(1,2),(2,1)] GTCCT) (null)
+((3,2) [(3,3)] [] [] [(3,1)] TCCTT) (null)
+((3,3) [(3,4)] [] [] [(1,4),(3,2)] CCTTA) (null)
+((3,4) [] [] [] [(2,4),(3,3)] CTTAG) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles.txt.svg b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles.txt.svg
new file mode 100644
index 0000000..fef64c2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles.txt.svg
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: five_ff_bubbles_txt Pages: 1 -->
+<svg width="764pt" height="520pt"
+ viewBox="0.00 0.00 764.00 520.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 516)">
+<title>five_ff_bubbles_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-516 761,-516 761,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 500,-305 500,-217 8,-217"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="274,-416 274,-504 748,-504 748,-416 274,-416"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="150,-313 150,-401 624,-401 624,-313 150,-313"/>
+</g>
+<g id="graph6" class="cluster"><title>cluster_4</title>
+<polygon fill="none" stroke="black" points="274,-121 274,-209 748,-209 748,-121 274,-121"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="43.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ACGTC</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="42.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">GACGT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CGTCC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="183.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">GGACG</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge61" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 2,1 -->
+<g id="node25" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-349 179,-363 224,-363 224,-349 179,-349"/>
+<text text-anchor="start" x="185" y="-353.667" font-family="Times Roman,serif" font-size="10.00">CGTCC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-335 179,-349 224,-349 224,-335 179,-335"/>
+<text text-anchor="start" x="183.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">GGACG</text>
+</g>
+<!-- 1,1->2,1 -->
+<g id="edge59" class="edge"><title>1,1->2,1</title>
+<path fill="none" stroke="#dd1e2f" d="M92.652,-283.751C112.403,-297.103 137.544,-314.1 158.635,-328.359"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="156.853,-331.379 167.097,-334.08 160.773,-325.58 156.853,-331.379"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge69" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="310" y="-257.667" font-family="Times Roman,serif" font-size="10.00">GTCCT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="308" y="-243.667" font-family="Times Roman,serif" font-size="10.00">AGGAC</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge67" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 3,1 -->
+<g id="node20" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-460" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-471.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-452 303,-466 348,-466 348,-452 303,-452"/>
+<text text-anchor="start" x="310" y="-456.667" font-family="Times Roman,serif" font-size="10.00">GTCCT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-438 303,-452 348,-452 348,-438 303,-438"/>
+<text text-anchor="start" x="308" y="-442.667" font-family="Times Roman,serif" font-size="10.00">AGGAC</text>
+</g>
+<!-- 1,2->3,1 -->
+<g id="edge63" class="edge"><title>1,2->3,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-290.029C236.061,-300.138 244,-309 244,-309 244,-309 274,-405 274,-405 274,-405 282.027,-413.657 291.712,-424.101"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="289.238,-426.58 298.604,-431.533 294.371,-421.821 289.238,-426.58"/>
+</g>
+<!-- 4,1 -->
+<g id="node30" class="node"><title>4,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">4,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-157 303,-171 348,-171 348,-157 303,-157"/>
+<text text-anchor="start" x="310" y="-161.667" font-family="Times Roman,serif" font-size="10.00">GTCCT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-143 303,-157 348,-157 348,-143 303,-143"/>
+<text text-anchor="start" x="308" y="-147.667" font-family="Times Roman,serif" font-size="10.00">AGGAC</text>
+</g>
+<!-- 1,2->4,1 -->
+<g id="edge65" class="edge"><title>1,2->4,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-231.971C236.061,-221.862 244,-213 244,-213 244,-213 262,-184 262,-184 262,-184 267.269,-182.411 274.758,-180.152"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="275.825,-183.486 284.389,-177.248 273.804,-176.784 275.825,-183.486"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge73" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 1,4 -->
+<g id="node18" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-253 427,-267 472,-267 472,-253 427,-253"/>
+<text text-anchor="start" x="435" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TCCTT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-239 427,-253 472,-253 472,-239 427,-239"/>
+<text text-anchor="start" x="431.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">AAGGA</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge71" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-254.562C376.601,-254.258 386.531,-254.176 396.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-257.822 406.443,-254.554 396.527,-250.823 396.364,-257.822"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge81" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M406.443,-267.446C397.158,-267.745 387.225,-267.824 377.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-264.175 367.327,-267.438 377.242,-271.173 377.407,-264.175"/>
+</g>
+<!-- 3,3 -->
+<g id="node22" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-460" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-471.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-452 551,-466 596,-466 596,-452 551,-452"/>
+<text text-anchor="start" x="558.5" y="-456.667" font-family="Times Roman,serif" font-size="10.00">CCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-438 551,-452 596,-452 596,-438 551,-438"/>
+<text text-anchor="start" x="556.5" y="-442.667" font-family="Times Roman,serif" font-size="10.00">TAAGG</text>
+</g>
+<!-- 1,4->3,3 -->
+<g id="edge75" class="edge"><title>1,4->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M477.779,-288.086C489.347,-298.974 500,-309 500,-309 500,-309 530,-405 530,-405 530,-405 535.671,-412.254 542.894,-421.492"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="540.32,-423.882 549.236,-429.604 545.834,-419.571 540.32,-423.882"/>
+</g>
+<!-- 2,4 -->
+<g id="node28" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-349 551,-363 596,-363 596,-349 551,-349"/>
+<text text-anchor="start" x="558.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">CCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-335 551,-349 596,-349 596,-335 551,-335"/>
+<text text-anchor="start" x="556.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">TAAGG</text>
+</g>
+<!-- 1,4->2,4 -->
+<g id="edge79" class="edge"><title>1,4->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M479.857,-286.293C494.987,-298.695 510,-311 510,-311 510,-311 520.107,-318.38 532.225,-327.228"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="530.253,-330.121 540.393,-333.192 534.38,-324.468 530.253,-330.121"/>
+</g>
+<!-- 4,3 -->
+<g id="node32" class="node"><title>4,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">4,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-157 551,-171 596,-171 596,-157 551,-157"/>
+<text text-anchor="start" x="558.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">CCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-143 551,-157 596,-157 596,-143 551,-143"/>
+<text text-anchor="start" x="556.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">TAAGG</text>
+</g>
+<!-- 1,4->4,3 -->
+<g id="edge77" class="edge"><title>1,4->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M479.143,-235.305C494.511,-222.204 510,-209 510,-209 510,-209 519.601,-202.295 531.307,-194.119"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="533.461,-196.884 539.655,-188.288 529.453,-191.145 533.461,-196.884"/>
+</g>
+<!-- 3,1->1,2 -->
+<g id="edge85" class="edge"><title>3,1->1,2</title>
+<path fill="none" stroke="#218559" d="M298.604,-431.533C286.159,-418.113 274,-405 274,-405 274,-405 262,-384 262,-384 262,-384 244,-309 244,-309 244,-309 239.718,-304.221 233.857,-297.678"/>
+<polygon fill="#218559" stroke="#218559" points="236.285,-295.142 227.005,-290.029 231.071,-299.813 236.285,-295.142"/>
+</g>
+<!-- 3,2 -->
+<g id="node21" class="node"><title>3,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-460" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-471.167" font-family="Times Roman,serif" font-size="10.00">3,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-452 427,-466 472,-466 472,-452 427,-452"/>
+<text text-anchor="start" x="435" y="-456.667" font-family="Times Roman,serif" font-size="10.00">TCCTT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-438 427,-452 472,-452 472,-438 427,-438"/>
+<text text-anchor="start" x="431.5" y="-442.667" font-family="Times Roman,serif" font-size="10.00">AAGGA</text>
+</g>
+<!-- 3,1->3,2 -->
+<g id="edge83" class="edge"><title>3,1->3,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-453.562C376.601,-453.258 386.531,-453.176 396.159,-453.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-456.822 406.443,-453.554 396.527,-449.823 396.364,-456.822"/>
+</g>
+<!-- 3,1->2,1 -->
+<g id="edge87" class="edge"><title>3,1->2,1</title>
+<path fill="none" stroke="#218559" d="M283.329,-450.078C271.613,-447.289 262,-445 262,-445 262,-445 244.717,-420.067 228.55,-396.744"/>
+<polygon fill="#218559" stroke="#218559" points="231.252,-394.498 222.678,-388.273 225.499,-398.486 231.252,-394.498"/>
+</g>
+<!-- 3,2->3,1 -->
+<g id="edge91" class="edge"><title>3,2->3,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-466.446C397.158,-466.745 387.225,-466.824 377.602,-466.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-463.175 367.327,-466.438 377.242,-470.173 377.407,-463.175"/>
+</g>
+<!-- 3,2->3,3 -->
+<g id="edge89" class="edge"><title>3,2->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-453.562C500.601,-453.258 510.531,-453.176 520.159,-453.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-456.822 530.443,-453.554 520.527,-449.823 520.364,-456.822"/>
+</g>
+<!-- 3,3->1,4 -->
+<g id="edge95" class="edge"><title>3,3->1,4</title>
+<path fill="none" stroke="#218559" d="M549.236,-429.604C539.291,-416.884 530,-405 530,-405 530,-405 510,-359 510,-359 510,-359 500,-309 500,-309 500,-309 493.498,-302.881 485.137,-295.012"/>
+<polygon fill="#218559" stroke="#218559" points="487.46,-292.391 477.779,-288.086 482.662,-297.489 487.46,-292.391"/>
+</g>
+<!-- 3,3->3,2 -->
+<g id="edge97" class="edge"><title>3,3->3,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-466.446C521.158,-466.745 511.225,-466.824 501.602,-466.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-463.175 491.327,-466.438 501.242,-470.173 501.407,-463.175"/>
+</g>
+<!-- 3,4 -->
+<g id="node23" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-460" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-471.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-452 675,-466 720,-466 720,-452 675,-452"/>
+<text text-anchor="start" x="682" y="-456.667" font-family="Times Roman,serif" font-size="10.00">CTTAG</text>
+<polygon fill="#218559" stroke="#218559" points="675,-438 675,-452 720,-452 720,-438 675,-438"/>
+<text text-anchor="start" x="681" y="-442.667" font-family="Times Roman,serif" font-size="10.00">CTAAG</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge93" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-453.562C624.601,-453.258 634.531,-453.176 644.159,-453.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-456.822 654.443,-453.554 644.527,-449.823 644.364,-456.822"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge101" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M654.443,-466.446C645.158,-466.745 635.225,-466.824 625.602,-466.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-463.175 615.327,-466.438 625.242,-470.173 625.407,-463.175"/>
+</g>
+<!-- 3,4->2,4 -->
+<g id="edge99" class="edge"><title>3,4->2,4</title>
+<path fill="none" stroke="#218559" d="M667.572,-433.467C651.973,-419.402 636,-405 636,-405 636,-405 625.367,-396.899 612.837,-387.352"/>
+<polygon fill="#218559" stroke="#218559" points="614.945,-384.558 604.869,-381.281 610.702,-390.126 614.945,-384.558"/>
+</g>
+<!-- 2,1->1,1 -->
+<g id="edge21" class="edge"><title>2,1->1,1</title>
+<path fill="none" stroke="#218559" d="M163.346,-338.87C142.193,-328.685 120,-318 120,-318 120,-318 108.279,-307.047 95.112,-294.744"/>
+<polygon fill="#218559" stroke="#218559" points="97.41,-292.101 87.7138,-287.831 92.6308,-297.216 97.41,-292.101"/>
+</g>
+<!-- 2,1->3,1 -->
+<g id="edge15" class="edge"><title>2,1->3,1</title>
+<path fill="none" stroke="#dd1e2f" d="M225.811,-386.692C242.699,-406.902 262,-430 262,-430 262,-430 268.943,-433.306 278.219,-437.723"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="276.728,-440.89 287.262,-442.029 279.738,-434.57 276.728,-440.89"/>
+</g>
+<!-- 2,2 -->
+<g id="node26" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-349 303,-363 348,-363 348,-349 303,-349"/>
+<text text-anchor="start" x="310" y="-353.667" font-family="Times Roman,serif" font-size="10.00">GTCCT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-335 303,-349 348,-349 348,-335 303,-335"/>
+<text text-anchor="start" x="308" y="-339.667" font-family="Times Roman,serif" font-size="10.00">AGGAC</text>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge19" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-350.562C252.601,-350.258 262.531,-350.176 272.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-353.822 282.443,-350.554 272.527,-346.823 272.364,-353.822"/>
+</g>
+<!-- 2,1->4,1 -->
+<g id="edge17" class="edge"><title>2,1->4,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-327.971C236.061,-317.862 244,-309 244,-309 244,-309 274,-213 274,-213 274,-213 280.502,-206.881 288.863,-199.012"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="291.338,-201.489 296.221,-192.086 286.54,-196.391 291.338,-201.489"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge25" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M282.443,-363.446C273.158,-363.745 263.225,-363.824 253.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-360.175 243.327,-363.438 253.242,-367.173 253.407,-360.175"/>
+</g>
+<!-- 2,3 -->
+<g id="node27" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-349 427,-363 472,-363 472,-349 427,-349"/>
+<text text-anchor="start" x="435" y="-353.667" font-family="Times Roman,serif" font-size="10.00">TCCTT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-335 427,-349 472,-349 472,-335 427,-335"/>
+<text text-anchor="start" x="431.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">AAGGA</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge23" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-350.562C376.601,-350.258 386.531,-350.176 396.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-353.822 406.443,-350.554 396.527,-346.823 396.364,-353.822"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge29" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M406.443,-363.446C397.158,-363.745 387.225,-363.824 377.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-360.175 367.327,-363.438 377.242,-367.173 377.407,-360.175"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge27" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-350.562C500.601,-350.258 510.531,-350.176 520.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-353.822 530.443,-350.554 520.527,-346.823 520.364,-353.822"/>
+</g>
+<!-- 2,4->1,4 -->
+<g id="edge35" class="edge"><title>2,4->1,4</title>
+<path fill="none" stroke="#218559" d="M541.015,-332.238C525.051,-319.878 505.587,-304.81 488.68,-291.72"/>
+<polygon fill="#218559" stroke="#218559" points="490.661,-288.827 480.611,-285.473 486.376,-294.363 490.661,-288.827"/>
+</g>
+<!-- 2,4->3,4 -->
+<g id="edge33" class="edge"><title>2,4->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M603.652,-382.461C620.195,-396.202 640.78,-413.301 658.406,-427.942"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="656.342,-430.778 666.271,-434.475 660.815,-425.393 656.342,-430.778"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge37" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M530.443,-363.446C521.158,-363.745 511.225,-363.824 501.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-360.175 491.327,-363.438 501.242,-367.173 501.407,-360.175"/>
+</g>
+<!-- 4,4 -->
+<g id="node33" class="node"><title>4,4</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">4,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-157 675,-171 720,-171 720,-157 675,-157"/>
+<text text-anchor="start" x="682" y="-161.667" font-family="Times Roman,serif" font-size="10.00">CTTAG</text>
+<polygon fill="#218559" stroke="#218559" points="675,-143 675,-157 720,-157 720,-143 675,-143"/>
+<text text-anchor="start" x="681" y="-147.667" font-family="Times Roman,serif" font-size="10.00">CTAAG</text>
+</g>
+<!-- 2,4->4,4 -->
+<g id="edge31" class="edge"><title>2,4->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M593.476,-325.295C614.656,-292.5 647.802,-241.178 670.862,-205.472"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="674.008,-207.051 676.494,-196.752 668.128,-203.254 674.008,-207.051"/>
+</g>
+<!-- 4,1->1,2 -->
+<g id="edge41" class="edge"><title>4,1->1,2</title>
+<path fill="none" stroke="#218559" d="M285.459,-179.436C272.801,-184.057 262,-188 262,-188 262,-188 244,-213 244,-213 244,-213 239.718,-217.779 233.857,-224.322"/>
+<polygon fill="#218559" stroke="#218559" points="231.071,-222.187 227.005,-231.971 236.285,-226.858 231.071,-222.187"/>
+</g>
+<!-- 4,1->2,1 -->
+<g id="edge43" class="edge"><title>4,1->2,1</title>
+<path fill="none" stroke="#218559" d="M296.221,-192.086C284.653,-202.974 274,-213 274,-213 274,-213 262,-243 262,-243 262,-243 244,-309 244,-309 244,-309 239.718,-313.779 233.857,-320.322"/>
+<polygon fill="#218559" stroke="#218559" points="231.071,-318.187 227.005,-327.971 236.285,-322.858 231.071,-318.187"/>
+</g>
+<!-- 4,2 -->
+<g id="node31" class="node"><title>4,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">4,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-157 427,-171 472,-171 472,-157 427,-157"/>
+<text text-anchor="start" x="435" y="-161.667" font-family="Times Roman,serif" font-size="10.00">TCCTT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-143 427,-157 472,-157 472,-143 427,-143"/>
+<text text-anchor="start" x="431.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">AAGGA</text>
+</g>
+<!-- 4,1->4,2 -->
+<g id="edge39" class="edge"><title>4,1->4,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-158.562C376.601,-158.258 386.531,-158.176 396.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-161.822 406.443,-158.554 396.527,-154.823 396.364,-161.822"/>
+</g>
+<!-- 4,2->4,1 -->
+<g id="edge47" class="edge"><title>4,2->4,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-171.446C397.158,-171.745 387.225,-171.824 377.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-168.175 367.327,-171.438 377.242,-175.173 377.407,-168.175"/>
+</g>
+<!-- 4,2->4,3 -->
+<g id="edge45" class="edge"><title>4,2->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-158.562C500.601,-158.258 510.531,-158.176 520.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-161.822 530.443,-158.554 520.527,-154.823 520.364,-161.822"/>
+</g>
+<!-- 4,3->1,4 -->
+<g id="edge51" class="edge"><title>4,3->1,4</title>
+<path fill="none" stroke="#218559" d="M541.015,-189.762C525.051,-202.122 505.587,-217.19 488.68,-230.28"/>
+<polygon fill="#218559" stroke="#218559" points="486.376,-227.637 480.611,-236.527 490.661,-233.173 486.376,-227.637"/>
+</g>
+<!-- 4,3->4,2 -->
+<g id="edge53" class="edge"><title>4,3->4,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-171.446C521.158,-171.745 511.225,-171.824 501.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-168.175 491.327,-171.438 501.242,-175.173 501.407,-168.175"/>
+</g>
+<!-- 4,3->4,4 -->
+<g id="edge49" class="edge"><title>4,3->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-158.562C624.601,-158.258 634.531,-158.176 644.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-161.822 654.443,-158.554 644.527,-154.823 644.364,-161.822"/>
+</g>
+<!-- 4,4->2,4 -->
+<g id="edge55" class="edge"><title>4,4->2,4</title>
+<path fill="none" stroke="#218559" d="M678.863,-197.706C660.882,-230.131 636,-275 636,-275 636,-275 618.994,-297.135 602.652,-318.405"/>
+<polygon fill="#218559" stroke="#218559" points="599.776,-316.404 596.459,-326.466 605.327,-320.669 599.776,-316.404"/>
+</g>
+<!-- 4,4->4,3 -->
+<g id="edge57" class="edge"><title>4,4->4,3</title>
+<path fill="none" stroke="#218559" d="M654.443,-171.446C645.158,-171.745 635.225,-171.824 625.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-168.175 615.327,-171.438 625.242,-175.173 625.407,-168.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/.part-0.crc
new file mode 100644
index 0000000..2085368
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/.part-1.crc
new file mode 100644
index 0000000..69dcf7d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/part-0 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/part-0
new file mode 100755
index 0000000..36702f5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/part-1 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/part-1
new file mode 100755
index 0000000..9045432
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_ff_bubbles/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles.txt b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles.txt
new file mode 100644
index 0000000..a41ce56
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles.txt
@@ -0,0 +1,18 @@
+((2,1) [(2,3)] [] [] [] AATAGA) (null)
+((2,3) [(6,1),(2,4)] [] [] [(2,1)] TAGAA) (null)
+((2,4) [(6,2)] [] [] [(2,3)] AGAAG) (null)
+((4,1) [(4,3)] [] [] [] AATAGA) (null)
+((4,3) [(6,1),(4,4)] [] [] [(4,1)] TAGAA) (null)
+((4,4) [(6,2)] [] [] [(4,3)] AGAAG) (null)
+((6,1) [(6,2)] [] [] [(2,3),(1,3),(3,3),(4,3),(5,3)] AGAAG) (null)
+((6,2) [(6,3)] [] [] [(2,4),(3,4),(1,4),(4,4),(5,4),(6,1)] GAAGA) (null)
+((6,3) [] [] [] [(6,2)] AAGAAG) (null)
+((1,1) [(1,3)] [] [] [] AATAGA) (null)
+((1,3) [(6,1),(1,4)] [] [] [(1,1)] TAGAA) (null)
+((1,4) [(6,2)] [] [] [(1,3)] AGAAG) (null)
+((3,1) [(3,3)] [] [] [] AATAGA) (null)
+((3,3) [(6,1),(3,4)] [] [] [(3,1)] TAGAA) (null)
+((3,4) [(6,2)] [] [] [(3,3)] AGAAG) (null)
+((5,1) [(5,3)] [] [] [] AATAGA) (null)
+((5,3) [(6,1),(5,4)] [] [] [(5,1)] TAGAA) (null)
+((5,4) [(6,2)] [] [] [(5,3)] AGAAG) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles.txt.svg b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles.txt.svg
new file mode 100644
index 0000000..ff38f7d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles.txt.svg
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: five_length1_bubbles_txt Pages: 1 -->
+<svg width="646pt" height="844pt"
+ viewBox="0.00 0.00 646.00 844.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 840)">
+<title>five_length1_bubbles_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-840 643,-840 643,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-548 8,-636 376,-636 376,-548 8,-548"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="8,-320 8,-408 376,-408 376,-320 8,-320"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="8,-740 8,-828 376,-828 376,-740 8,-740"/>
+</g>
+<g id="graph6" class="cluster"><title>cluster_5</title>
+<polygon fill="none" stroke="black" points="8,-644 8,-732 376,-732 376,-644 8,-644"/>
+</g>
+<g id="graph7" class="cluster"><title>cluster_4</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<g id="graph8" class="cluster"><title>cluster_6</title>
+<polygon fill="none" stroke="black" points="274,-426 274,-514 630,-514 630,-426 274,-426"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-592" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-603.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-584 37,-598 82,-598 82,-584 37,-584"/>
+<text text-anchor="start" x="40" y="-588.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-570 37,-584 82,-584 82,-570 37,-570"/>
+<text text-anchor="start" x="43" y="-574.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 1,3 -->
+<g id="node16" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-592" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-603.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-584 179,-598 224,-598 224,-584 179,-584"/>
+<text text-anchor="start" x="185" y="-588.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-570 179,-584 224,-584 224,-570 179,-570"/>
+<text text-anchor="start" x="187.5" y="-574.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 1,1->1,3 -->
+<g id="edge69" class="edge"><title>1,1->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-585.755C116.207,-585.208 132.729,-585.105 148.049,-585.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-588.957 158.425,-585.756 148.534,-581.96 148.326,-588.957"/>
+</g>
+<!-- 1,3->1,1 -->
+<g id="edge75" class="edge"><title>1,3->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-598.244C143.825,-598.792 127.305,-598.895 111.982,-598.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-595.043 101.605,-598.245 111.497,-602.04 111.704,-595.043"/>
+</g>
+<!-- 1,4 -->
+<g id="node17" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-592" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-603.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-584 303,-598 348,-598 348,-584 303,-584"/>
+<text text-anchor="start" x="307.5" y="-588.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-570 303,-584 348,-584 348,-570 303,-570"/>
+<text text-anchor="start" x="311" y="-574.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge73" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-585.562C252.601,-585.258 262.531,-585.176 272.159,-585.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-588.822 282.443,-585.554 272.527,-581.823 272.364,-588.822"/>
+</g>
+<!-- 6,1 -->
+<g id="node35" class="node"><title>6,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-470" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-481.167" font-family="Times Roman,serif" font-size="10.00">6,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-462 303,-476 348,-476 348,-462 303,-462"/>
+<text text-anchor="start" x="307.5" y="-466.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-448 303,-462 348,-462 348,-448 303,-448"/>
+<text text-anchor="start" x="311" y="-452.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->6,1 -->
+<g id="edge71" class="edge"><title>1,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M217.507,-558.714C235.573,-522.287 262,-469 262,-469 262,-469 264,-469 264,-469 264,-469 267.077,-469.05 271.85,-469.129"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="271.916,-472.63 281.972,-469.295 272.031,-465.631 271.916,-472.63"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge79" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-598.446C273.158,-598.745 263.225,-598.824 253.602,-598.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-595.175 243.327,-598.438 253.242,-602.173 253.407,-595.175"/>
+</g>
+<!-- 6,2 -->
+<g id="node36" class="node"><title>6,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-470" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-481.167" font-family="Times Roman,serif" font-size="10.00">6,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-462 427,-476 472,-476 472,-462 427,-462"/>
+<text text-anchor="start" x="431.5" y="-466.667" font-family="Times Roman,serif" font-size="10.00">GAAGA</text>
+<polygon fill="#218559" stroke="#218559" points="427,-448 427,-462 472,-462 472,-448 427,-448"/>
+<text text-anchor="start" x="435.5" y="-452.667" font-family="Times Roman,serif" font-size="10.00">TCTTC</text>
+</g>
+<!-- 1,4->6,2 -->
+<g id="edge77" class="edge"><title>1,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M353.138,-564.316C371.132,-546.612 394.616,-523.507 413.837,-504.596"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="416.3,-507.082 420.974,-497.574 411.391,-502.093 416.3,-507.082"/>
+</g>
+<!-- 3,1 -->
+<g id="node19" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-364" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-375.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-356 37,-370 82,-370 82,-356 37,-356"/>
+<text text-anchor="start" x="40" y="-360.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-342 37,-356 82,-356 82,-342 37,-342"/>
+<text text-anchor="start" x="43" y="-346.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 3,3 -->
+<g id="node20" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-364" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-375.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-356 179,-370 224,-370 224,-356 179,-356"/>
+<text text-anchor="start" x="185" y="-360.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-342 179,-356 224,-356 224,-342 179,-342"/>
+<text text-anchor="start" x="187.5" y="-346.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 3,1->3,3 -->
+<g id="edge81" class="edge"><title>3,1->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-357.755C116.207,-357.208 132.729,-357.105 148.049,-357.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-360.957 158.425,-357.756 148.534,-353.96 148.326,-360.957"/>
+</g>
+<!-- 3,3->3,1 -->
+<g id="edge87" class="edge"><title>3,3->3,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-370.244C143.825,-370.792 127.305,-370.895 111.982,-370.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-367.043 101.605,-370.245 111.497,-374.04 111.704,-367.043"/>
+</g>
+<!-- 3,4 -->
+<g id="node21" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-364" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-375.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-356 303,-370 348,-370 348,-356 303,-356"/>
+<text text-anchor="start" x="307.5" y="-360.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-342 303,-356 348,-356 348,-342 303,-342"/>
+<text text-anchor="start" x="311" y="-346.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge85" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-357.562C252.601,-357.258 262.531,-357.176 272.159,-357.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-360.822 282.443,-357.554 272.527,-353.823 272.364,-360.822"/>
+</g>
+<!-- 3,3->6,1 -->
+<g id="edge83" class="edge"><title>3,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M231.334,-389.931C247.997,-404.175 268.832,-421.985 286.618,-437.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="284.674,-440.132 294.55,-443.97 289.223,-434.812 284.674,-440.132"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge91" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-370.446C273.158,-370.745 263.225,-370.824 253.602,-370.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-367.175 243.327,-370.438 253.242,-374.173 253.407,-367.175"/>
+</g>
+<!-- 3,4->6,2 -->
+<g id="edge89" class="edge"><title>3,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M356.869,-388.787C372.495,-400.941 388,-413 388,-413 388,-413 399.721,-423.953 412.888,-436.256"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="410.59,-438.899 420.286,-443.169 415.369,-433.784 410.59,-438.899"/>
+</g>
+<!-- 2,1 -->
+<g id="node23" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-784" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-795.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-776 37,-790 82,-790 82,-776 37,-776"/>
+<text text-anchor="start" x="40" y="-780.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-762 37,-776 82,-776 82,-762 37,-762"/>
+<text text-anchor="start" x="43" y="-766.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 2,3 -->
+<g id="node24" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-784" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-795.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-776 179,-790 224,-790 224,-776 179,-776"/>
+<text text-anchor="start" x="185" y="-780.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-762 179,-776 224,-776 224,-762 179,-762"/>
+<text text-anchor="start" x="187.5" y="-766.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 2,1->2,3 -->
+<g id="edge17" class="edge"><title>2,1->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-777.755C116.207,-777.208 132.729,-777.105 148.049,-777.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-780.957 158.425,-777.756 148.534,-773.96 148.326,-780.957"/>
+</g>
+<!-- 2,3->2,1 -->
+<g id="edge23" class="edge"><title>2,3->2,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-790.244C143.825,-790.792 127.305,-790.895 111.982,-790.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-787.043 101.605,-790.245 111.497,-794.04 111.704,-787.043"/>
+</g>
+<!-- 2,4 -->
+<g id="node25" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-784" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-795.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-776 303,-790 348,-790 348,-776 303,-776"/>
+<text text-anchor="start" x="307.5" y="-780.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-762 303,-776 348,-776 348,-762 303,-762"/>
+<text text-anchor="start" x="311" y="-766.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge21" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-777.562C252.601,-777.258 262.531,-777.176 272.159,-777.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-780.822 282.443,-777.554 272.527,-773.823 272.364,-780.822"/>
+</g>
+<!-- 2,3->6,1 -->
+<g id="edge19" class="edge"><title>2,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-754.971C236.061,-744.862 244,-736 244,-736 244,-736 274,-544 274,-544 274,-544 285.426,-527.421 297.461,-509.958"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="300.579,-511.603 303.371,-501.383 294.815,-507.63 300.579,-511.603"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge27" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-790.446C273.158,-790.745 263.225,-790.824 253.602,-790.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-787.175 243.327,-790.438 253.242,-794.173 253.407,-787.175"/>
+</g>
+<!-- 2,4->6,2 -->
+<g id="edge25" class="edge"><title>2,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M353.779,-756.914C365.347,-746.026 376,-736 376,-736 376,-736 415.795,-590.993 436.621,-515.107"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="440.035,-515.892 439.306,-505.323 433.284,-514.04 440.035,-515.892"/>
+</g>
+<!-- 5,1 -->
+<g id="node27" class="node"><title>5,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-688" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-699.167" font-family="Times Roman,serif" font-size="10.00">5,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-680 37,-694 82,-694 82,-680 37,-680"/>
+<text text-anchor="start" x="40" y="-684.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-666 37,-680 82,-680 82,-666 37,-666"/>
+<text text-anchor="start" x="43" y="-670.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 5,3 -->
+<g id="node28" class="node"><title>5,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-688" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-699.167" font-family="Times Roman,serif" font-size="10.00">5,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-680 179,-694 224,-694 224,-680 179,-680"/>
+<text text-anchor="start" x="185" y="-684.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-666 179,-680 224,-680 224,-666 179,-666"/>
+<text text-anchor="start" x="187.5" y="-670.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 5,1->5,3 -->
+<g id="edge93" class="edge"><title>5,1->5,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-681.755C116.207,-681.208 132.729,-681.105 148.049,-681.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-684.957 158.425,-681.756 148.534,-677.96 148.326,-684.957"/>
+</g>
+<!-- 5,3->5,1 -->
+<g id="edge99" class="edge"><title>5,3->5,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-694.244C143.825,-694.792 127.305,-694.895 111.982,-694.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-691.043 101.605,-694.245 111.497,-698.04 111.704,-691.043"/>
+</g>
+<!-- 5,4 -->
+<g id="node29" class="node"><title>5,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-688" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-699.167" font-family="Times Roman,serif" font-size="10.00">5,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-680 303,-694 348,-694 348,-680 303,-680"/>
+<text text-anchor="start" x="307.5" y="-684.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-666 303,-680 348,-680 348,-666 303,-666"/>
+<text text-anchor="start" x="311" y="-670.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 5,3->5,4 -->
+<g id="edge97" class="edge"><title>5,3->5,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-681.562C252.601,-681.258 262.531,-681.176 272.159,-681.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-684.822 282.443,-681.554 272.527,-677.823 272.364,-684.822"/>
+</g>
+<!-- 5,3->6,1 -->
+<g id="edge95" class="edge"><title>5,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M227.005,-658.971C236.061,-648.862 244,-640 244,-640 244,-640 262,-514 262,-514 262,-514 271.601,-507.295 283.307,-499.119"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="285.461,-501.884 291.655,-493.288 281.453,-496.145 285.461,-501.884"/>
+</g>
+<!-- 5,4->5,3 -->
+<g id="edge103" class="edge"><title>5,4->5,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-694.446C273.158,-694.745 263.225,-694.824 253.602,-694.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-691.175 243.327,-694.438 253.242,-698.173 253.407,-691.175"/>
+</g>
+<!-- 5,4->6,2 -->
+<g id="edge101" class="edge"><title>5,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M353.779,-660.914C365.347,-650.026 376,-640 376,-640 376,-640 408.743,-563.749 430.371,-513.382"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="433.673,-514.563 434.403,-503.993 427.241,-511.801 433.673,-514.563"/>
+</g>
+<!-- 4,1 -->
+<g id="node31" class="node"><title>4,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">4,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="40" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="43" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 4,3 -->
+<g id="node32" class="node"><title>4,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">4,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="187.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 4,1->4,3 -->
+<g id="edge29" class="edge"><title>4,1->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 4,3->4,1 -->
+<g id="edge35" class="edge"><title>4,3->4,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 4,4 -->
+<g id="node33" class="node"><title>4,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">4,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="307.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="311" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 4,3->4,4 -->
+<g id="edge33" class="edge"><title>4,3->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 4,3->6,1 -->
+<g id="edge31" class="edge"><title>4,3->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M238.738,-278.971C252.156,-285.36 264,-291 264,-291 264,-291 274,-412 274,-412 274,-412 282.58,-421.757 292.701,-433.268"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="290.268,-435.801 299.5,-441 295.525,-431.179 290.268,-435.801"/>
+</g>
+<!-- 4,4->4,3 -->
+<g id="edge39" class="edge"><title>4,4->4,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 4,4->6,2 -->
+<g id="edge37" class="edge"><title>4,4->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M351.718,-289.414C368.888,-307.675 388,-328 388,-328 388,-328 412.394,-384.787 430.33,-426.538"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427.226,-428.181 434.389,-435.987 433.658,-425.418 427.226,-428.181"/>
+</g>
+<!-- 6,1->1,3 -->
+<g id="edge45" class="edge"><title>6,1->1,3</title>
+<path fill="none" stroke="#218559" d="M286.368,-453.534C274.262,-448.374 264,-444 264,-444 264,-444 262,-444 262,-444 262,-444 236.975,-504.716 218.982,-548.371"/>
+<polygon fill="#218559" stroke="#218559" points="215.723,-547.095 215.148,-557.674 222.195,-549.762 215.723,-547.095"/>
+</g>
+<!-- 6,1->3,3 -->
+<g id="edge47" class="edge"><title>6,1->3,3</title>
+<path fill="none" stroke="#218559" d="M299.5,-441C286.75,-426.5 274,-412 274,-412 274,-412 264,-394 264,-394 264,-394 257.057,-390.694 247.781,-386.277"/>
+<polygon fill="#218559" stroke="#218559" points="249.272,-383.11 238.738,-381.971 246.262,-389.43 249.272,-383.11"/>
+</g>
+<!-- 6,1->2,3 -->
+<g id="edge43" class="edge"><title>6,1->2,3</title>
+<path fill="none" stroke="#218559" d="M303.371,-501.383C289.471,-521.551 274,-544 274,-544 274,-544 264,-629 264,-629 264,-629 244,-736 244,-736 244,-736 239.718,-740.779 233.857,-747.322"/>
+<polygon fill="#218559" stroke="#218559" points="231.071,-745.187 227.005,-754.971 236.285,-749.858 231.071,-745.187"/>
+</g>
+<!-- 6,1->5,3 -->
+<g id="edge51" class="edge"><title>6,1->5,3</title>
+<path fill="none" stroke="#218559" d="M293.131,-494.787C277.505,-506.941 262,-519 262,-519 262,-519 244,-640 244,-640 244,-640 239.718,-644.779 233.857,-651.322"/>
+<polygon fill="#218559" stroke="#218559" points="231.071,-649.187 227.005,-658.971 236.285,-653.858 231.071,-649.187"/>
+</g>
+<!-- 6,1->4,3 -->
+<g id="edge49" class="edge"><title>6,1->4,3</title>
+<path fill="none" stroke="#218559" d="M299.5,-441C286.75,-426.5 274,-412 274,-412 274,-412 264,-316 264,-316 264,-316 252.076,-305.59 238.602,-293.828"/>
+<polygon fill="#218559" stroke="#218559" points="240.859,-291.151 231.024,-287.211 236.255,-296.425 240.859,-291.151"/>
+</g>
+<!-- 6,1->6,2 -->
+<g id="edge41" class="edge"><title>6,1->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-463.562C376.601,-463.258 386.531,-463.176 396.159,-463.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-466.822 406.443,-463.554 396.527,-459.823 396.364,-466.822"/>
+</g>
+<!-- 6,2->1,4 -->
+<g id="edge59" class="edge"><title>6,2->1,4</title>
+<path fill="none" stroke="#218559" d="M423.484,-499.281C406.768,-518.463 388,-540 388,-540 388,-540 376.647,-549.37 363.581,-560.156"/>
+<polygon fill="#218559" stroke="#218559" points="361.246,-557.544 355.762,-566.609 365.702,-562.943 361.246,-557.544"/>
+</g>
+<!-- 6,2->3,4 -->
+<g id="edge57" class="edge"><title>6,2->3,4</title>
+<path fill="none" stroke="#218559" d="M418.55,-443.97C401.867,-429.709 381.029,-411.896 363.258,-396.704"/>
+<polygon fill="#218559" stroke="#218559" points="365.209,-393.768 355.334,-389.931 360.661,-399.089 365.209,-393.768"/>
+</g>
+<!-- 6,2->2,4 -->
+<g id="edge55" class="edge"><title>6,2->2,4</title>
+<path fill="none" stroke="#218559" d="M440.065,-505.448C423.121,-572.666 388,-712 388,-712 388,-712 376,-736 376,-736 376,-736 369.498,-742.119 361.137,-749.988"/>
+<polygon fill="#218559" stroke="#218559" points="358.662,-747.511 353.779,-756.914 363.46,-752.609 358.662,-747.511"/>
+</g>
+<!-- 6,2->5,4 -->
+<g id="edge63" class="edge"><title>6,2->5,4</title>
+<path fill="none" stroke="#218559" d="M436.802,-504.593C419.001,-555.079 388,-643 388,-643 388,-643 378.242,-649.97 366.407,-658.423"/>
+<polygon fill="#218559" stroke="#218559" points="364.079,-655.785 357.976,-664.446 368.148,-661.481 364.079,-655.785"/>
+</g>
+<!-- 6,2->4,4 -->
+<g id="edge61" class="edge"><title>6,2->4,4</title>
+<path fill="none" stroke="#218559" d="M432.98,-436.204C411.491,-390.872 376,-316 376,-316 376,-316 367.973,-307.343 358.288,-296.899"/>
+<polygon fill="#218559" stroke="#218559" points="360.762,-294.42 351.396,-289.467 355.629,-299.179 360.762,-294.42"/>
+</g>
+<!-- 6,2->6,1 -->
+<g id="edge65" class="edge"><title>6,2->6,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-476.446C397.158,-476.745 387.225,-476.824 377.602,-476.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-473.175 367.327,-476.438 377.242,-480.173 377.407,-473.175"/>
+</g>
+<!-- 6,3 -->
+<g id="node37" class="node"><title>6,3</title>
+<ellipse fill="none" stroke="black" cx="576" cy="-470" rx="44.7575" ry="36.0624"/>
+<text text-anchor="start" x="556" y="-481.167" font-family="Times Roman,serif" font-size="10.00">6,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="552,-462 552,-476 600,-476 600,-462 552,-462"/>
+<text text-anchor="start" x="554.5" y="-466.667" font-family="Times Roman,serif" font-size="10.00">AAGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="552,-448 552,-462 600,-462 600,-448 552,-448"/>
+<text text-anchor="start" x="559" y="-452.667" font-family="Times Roman,serif" font-size="10.00">CTTCTT</text>
+</g>
+<!-- 6,2->6,3 -->
+<g id="edge53" class="edge"><title>6,2->6,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.642,-463.585C501.055,-463.272 511.156,-463.178 520.981,-463.304"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="521.009,-466.805 531.079,-463.514 521.154,-459.807 521.009,-466.805"/>
+</g>
+<!-- 6,3->6,2 -->
+<g id="edge67" class="edge"><title>6,3->6,2</title>
+<path fill="none" stroke="#218559" d="M531.079,-476.486C521.562,-476.764 511.435,-476.822 501.66,-476.662"/>
+<polygon fill="#218559" stroke="#218559" points="501.726,-473.162 491.642,-476.415 501.553,-480.16 501.726,-473.162"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/.part-0.crc
new file mode 100644
index 0000000..53d1b45
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/.part-1.crc
new file mode 100644
index 0000000..e76bd36
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/part-0 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/part-0
new file mode 100755
index 0000000..a9f8b84
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/part-1 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/part-1
new file mode 100755
index 0000000..f1c5899
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/five_length1_bubbles/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble.txt b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble.txt
new file mode 100644
index 0000000..51cc418
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble.txt
@@ -0,0 +1,6 @@
+((2,1) [(2,3)] [] [] [] GGAATA) (null)
+((2,3) [(2,4)] [(1,4)] [] [(2,1)] AATAC) (null)
+((2,4) [] [(1,3)] [] [(2,3)] ATACG) (null)
+((1,1) [(1,3)] [] [] [] AAACGT) (null)
+((1,3) [(1,4)] [(2,4)] [] [(1,1)] ACGTA) (null)
+((1,4) [] [(2,3)] [] [(1,3)] CGTAT) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble.txt.svg b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble.txt.svg
new file mode 100644
index 0000000..cb1b291
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble.txt.svg
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: fr_bubble_txt Pages: 1 -->
+<svg width="392pt" height="428pt"
+ viewBox="0.00 0.00 392.00 428.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 424)">
+<title>fr_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-424 389,-424 389,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="8,-324 8,-412 376,-412 376,-324 8,-324"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="39.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AAACGT</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="41.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ACGTTT</text>
+</g>
+<!-- 1,3 -->
+<g id="node16" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="186" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+</g>
+<!-- 1,1->1,3 -->
+<g id="edge25" class="edge"><title>1,1->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 1,3->1,1 -->
+<g id="edge31" class="edge"><title>1,3->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,4 -->
+<g id="node17" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="310.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="309.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge27" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 2,4 -->
+<g id="node21" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-360 303,-374 348,-374 348,-360 303,-360"/>
+<text text-anchor="start" x="309.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-346 303,-360 348,-360 348,-346 303,-346"/>
+<text text-anchor="start" x="310.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 1,3->2,4 -->
+<g id="edge29" class="edge"><title>1,3->2,4</title>
+<path fill="none" stroke="#ebb035" d="M231.017,-286.902C247.799,-301.383 268.887,-319.58 286.832,-335.065"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="284.972,-338.083 294.83,-341.966 289.545,-332.783 284.972,-338.083"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge35" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 2,3 -->
+<g id="node20" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-360 179,-374 224,-374 224,-360 179,-360"/>
+<text text-anchor="start" x="186" y="-364.667" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-346 179,-360 224,-360 224,-346 179,-346"/>
+<text text-anchor="start" x="187.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 1,4->2,3 -->
+<g id="edge33" class="edge"><title>1,4->2,3</title>
+<path fill="none" stroke="#ebb035" d="M299.131,-289.838C282.505,-308.372 264,-329 264,-329 264,-329 255.356,-334.351 244.471,-341.089"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="242.477,-338.207 235.817,-346.447 246.162,-344.159 242.477,-338.207"/>
+</g>
+<!-- 2,1 -->
+<g id="node19" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-360 37,-374 82,-374 82,-360 37,-360"/>
+<text text-anchor="start" x="39.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">GGAATA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-346 37,-360 82,-360 82,-346 37,-346"/>
+<text text-anchor="start" x="42.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">TATTCC</text>
+</g>
+<!-- 2,1->2,3 -->
+<g id="edge13" class="edge"><title>2,1->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-361.755C116.207,-361.208 132.729,-361.105 148.049,-361.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-364.957 158.425,-361.756 148.534,-357.96 148.326,-364.957"/>
+</g>
+<!-- 2,3->1,4 -->
+<g id="edge17" class="edge"><title>2,3->1,4</title>
+<path fill="none" stroke="#ebb035" d="M231.017,-342.098C247.799,-327.617 268.887,-309.42 286.832,-293.935"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="289.545,-296.217 294.83,-287.034 284.972,-290.917 289.545,-296.217"/>
+</g>
+<!-- 2,3->2,1 -->
+<g id="edge19" class="edge"><title>2,3->2,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-374.244C143.825,-374.792 127.305,-374.895 111.982,-374.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-371.043 101.605,-374.245 111.497,-378.04 111.704,-371.043"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge15" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-361.562C252.601,-361.258 262.531,-361.176 272.159,-361.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-364.822 282.443,-361.554 272.527,-357.823 272.364,-364.822"/>
+</g>
+<!-- 2,4->1,3 -->
+<g id="edge21" class="edge"><title>2,4->1,3</title>
+<path fill="none" stroke="#ebb035" d="M294.83,-341.966C278.021,-327.462 256.93,-309.262 239.004,-293.794"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="240.875,-290.785 231.017,-286.902 236.301,-296.085 240.875,-290.785"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge23" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-374.446C273.158,-374.745 263.225,-374.824 253.602,-374.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-371.175 243.327,-374.438 253.242,-378.173 253.407,-371.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/.part-0.crc
new file mode 100644
index 0000000..d40cb4d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/.part-1.crc
new file mode 100644
index 0000000..bc50c79
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/part-0 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/part-0
new file mode 100755
index 0000000..f757027
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/part-1 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/part-1
new file mode 100755
index 0000000..96978fb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt
new file mode 100644
index 0000000..b53f352
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt
@@ -0,0 +1,9 @@
+((2,1) [(2,2)] [] [] [(1,3)] CGTAT) (null)
+((2,2) [(2,3)] [] [] [(1,4),(2,1)] GTATT) (null)
+((2,3) [] [] [] [(2,2)] TATTCC) (null)
+((1,1) [(1,3)] [] [] [] AAACGT) (null)
+((1,3) [(2,1),(1,4)] [(3,4)] [] [(1,1)] ACGTA) (null)
+((1,4) [(2,2)] [(3,3)] [] [(1,3)] CGTAT) (null)
+((3,1) [(3,3)] [] [] [] GGAATA) (null)
+((3,3) [(3,4)] [(1,4)] [] [(3,1)] AATAC) (null)
+((3,4) [] [(1,3)] [] [(3,3)] ATACG) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt.svg b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt.svg
new file mode 100644
index 0000000..aaaab66
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble.txt.svg
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: fr_bubble_and_ff_bubble_txt Pages: 1 -->
+<svg width="640pt" height="428pt"
+ viewBox="0.00 0.00 640.00 428.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 424)">
+<title>fr_bubble_and_ff_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-424 637,-424 637,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="8,-324 8,-412 376,-412 376,-324 8,-324"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="274,-121 274,-209 624,-209 624,-121 274,-121"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="39.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AAACGT</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="41.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ACGTTT</text>
+</g>
+<!-- 1,3 -->
+<g id="node16" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="186" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+</g>
+<!-- 1,1->1,3 -->
+<g id="edge26" class="edge"><title>1,1->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 1,3->1,1 -->
+<g id="edge34" class="edge"><title>1,3->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,4 -->
+<g id="node17" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="310.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="309.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge30" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 3,4 -->
+<g id="node21" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-360 303,-374 348,-374 348,-360 303,-360"/>
+<text text-anchor="start" x="309.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-346 303,-360 348,-360 348,-346 303,-346"/>
+<text text-anchor="start" x="310.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 1,3->3,4 -->
+<g id="edge32" class="edge"><title>1,3->3,4</title>
+<path fill="none" stroke="#ebb035" d="M231.017,-286.902C247.799,-301.383 268.887,-319.58 286.832,-335.065"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="284.972,-338.083 294.83,-341.966 289.545,-332.783 284.972,-338.083"/>
+</g>
+<!-- 2,1 -->
+<g id="node23" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-157 303,-171 348,-171 348,-157 303,-157"/>
+<text text-anchor="start" x="310.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-143 303,-157 348,-157 348,-143 303,-143"/>
+<text text-anchor="start" x="309.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+</g>
+<!-- 1,3->2,1 -->
+<g id="edge28" class="edge"><title>1,3->2,1</title>
+<path fill="none" stroke="#dd1e2f" d="M234.345,-237.712C249.456,-227.157 264,-217 264,-217 264,-217 274.622,-207.945 287.002,-197.392"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="289.518,-199.846 294.857,-190.695 284.977,-194.519 289.518,-199.846"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge40" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 3,3 -->
+<g id="node20" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-360 179,-374 224,-374 224,-360 179,-360"/>
+<text text-anchor="start" x="186" y="-364.667" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-346 179,-360 224,-360 224,-346 179,-346"/>
+<text text-anchor="start" x="187.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 1,4->3,3 -->
+<g id="edge38" class="edge"><title>1,4->3,3</title>
+<path fill="none" stroke="#ebb035" d="M294.83,-287.034C278.021,-301.538 256.93,-319.738 239.004,-335.206"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="236.301,-332.915 231.017,-342.098 240.875,-338.215 236.301,-332.915"/>
+</g>
+<!-- 2,2 -->
+<g id="node24" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-157 427,-171 472,-171 472,-157 427,-157"/>
+<text text-anchor="start" x="435.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-143 427,-157 472,-157 472,-143 427,-143"/>
+<text text-anchor="start" x="434" y="-147.667" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+</g>
+<!-- 1,4->2,2 -->
+<g id="edge36" class="edge"><title>1,4->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M356.611,-236.527C372.521,-224.21 391.976,-209.147 408.924,-196.027"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="411.251,-198.652 417.015,-189.762 406.965,-193.117 411.251,-198.652"/>
+</g>
+<!-- 3,1 -->
+<g id="node19" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-360 37,-374 82,-374 82,-360 37,-360"/>
+<text text-anchor="start" x="39.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">GGAATA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-346 37,-360 82,-360 82,-346 37,-346"/>
+<text text-anchor="start" x="42.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">TATTCC</text>
+</g>
+<!-- 3,1->3,3 -->
+<g id="edge42" class="edge"><title>3,1->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-361.755C116.207,-361.208 132.729,-361.105 148.049,-361.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-364.957 158.425,-361.756 148.534,-357.96 148.326,-364.957"/>
+</g>
+<!-- 3,3->1,4 -->
+<g id="edge46" class="edge"><title>3,3->1,4</title>
+<path fill="none" stroke="#ebb035" d="M229.714,-341.169C245.535,-326.385 262,-311 262,-311 262,-311 272.801,-302.428 285.459,-292.382"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="287.843,-294.958 293.5,-286 283.491,-289.475 287.843,-294.958"/>
+</g>
+<!-- 3,3->3,1 -->
+<g id="edge48" class="edge"><title>3,3->3,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-374.244C143.825,-374.792 127.305,-374.895 111.982,-374.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-371.043 101.605,-374.245 111.497,-378.04 111.704,-371.043"/>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge44" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-361.562C252.601,-361.258 262.531,-361.176 272.159,-361.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-364.822 282.443,-361.554 272.527,-357.823 272.364,-364.822"/>
+</g>
+<!-- 3,4->1,3 -->
+<g id="edge50" class="edge"><title>3,4->1,3</title>
+<path fill="none" stroke="#ebb035" d="M294.83,-341.966C278.021,-327.462 256.93,-309.262 239.004,-293.794"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="240.875,-290.785 231.017,-286.902 236.301,-296.085 240.875,-290.785"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge52" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-374.446C273.158,-374.745 263.225,-374.824 253.602,-374.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-371.175 243.327,-374.438 253.242,-378.173 253.407,-371.175"/>
+</g>
+<!-- 2,1->1,3 -->
+<g id="edge16" class="edge"><title>2,1->1,3</title>
+<path fill="none" stroke="#218559" d="M293.015,-189.762C277.051,-202.122 257.587,-217.19 240.68,-230.28"/>
+<polygon fill="#218559" stroke="#218559" points="238.376,-227.637 232.611,-236.527 242.661,-233.173 238.376,-227.637"/>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge14" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-158.562C376.601,-158.258 386.531,-158.176 396.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-161.822 406.443,-158.554 396.527,-154.823 396.364,-161.822"/>
+</g>
+<!-- 2,2->1,4 -->
+<g id="edge20" class="edge"><title>2,2->1,4</title>
+<path fill="none" stroke="#218559" d="M420.286,-191.831C404.465,-206.615 388,-222 388,-222 388,-222 379.356,-227.351 368.471,-234.089"/>
+<polygon fill="#218559" stroke="#218559" points="366.477,-231.207 359.817,-239.447 370.162,-237.159 366.477,-231.207"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge22" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-171.446C397.158,-171.745 387.225,-171.824 377.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-168.175 367.327,-171.438 377.242,-175.173 377.407,-168.175"/>
+</g>
+<!-- 2,3 -->
+<g id="node25" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-157 551,-171 596,-171 596,-157 551,-157"/>
+<text text-anchor="start" x="556.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">TATTCC</text>
+<polygon fill="#218559" stroke="#218559" points="551,-143 551,-157 596,-157 596,-143 551,-143"/>
+<text text-anchor="start" x="553.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">GGAATA</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge18" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-158.562C500.601,-158.258 510.531,-158.176 520.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-161.822 530.443,-158.554 520.527,-154.823 520.364,-161.822"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge24" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-171.446C521.158,-171.745 511.225,-171.824 501.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-168.175 491.327,-171.438 501.242,-175.173 501.407,-168.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-0.crc
new file mode 100644
index 0000000..528de91
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-1.crc
new file mode 100644
index 0000000..247ccc7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-0 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-0
new file mode 100755
index 0000000..795d0c7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-1 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-1
new file mode 100755
index 0000000..8a0aa72
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/fr_bubble_and_ff_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble.txt b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble.txt
new file mode 100644
index 0000000..8b0bfdc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble.txt
@@ -0,0 +1,6 @@
+((2,1) [(2,2)] [] [(1,2)] [] ACCGT) (null)
+((2,2) [(2,3)] [] [(1,1)] [(2,1)] CCGTG) (null)
+((2,3) [] [] [] [(2,2)] CGTGGT) (null)
+((1,1) [(1,2)] [] [(2,2)] [] ACGGT) (null)
+((1,2) [(1,3)] [] [(2,1)] [(1,1)] CGGTG) (null)
+((1,3) [] [] [] [(1,2)] GGTGTA) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble.txt.svg b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble.txt.svg
new file mode 100644
index 0000000..80a9d65
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble.txt.svg
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: rf_bubble_txt Pages: 1 -->
+<svg width="394pt" height="428pt"
+ viewBox="0.00 0.00 394.00 428.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 424)">
+<title>rf_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-424 391,-424 391,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-324 8,-412 377,-412 377,-324 8,-324"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 378,-305 378,-217 8,-217"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-360 37,-374 82,-374 82,-360 37,-360"/>
+<text text-anchor="start" x="42.5" y="-364.667" font-family="Times Roman,serif" font-size="10.00">ACGGT</text>
+<polygon fill="#218559" stroke="#218559" points="37,-346 37,-360 82,-360 82,-346 37,-346"/>
+<text text-anchor="start" x="43" y="-350.667" font-family="Times Roman,serif" font-size="10.00">ACCGT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-360 179,-374 224,-374 224,-360 179,-360"/>
+<text text-anchor="start" x="184" y="-364.667" font-family="Times Roman,serif" font-size="10.00">CGGTG</text>
+<polygon fill="#218559" stroke="#218559" points="179,-346 179,-360 224,-360 224,-346 179,-346"/>
+<text text-anchor="start" x="184" y="-350.667" font-family="Times Roman,serif" font-size="10.00">CACCG</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge25" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-361.755C116.207,-361.208 132.729,-361.105 148.049,-361.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-364.957 158.425,-361.756 148.534,-357.96 148.326,-364.957"/>
+</g>
+<!-- 2,2 -->
+<g id="node20" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="184.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CCGTG</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="183.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CACGG</text>
+</g>
+<!-- 1,1->2,2 -->
+<g id="edge27" class="edge"><title>1,1->2,2</title>
+<path fill="none" stroke="#06a2cb" d="M96.6544,-349.87C117.807,-339.685 140,-329 140,-329 140,-329 153.666,-313.765 168.062,-297.718"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="171.058,-299.619 175.131,-289.838 165.848,-294.945 171.058,-299.619"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge33" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-374.244C143.825,-374.792 127.305,-374.895 111.982,-374.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-371.043 101.605,-374.245 111.497,-378.04 111.704,-371.043"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="326" cy="-368" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="306.5" y="-379.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="304,-360 304,-374 349,-374 349,-360 304,-360"/>
+<text text-anchor="start" x="307" y="-364.667" font-family="Times Roman,serif" font-size="10.00">GGTGTA</text>
+<polygon fill="#218559" stroke="#218559" points="304,-346 304,-360 349,-360 349,-346 304,-346"/>
+<text text-anchor="start" x="307.5" y="-350.667" font-family="Times Roman,serif" font-size="10.00">TACACC</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge29" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.319,-361.573C252.886,-361.256 263.16,-361.173 273.102,-361.321"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="273.22,-364.825 283.299,-361.561 273.384,-357.827 273.22,-364.825"/>
+</g>
+<!-- 2,1 -->
+<g id="node19" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="43" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ACCGT</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="42.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ACGGT</text>
+</g>
+<!-- 1,2->2,1 -->
+<g id="edge31" class="edge"><title>1,2->2,1</title>
+<path fill="none" stroke="#06a2cb" d="M167.587,-345.312C145.274,-330.161 120,-313 120,-313 120,-313 109.378,-303.945 96.9983,-293.392"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="99.0233,-290.519 89.1426,-286.695 94.4822,-295.846 99.0233,-290.519"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge35" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M283.299,-374.439C273.713,-374.75 263.434,-374.828 253.502,-374.673"/>
+<polygon fill="#218559" stroke="#218559" points="253.401,-371.169 243.319,-374.427 253.232,-378.167 253.401,-371.169"/>
+</g>
+<!-- 2,1->1,2 -->
+<g id="edge15" class="edge"><title>2,1->1,2</title>
+<path fill="none" stroke="#06a2cb" d="M92.4134,-283.688C114.726,-298.839 140,-316 140,-316 140,-316 150.622,-325.055 163.002,-335.608"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="160.977,-338.481 170.857,-342.305 165.518,-333.154 160.977,-338.481"/>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge13" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 2,2->1,1 -->
+<g id="edge19" class="edge"><title>2,2->1,1</title>
+<path fill="none" stroke="#06a2cb" d="M168.906,-285.184C148.325,-300.692 121.435,-320.954 99.4042,-337.555"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="97.1022,-334.907 91.222,-343.72 101.315,-340.497 97.1022,-334.907"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge21" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 2,3 -->
+<g id="node21" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="326" cy="-261" rx="43.8406" ry="36.0624"/>
+<text text-anchor="start" x="306" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 349,-267 349,-253 303,-253"/>
+<text text-anchor="start" x="306" y="-257.667" font-family="Times Roman,serif" font-size="10.00">CGTGGT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 349,-253 349,-239 303,-239"/>
+<text text-anchor="start" x="305.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">ACCACG</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge17" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.319,-254.573C252.676,-254.263 262.709,-254.176 272.446,-254.312"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.37,-257.811 282.446,-254.534 272.526,-250.813 272.37,-257.811"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge23" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M282.446,-267.466C273.13,-267.753 263.195,-267.823 253.581,-267.674"/>
+<polygon fill="#218559" stroke="#218559" points="253.401,-264.169 243.319,-267.427 253.232,-271.167 253.401,-264.169"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/.part-0.crc
new file mode 100644
index 0000000..e87ee4f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/.part-1.crc
new file mode 100644
index 0000000..2c9bb22
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/part-0 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/part-0
new file mode 100755
index 0000000..4388d34
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/part-1 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/part-1
new file mode 100755
index 0000000..fbd0d87
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/rf_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble.txt b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble.txt
new file mode 100644
index 0000000..14cf2e1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble.txt
@@ -0,0 +1,6 @@
+((2,1) [(2,2)] [] [] [(1,3)] AGAAG) (null)
+((2,2) [(2,3)] [] [] [(1,4),(2,1)] GAAGC) (null)
+((2,3) [] [] [] [(2,2)] AAGCCC) (null)
+((1,1) [(1,3)] [] [] [] AATAGA) (null)
+((1,3) [(2,1),(1,4)] [] [] [(1,1)] TAGAA) (null)
+((1,4) [(2,2)] [] [] [(1,3)] AGAAG) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble.txt.svg b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble.txt.svg
new file mode 100644
index 0000000..550660b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble.txt.svg
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: small_bubble_txt Pages: 1 -->
+<svg width="644pt" height="321pt"
+ viewBox="0.00 0.00 644.00 321.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 317)">
+<title>small_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-317 641,-317 641,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="274,-121 274,-209 628,-209 628,-121 274,-121"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="40" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="43" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TCTATT</text>
+</g>
+<!-- 1,3 -->
+<g id="node16" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="187.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 1,1->1,3 -->
+<g id="edge25" class="edge"><title>1,1->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 1,3->1,1 -->
+<g id="edge31" class="edge"><title>1,3->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,4 -->
+<g id="node17" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="307.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="311" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge29" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 2,1 -->
+<g id="node19" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-157 303,-171 348,-171 348,-157 303,-157"/>
+<text text-anchor="start" x="307.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-143 303,-157 348,-157 348,-143 303,-143"/>
+<text text-anchor="start" x="311" y="-147.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->2,1 -->
+<g id="edge27" class="edge"><title>1,3->2,1</title>
+<path fill="none" stroke="#dd1e2f" d="M234.345,-237.712C249.456,-227.157 264,-217 264,-217 264,-217 274.622,-207.945 287.002,-197.392"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="289.518,-199.846 294.857,-190.695 284.977,-194.519 289.518,-199.846"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge35" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 2,2 -->
+<g id="node20" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-165" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-157 427,-171 472,-171 472,-157 427,-157"/>
+<text text-anchor="start" x="431.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">GAAGC</text>
+<polygon fill="#218559" stroke="#218559" points="427,-143 427,-157 472,-157 472,-143 427,-143"/>
+<text text-anchor="start" x="434" y="-147.667" font-family="Times Roman,serif" font-size="10.00">GCTTC</text>
+</g>
+<!-- 1,4->2,2 -->
+<g id="edge33" class="edge"><title>1,4->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M361.282,-241.419C375.287,-233.861 388,-227 388,-227 388,-227 400.484,-214.311 414.157,-200.414"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="416.837,-202.681 421.356,-193.098 411.847,-197.771 416.837,-202.681"/>
+</g>
+<!-- 2,1->1,3 -->
+<g id="edge15" class="edge"><title>2,1->1,3</title>
+<path fill="none" stroke="#218559" d="M293.015,-189.762C277.051,-202.122 257.587,-217.19 240.68,-230.28"/>
+<polygon fill="#218559" stroke="#218559" points="238.376,-227.637 232.611,-236.527 242.661,-233.173 238.376,-227.637"/>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge13" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-158.562C376.601,-158.258 386.531,-158.176 396.159,-158.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-161.822 406.443,-158.554 396.527,-154.823 396.364,-161.822"/>
+</g>
+<!-- 2,2->1,4 -->
+<g id="edge19" class="edge"><title>2,2->1,4</title>
+<path fill="none" stroke="#218559" d="M417.015,-189.762C401.051,-202.122 381.587,-217.19 364.68,-230.28"/>
+<polygon fill="#218559" stroke="#218559" points="362.376,-227.637 356.611,-236.527 366.661,-233.173 362.376,-227.637"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge21" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-171.446C397.158,-171.745 387.225,-171.824 377.602,-171.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-168.175 367.327,-171.438 377.242,-175.173 377.407,-168.175"/>
+</g>
+<!-- 2,3 -->
+<g id="node21" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="575" cy="-165" rx="44.0472" ry="36.0624"/>
+<text text-anchor="start" x="555.5" y="-176.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="552,-157 552,-171 599,-171 599,-157 552,-157"/>
+<text text-anchor="start" x="554.5" y="-161.667" font-family="Times Roman,serif" font-size="10.00">AAGCCC</text>
+<polygon fill="#218559" stroke="#218559" points="552,-143 552,-157 599,-157 599,-143 552,-143"/>
+<text text-anchor="start" x="555.5" y="-147.667" font-family="Times Roman,serif" font-size="10.00">GGGCTT</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge17" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.658,-158.573C501.09,-158.263 511.203,-158.176 521.018,-158.312"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="521.023,-161.813 531.097,-158.534 521.177,-154.814 521.023,-161.813"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge23" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M531.097,-171.466C521.607,-171.756 511.479,-171.824 501.692,-171.669"/>
+<polygon fill="#218559" stroke="#218559" points="501.739,-168.169 491.658,-171.427 501.571,-175.167 501.739,-168.169"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/.part-0.crc
new file mode 100644
index 0000000..fc426bc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/.part-1.crc
new file mode 100644
index 0000000..611cf9d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/part-0 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/part-0
new file mode 100755
index 0000000..de5dd64
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/part-1 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/part-1
new file mode 100755
index 0000000..d84c1d2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/small_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble.txt b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble.txt
new file mode 100644
index 0000000..5fde720
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble.txt
@@ -0,0 +1,9 @@
+((2,1) [(3,1),(2,2)] [] [] [(1,1)] ATAGA) (null)
+((2,2) [(2,3)] [] [] [(2,1)] TAGAC) (null)
+((2,3) [(2,4)] [] [] [(2,2)] AGACT) (null)
+((2,4) [(3,4)] [] [] [(2,3)] GACTA) (null)
+((1,1) [(2,1),(1,2)] [] [] [] AATAG) (null)
+((1,2) [] [] [] [(1,1)] ATAGAAG) (null)
+((3,1) [(3,3)] [] [] [(2,1)] TAGACT) (null)
+((3,3) [(3,4)] [] [] [(3,1)] GACTA) (null)
+((3,4) [] [] [] [(2,4),(3,3)] ACTAC) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble.txt.svg b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble.txt.svg
new file mode 100644
index 0000000..1ae4c53
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble.txt.svg
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: tip_and_bubble_txt Pages: 1 -->
+<svg width="650pt" height="417pt"
+ viewBox="0.00 0.00 650.00 417.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 413)">
+<title>tip_and_bubble_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-413 647,-413 647,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 216,-209 216,-8 49,-8"/>
+<text text-anchor="middle" x="132.5" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-313 8,-401 262,-401 262,-313 8,-313"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="284,-109 284,-197 634,-197 634,-109 284,-109"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="155,-217 155,-305 634,-305 634,-217 155,-217"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="206" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.078,-157C75.5476,-157 161.628,-157 193.842,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="194.198,-160.5 204.198,-157 194.198,-153.5 194.198,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="206" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.078,-116C75.5476,-116 161.628,-116 193.842,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="194.198,-119.5 204.198,-116 194.198,-112.5 194.198,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="206" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.078,-75C75.5476,-75 161.628,-75 193.842,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="194.198,-78.5001 204.198,-75 194.198,-71.5001 194.198,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="206" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.078,-34C75.5476,-34 161.628,-34 193.842,-34"/>
+<polygon fill="#218559" stroke="#218559" points="194.198,-37.5001 204.198,-34 194.198,-30.5001 194.198,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-349 37,-363 82,-363 82,-349 37,-349"/>
+<text text-anchor="start" x="43.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">AATAG</text>
+<polygon fill="#218559" stroke="#218559" points="37,-335 37,-349 82,-349 82,-335 37,-335"/>
+<text text-anchor="start" x="45.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">CTATT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="206" cy="-357" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="186.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="181,-349 181,-363 232,-363 232,-349 181,-349"/>
+<text text-anchor="start" x="183.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">ATAGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="181,-335 181,-349 232,-349 232,-335 181,-335"/>
+<text text-anchor="start" x="187" y="-339.667" font-family="Times Roman,serif" font-size="10.00">CTTCTAT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge34" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.518,-350.814C116.334,-350.242 133.206,-350.105 149.005,-350.404"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="149.114,-353.907 159.199,-350.663 149.292,-346.91 149.114,-353.907"/>
+</g>
+<!-- 2,1 -->
+<g id="node22" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="206" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="186.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="184,-253 184,-267 229,-267 229,-253 184,-253"/>
+<text text-anchor="start" x="190.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="184,-239 184,-253 229,-253 229,-239 184,-239"/>
+<text text-anchor="start" x="192.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TCTAT</text>
+</g>
+<!-- 1,1->2,1 -->
+<g id="edge32" class="edge"><title>1,1->2,1</title>
+<path fill="none" stroke="#dd1e2f" d="M95.2356,-337.316C116.802,-325.601 140,-313 140,-313 140,-313 152.492,-303.158 166.607,-292.037"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="168.857,-294.72 174.546,-285.782 164.525,-289.221 168.857,-294.72"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge36" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M159.199,-363.337C144.021,-363.827 127.084,-363.881 111.518,-363.499"/>
+<polygon fill="#218559" stroke="#218559" points="111.623,-360.001 101.518,-363.186 111.404,-366.998 111.623,-360.001"/>
+</g>
+<!-- 3,1 -->
+<g id="node18" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="335" cy="-153" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="315.5" y="-164.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="313,-145 313,-159 358,-159 358,-145 313,-145"/>
+<text text-anchor="start" x="316.5" y="-149.667" font-family="Times Roman,serif" font-size="10.00">TAGACT</text>
+<polygon fill="#218559" stroke="#218559" points="313,-131 313,-145 358,-145 358,-131 313,-131"/>
+<text text-anchor="start" x="317" y="-135.667" font-family="Times Roman,serif" font-size="10.00">AGTCTA</text>
+</g>
+<!-- 3,3 -->
+<g id="node19" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="459" cy="-153" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="439.5" y="-164.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="437,-145 437,-159 482,-159 482,-145 437,-145"/>
+<text text-anchor="start" x="443" y="-149.667" font-family="Times Roman,serif" font-size="10.00">GACTA</text>
+<polygon fill="#218559" stroke="#218559" points="437,-131 437,-145 482,-145 482,-131 437,-131"/>
+<text text-anchor="start" x="444.5" y="-135.667" font-family="Times Roman,serif" font-size="10.00">TAGTC</text>
+</g>
+<!-- 3,1->3,3 -->
+<g id="edge38" class="edge"><title>3,1->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M377.327,-146.562C386.601,-146.258 396.531,-146.176 406.159,-146.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="406.364,-149.822 416.443,-146.554 406.527,-142.823 406.364,-149.822"/>
+</g>
+<!-- 3,1->2,1 -->
+<g id="edge40" class="edge"><title>3,1->2,1</title>
+<path fill="none" stroke="#218559" d="M307.356,-180.644C291.216,-196.784 274,-214 274,-214 274,-214 261.746,-222.469 247.643,-232.218"/>
+<polygon fill="#218559" stroke="#218559" points="245.439,-229.486 239.203,-238.051 249.42,-235.244 245.439,-229.486"/>
+</g>
+<!-- 3,3->3,1 -->
+<g id="edge44" class="edge"><title>3,3->3,1</title>
+<path fill="none" stroke="#218559" d="M416.443,-159.446C407.158,-159.745 397.225,-159.824 387.602,-159.681"/>
+<polygon fill="#218559" stroke="#218559" points="387.407,-156.175 377.327,-159.438 387.242,-163.173 387.407,-156.175"/>
+</g>
+<!-- 3,4 -->
+<g id="node20" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="583" cy="-153" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="563.5" y="-164.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="561,-145 561,-159 606,-159 606,-145 561,-145"/>
+<text text-anchor="start" x="567.5" y="-149.667" font-family="Times Roman,serif" font-size="10.00">ACTAC</text>
+<polygon fill="#218559" stroke="#218559" points="561,-131 561,-145 606,-145 606,-131 561,-131"/>
+<text text-anchor="start" x="568" y="-135.667" font-family="Times Roman,serif" font-size="10.00">GTAGT</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge42" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M501.327,-146.562C510.601,-146.258 520.531,-146.176 530.159,-146.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="530.364,-149.822 540.443,-146.554 530.527,-142.823 530.364,-149.822"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge48" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M540.443,-159.446C531.158,-159.745 521.225,-159.824 511.602,-159.681"/>
+<polygon fill="#218559" stroke="#218559" points="511.407,-156.175 501.327,-159.438 511.242,-163.173 511.407,-156.175"/>
+</g>
+<!-- 2,4 -->
+<g id="node25" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="583" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="563.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="561,-253 561,-267 606,-267 606,-253 561,-253"/>
+<text text-anchor="start" x="567" y="-257.667" font-family="Times Roman,serif" font-size="10.00">GACTA</text>
+<polygon fill="#218559" stroke="#218559" points="561,-239 561,-253 606,-253 606,-239 561,-239"/>
+<text text-anchor="start" x="568.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TAGTC</text>
+</g>
+<!-- 3,4->2,4 -->
+<g id="edge46" class="edge"><title>3,4->2,4</title>
+<path fill="none" stroke="#218559" d="M583,-188.897C583,-188.965 583,-189 583,-189 583,-189 583,-204.137 583,-214.808"/>
+<polygon fill="#218559" stroke="#218559" points="579.5,-215.103 583,-225.103 586.5,-215.103 579.5,-215.103"/>
+</g>
+<!-- 2,1->1,1 -->
+<g id="edge18" class="edge"><title>2,1->1,1</title>
+<path fill="none" stroke="#218559" d="M171.021,-282.15C147.211,-296.547 120,-313 120,-313 120,-313 111.029,-319.471 99.9682,-327.449"/>
+<polygon fill="#218559" stroke="#218559" points="97.7057,-324.766 91.643,-333.454 101.801,-330.443 97.7057,-324.766"/>
+</g>
+<!-- 2,1->3,1 -->
+<g id="edge14" class="edge"><title>2,1->3,1</title>
+<path fill="none" stroke="#dd1e2f" d="M236.571,-235.406C254.514,-220.384 277.353,-201.262 296.514,-185.221"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="298.78,-187.888 304.201,-178.785 294.287,-182.521 298.78,-187.888"/>
+</g>
+<!-- 2,2 -->
+<g id="node23" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="335" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="315.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="313,-253 313,-267 358,-267 358,-253 313,-253"/>
+<text text-anchor="start" x="319.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TAGAC</text>
+<polygon fill="#218559" stroke="#218559" points="313,-239 313,-253 358,-253 358,-239 313,-239"/>
+<text text-anchor="start" x="320.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">GTCTA</text>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge16" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M248.597,-254.609C259.385,-254.242 271.101,-254.157 282.322,-254.352"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="282.362,-257.854 292.448,-254.61 282.54,-250.856 282.362,-257.854"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge22" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M292.448,-267.39C281.662,-267.757 269.947,-267.843 258.724,-267.649"/>
+<polygon fill="#218559" stroke="#218559" points="258.683,-264.147 248.597,-267.391 258.505,-271.145 258.683,-264.147"/>
+</g>
+<!-- 2,3 -->
+<g id="node24" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="459" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="439.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="437,-253 437,-267 482,-267 482,-253 437,-253"/>
+<text text-anchor="start" x="443" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AGACT</text>
+<polygon fill="#218559" stroke="#218559" points="437,-239 437,-253 482,-253 482,-239 437,-239"/>
+<text text-anchor="start" x="444" y="-243.667" font-family="Times Roman,serif" font-size="10.00">AGTCT</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge20" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M377.327,-254.562C386.601,-254.258 396.531,-254.176 406.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="406.364,-257.822 416.443,-254.554 406.527,-250.823 406.364,-257.822"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge26" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M416.443,-267.446C407.158,-267.745 397.225,-267.824 387.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="387.407,-264.175 377.327,-267.438 387.242,-271.173 387.407,-264.175"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge24" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M501.327,-254.562C510.601,-254.258 520.531,-254.176 530.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="530.364,-257.822 540.443,-254.554 530.527,-250.823 530.364,-257.822"/>
+</g>
+<!-- 2,4->3,4 -->
+<g id="edge28" class="edge"><title>2,4->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M583,-225.103C583,-225.035 583,-225 583,-225 583,-225 583,-209.863 583,-199.192"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="586.5,-198.897 583,-188.897 579.5,-198.897 586.5,-198.897"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge30" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M540.443,-267.446C531.158,-267.745 521.225,-267.824 511.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="511.407,-264.175 501.327,-267.438 511.242,-271.173 511.407,-264.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/.part-0.crc
new file mode 100644
index 0000000..3b5cec2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/.part-1.crc
new file mode 100644
index 0000000..6621cf4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/part-0 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/part-0
new file mode 100755
index 0000000..a6a5e83
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/part-1 b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/part-1
new file mode 100755
index 0000000..a65fe7e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/bubblemerge/tip_and_bubble/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread.txt b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread.txt
new file mode 100644
index 0000000..7a3e64f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread.txt
@@ -0,0 +1,4 @@
+((1,1) [(1,2)] [] [] [] AATAG) (null)
+((1,2) [(1,3)] [] [] [(1,1)] ATAGA) (null)
+((1,3) [(1,4)] [] [] [(1,2)] TAGAA) (null)
+((1,4) [] [] [] [(1,3)] AGAAG) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread.txt.svg b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread.txt.svg
new file mode 100644
index 0000000..efaf9e1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread.txt.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: singleread_txt Pages: 1 -->
+<svg width="516pt" height="321pt"
+ viewBox="0.00 0.00 516.00 321.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 317)">
+<title>singleread_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-317 513,-317 513,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 500,-305 500,-217 8,-217"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="43.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AATAG</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="45.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CTATT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="185.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ATAGA</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="187.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TCTAT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge12" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge16" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="309" y="-257.667" font-family="Times Roman,serif" font-size="10.00">TAGAA</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="311.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TTCTA</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge14" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge20" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+<!-- 1,4 -->
+<g id="node18" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-253 427,-267 472,-267 472,-253 427,-253"/>
+<text text-anchor="start" x="431.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AGAAG</text>
+<polygon fill="#218559" stroke="#218559" points="427,-239 427,-253 472,-253 472,-239 427,-239"/>
+<text text-anchor="start" x="435" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CTTCT</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge18" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-254.562C376.601,-254.258 386.531,-254.176 396.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-257.822 406.443,-254.554 396.527,-250.823 396.364,-257.822"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge22" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M406.443,-267.446C397.158,-267.745 387.225,-267.824 377.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-264.175 367.327,-267.438 377.242,-271.173 377.407,-264.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/.part-0.crc
new file mode 100644
index 0000000..b972cba
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/.part-1.crc
new file mode 100644
index 0000000..23505c8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/part-0 b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/part-0
new file mode 100755
index 0000000..39d79bc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/part-1 b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/part-1
new file mode 100755
index 0000000..e49fcdd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/pathmerge/singleread/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1.txt b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1.txt
new file mode 100644
index 0000000..bdeb586
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1.txt
@@ -0,0 +1,147 @@
+((2,1) [(2,2)] [] [] [] CCTCG) (null)
+((2,2) [(2,3)] [(1,4)] [] [(2,1)] CTCGC) (null)
+((2,3) [(2,4)] [] [] [(2,2)] TCGCA) (null)
+((2,4) [] [(1,2)] [] [(2,3)] CGCAC) (null)
+((4,1) [(4,2)] [] [] [] GAGGG) (null)
+((4,2) [(4,3)] [(5,4)] [] [(4,1)] AGGGT) (null)
+((4,3) [(4,4)] [] [] [(3,4),(4,2)] GGGTT) (null)
+((4,4) [] [(5,2)] [] [(4,3)] GGTTG) (null)
+((6,1) [(6,2)] [] [(5,3)] [] GTTGC) (null)
+((6,2) [(6,3)] [(7,4)] [] [(6,1)] TTGCT) (null)
+((6,3) [(6,4)] [] [(5,1)] [(6,2)] TGCTG) (null)
+((6,4) [] [(7,2)] [] [(6,3)] GCTGA) (null)
+((8,1) [(24,1),(8,2)] [] [(7,3)] [] CTGAA) (null)
+((8,2) [(8,3)] [(9,4)] [] [(8,1)] TGAAA) (null)
+((8,3) [(8,4)] [] [(7,1)] [(19,4),(8,2)] GAAAT) (null)
+((8,4) [] [(9,2)] [] [(8,3)] AAATC) (null)
+((10,1) [(10,2)] [] [] [(11,2)] GGCAG) (null)
+((10,2) [(9,1),(10,3)] [] [] [(10,1)] GCAGA) (null)
+((10,3) [(10,4)] [] [] [(11,4),(10,2)] CAGAT) (null)
+((10,4) [(9,3)] [] [] [(10,3)] AGATT) (null)
+((12,1) [(12,2)] [] [] [(13,2)] CTCTG) (null)
+((12,2) [(11,1),(12,3)] [] [] [(12,1)] TCTGG) (null)
+((12,3) [(12,4)] [] [] [(13,4),(12,2)] CTGGC) (null)
+((12,4) [(11,3)] [] [] [(12,3)] TGGCA) (null)
+((14,1) [(14,2)] [] [] [(15,2)] GCATC) (null)
+((14,2) [(13,1),(14,3)] [] [] [(14,1)] CATCT) (null)
+((14,3) [(14,4)] [] [] [(15,4),(14,2)] ATCTC) (null)
+((14,4) [(13,3)] [] [] [(14,3)] TCTCT) (null)
+((16,1) [(16,2)] [] [] [(17,2)] AACGG) (null)
+((16,2) [(15,1),(16,3)] [] [] [(16,1)] ACGGC) (null)
+((16,3) [(16,4)] [] [] [(17,4),(16,2)] CGGCA) (null)
+((16,4) [(15,3)] [] [] [(16,3)] GGCAT) (null)
+((18,1) [(23,1),(18,2)] [] [(17,3)] [] CGTTT) (null)
+((18,2) [(7,1),(18,3)] [(19,4)] [] [(18,1)] GTTTC) (null)
+((18,3) [(18,4)] [] [(17,1)] [(18,2)] TTTCA) (null)
+((18,4) [] [(19,2)] [(24,1)] [(18,3)] TTCAA) (null)
+((20,1) [(20,2)] [] [(19,3)] [] TCAAT) (null)
+((20,2) [(21,1),(20,3)] [] [] [(20,1)] CAATA) (null)
+((20,3) [(20,4)] [] [(19,1)] [(20,2)] AATAC) (null)
+((20,4) [(21,3)] [] [] [(20,3)] ATACG) (null)
+((22,1) [(22,2)] [] [] [(28,1),(27,3),(21,2)] TACGT) (null)
+((22,2) [(22,3)] [(23,4)] [] [(27,4),(22,1)] ACGTG) (null)
+((22,3) [(22,4)] [] [] [(21,4),(22,2)] CGTGA) (null)
+((22,4) [] [(23,2)] [] [(22,3)] GTGAA) (null)
+((24,1) [(17,1),(24,2)] [] [(23,3),(18,4),(7,2)] [(8,1),(19,3)] TGAAA) (null)
+((24,2) [(25,1),(24,3)] [] [(7,1)] [(19,4),(24,1)] GAAAC) (null)
+((24,3) [(24,4)] [] [(23,1)] [(24,2)] AAACT) (null)
+((24,4) [(25,3)] [] [] [(24,3)] AACTA) (null)
+((26,1) [(26,2)] [] [(27,3)] [] GTAAT) (null)
+((26,2) [(26,3)] [(25,4)] [] [(26,1)] TAATA) (null)
+((26,3) [(26,4)] [] [(27,1)] [(26,2)] AATAG) (null)
+((26,4) [] [(25,2)] [] [(26,3)] ATAGT) (null)
+((28,1) [(22,1),(28,2)] [] [] [(27,2)] TTACG) (null)
+((28,2) [(28,3)] [(29,4)] [] [(28,1)] TACGT) (null)
+((28,3) [(28,4)] [] [] [(27,4),(28,2)] ACGTC) (null)
+((28,4) [(31,3)] [(29,2)] [] [(28,3)] CGTCA) (null)
+((30,1) [(30,2)] [] [(29,3)] [(31,2)] GTCAT) (null)
+((30,2) [(29,1),(30,3)] [(31,4)] [] [(30,1)] TCATG) (null)
+((30,3) [(30,4)] [] [(29,1)] [(31,4),(30,2)] CATGA) (null)
+((30,4) [(29,3)] [(31,2)] [] [(30,3)] ATGAC) (null)
+((32,1) [(32,2)] [] [(33,3),(35,3)] [] AAGCG) (null)
+((32,2) [(31,1),(32,3)] [] [] [(32,1)] AGCGT) (null)
+((32,3) [(32,4)] [] [] [(32,2)] GCGTC) (null)
+((32,4) [(31,3)] [(29,2)] [] [(32,3)] CGTCA) (null)
+((34,1) [(34,2)] [] [] [(33,2),(35,2)] GCTTA) (null)
+((34,2) [(34,3)] [(35,4),(33,4)] [] [(34,1)] CTTAA) (null)
+((34,3) [(34,4)] [] [] [(35,4),(33,4),(34,2)] TTAAG) (null)
+((34,4) [] [(33,2),(35,2)] [] [(34,3)] TAAGC) (null)
+((36,1) [(36,2)] [] [(33,3),(35,3)] [] AAGCG) (null)
+((36,2) [(36,3)] [(37,4)] [] [(36,1)] AGCGT) (null)
+((36,3) [(36,4)] [] [] [(36,2)] GCGTG) (null)
+((36,4) [] [(37,2)] [] [(36,3)] CGTGT) (null)
+((1,1) [(1,2)] [] [] [] TAGTG) (null)
+((1,2) [(1,3)] [(2,4)] [] [(1,1)] AGTGC) (null)
+((1,3) [(1,4)] [] [] [(1,2)] GTGCG) (null)
+((1,4) [] [(2,2)] [] [(1,3)] TGCGA) (null)
+((3,1) [(3,3)] [] [] [] GCTAGG) (null)
+((3,3) [(3,4)] [] [] [(3,1)] TAGGG) (null)
+((3,4) [(4,3)] [] [] [(3,3)] AGGGT) (null)
+((5,1) [(5,2)] [] [(6,3)] [] AGCAA) (null)
+((5,2) [(5,3)] [(4,4)] [] [(5,1)] GCAAC) (null)
+((5,3) [(5,4)] [] [(6,1)] [(5,2)] CAACC) (null)
+((5,4) [] [(4,2)] [] [(5,3)] AACCC) (null)
+((7,1) [(7,2)] [] [(8,3),(24,2)] [(18,2),(23,1)] TTTCA) (null)
+((7,2) [(7,3)] [(6,4)] [(24,1)] [(7,1)] TTCAG) (null)
+((7,3) [(7,4)] [] [(8,1)] [(7,2)] TCAGC) (null)
+((7,4) [] [(6,2)] [] [(7,3)] CAGCA) (null)
+((9,1) [(9,2)] [] [] [(10,2)] CAGAT) (null)
+((9,2) [(9,3)] [(8,4)] [] [(9,1)] AGATT) (null)
+((9,3) [(9,4)] [] [] [(10,4),(9,2)] GATTT) (null)
+((9,4) [] [(8,2)] [] [(9,3)] ATTTC) (null)
+((11,1) [(11,2)] [] [] [(12,2)] CTGGC) (null)
+((11,2) [(10,1),(11,3)] [] [] [(11,1)] TGGCA) (null)
+((11,3) [(11,4)] [] [] [(12,4),(11,2)] GGCAG) (null)
+((11,4) [(10,3)] [] [] [(11,3)] GCAGA) (null)
+((13,1) [(13,2)] [] [] [(14,2)] ATCTC) (null)
+((13,2) [(12,1),(13,3)] [] [] [(13,1)] TCTCT) (null)
+((13,3) [(13,4)] [] [] [(14,4),(13,2)] CTCTG) (null)
+((13,4) [(12,3)] [] [] [(13,3)] TCTGG) (null)
+((15,1) [(15,2)] [] [] [(16,2)] CGGCA) (null)
+((15,2) [(14,1),(15,3)] [] [] [(15,1)] GGCAT) (null)
+((15,3) [(15,4)] [] [] [(16,4),(15,2)] GCATC) (null)
+((15,4) [(14,3)] [] [] [(15,3)] CATCT) (null)
+((17,1) [(17,2)] [] [(23,2),(18,3)] [(24,1)] GAAAC) (null)
+((17,2) [(16,1),(17,3)] [] [(23,1)] [(17,1)] AAACG) (null)
+((17,3) [(17,4)] [] [(18,1)] [(17,2)] AACGG) (null)
+((17,4) [(16,3)] [] [] [(17,3)] ACGGC) (null)
+((19,1) [(19,2)] [] [(20,3)] [] TATTG) (null)
+((19,2) [(19,3)] [(18,4)] [] [(19,1)] ATTGA) (null)
+((19,3) [(24,1),(19,4)] [] [(20,1)] [(19,2)] TTGAA) (null)
+((19,4) [(8,3),(24,2)] [(18,2),(23,1)] [] [(19,3)] TGAAA) (null)
+((21,1) [(21,2)] [] [] [(20,2)] AATAC) (null)
+((21,2) [(22,1),(21,3)] [] [] [(21,1)] ATACG) (null)
+((21,3) [(21,4)] [] [] [(20,4),(21,2)] TACGT) (null)
+((21,4) [(22,3)] [] [] [(27,4),(21,3)] ACGTG) (null)
+((23,1) [(7,1),(23,2)] [(19,4)] [(24,3),(17,2)] [(18,1)] GTTTC) (null)
+((23,2) [(23,3)] [(22,4)] [(17,1)] [(23,1)] TTTCA) (null)
+((23,3) [(23,4)] [] [(24,1)] [(23,2)] TTCAC) (null)
+((23,4) [] [(22,2)] [] [(23,3)] TCACG) (null)
+((25,1) [(25,2)] [] [] [(24,2)] AAACT) (null)
+((25,2) [(25,3)] [(26,4)] [] [(25,1)] AACTA) (null)
+((25,3) [(25,4)] [] [] [(24,4),(25,2)] ACTAT) (null)
+((25,4) [] [(26,2)] [] [(25,3)] CTATT) (null)
+((27,1) [(27,2)] [] [(26,3)] [] TATTA) (null)
+((27,2) [(28,1),(27,3)] [] [] [(27,1)] ATTAC) (null)
+((27,3) [(22,1),(27,4)] [] [(26,1)] [(27,2)] TTACG) (null)
+((27,4) [(28,3),(21,4),(22,2)] [] [] [(27,3)] TACGT) (null)
+((29,1) [(29,2)] [] [(30,3)] [(30,2)] CATGA) (null)
+((29,2) [(29,3)] [(32,4),(28,4)] [] [(29,1)] ATGAC) (null)
+((29,3) [(29,4)] [] [(30,1)] [(30,4),(29,2)] TGACG) (null)
+((29,4) [] [(28,2)] [] [(29,3)] GACGT) (null)
+((31,1) [(31,2)] [] [] [(32,2)] GCGTC) (null)
+((31,2) [(30,1),(31,3)] [(30,4)] [] [(31,1)] CGTCA) (null)
+((31,3) [(31,4)] [] [] [(32,4),(28,4),(31,2)] GTCAT) (null)
+((31,4) [(30,3)] [(30,2)] [] [(31,3)] TCATG) (null)
+((33,1) [(33,2)] [] [] [] TCGCT) (null)
+((33,2) [(34,1),(33,3)] [(34,4)] [] [(33,1)] CGCTT) (null)
+((33,3) [(33,4)] [] [(36,1),(32,1)] [(33,2)] GCTTA) (null)
+((33,4) [(34,3)] [(34,2)] [] [(33,3)] CTTAA) (null)
+((35,1) [(35,2)] [] [] [] TCGCT) (null)
+((35,2) [(34,1),(35,3)] [(34,4)] [] [(35,1)] CGCTT) (null)
+((35,3) [(35,4)] [] [(36,1),(32,1)] [(35,2)] GCTTA) (null)
+((35,4) [(34,3)] [(34,2)] [] [(35,3)] CTTAA) (null)
+((37,1) [(37,2)] [] [] [] CCACA) (null)
+((37,2) [(37,3)] [(36,4)] [] [(37,1)] CACAC) (null)
+((37,3) [(37,4)] [] [] [(37,2)] ACACG) (null)
+((37,4) [] [(36,2)] [] [(37,3)] CACGC) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1.txt.svg b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1.txt.svg
new file mode 100644
index 0000000..655df86
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1.txt.svg
@@ -0,0 +1,3577 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: walk_random_seq1_txt Pages: 1 -->
+<svg width="1494pt" height="5501pt"
+ viewBox="0.00 0.00 1494.00 5501.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 5497)">
+<title>walk_random_seq1_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-5497 1491,-5497 1491,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="54,-1935 54,-2136 226,-2136 226,-1935 54,-1935"/>
+<text text-anchor="middle" x="140" y="-2119.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_24</title>
+<polygon fill="none" stroke="black" points="428,-5076 428,-5164 942,-5164 942,-5076 428,-5076"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_25</title>
+<polygon fill="none" stroke="black" points="562,-1126 562,-1214 1076,-1214 1076,-1126 562,-1126"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_26</title>
+<polygon fill="none" stroke="black" points="428,-2358 428,-2446 942,-2446 942,-2358 428,-2358"/>
+</g>
+<g id="graph6" class="cluster"><title>cluster_27</title>
+<polygon fill="none" stroke="black" points="294,-2792 294,-2880 808,-2880 808,-2792 294,-2792"/>
+</g>
+<g id="graph7" class="cluster"><title>cluster_20</title>
+<polygon fill="none" stroke="black" points="160,-4070 160,-4158 674,-4158 674,-4070 160,-4070"/>
+</g>
+<g id="graph8" class="cluster"><title>cluster_21</title>
+<polygon fill="none" stroke="black" points="428,-3605 428,-3693 942,-3693 942,-3605 428,-3605"/>
+</g>
+<g id="graph9" class="cluster"><title>cluster_22</title>
+<polygon fill="none" stroke="black" points="428,-3190 428,-3278 942,-3278 942,-3190 428,-3190"/>
+</g>
+<g id="graph10" class="cluster"><title>cluster_23</title>
+<polygon fill="none" stroke="black" points="294,-4681 294,-4769 808,-4769 808,-4681 294,-4681"/>
+</g>
+<g id="graph11" class="cluster"><title>cluster_28</title>
+<polygon fill="none" stroke="black" points="562,-2696 562,-2784 1076,-2784 1076,-2696 562,-2696"/>
+</g>
+<g id="graph12" class="cluster"><title>cluster_29</title>
+<polygon fill="none" stroke="black" points="696,-2262 696,-2350 1210,-2350 1210,-2262 696,-2262"/>
+</g>
+<g id="graph13" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="13,-5371 13,-5459 535,-5459 535,-5371 13,-5371"/>
+</g>
+<g id="graph14" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="700,-8 700,-96 1071,-96 1071,-8 700,-8"/>
+</g>
+<g id="graph15" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="165,-5275 165,-5363 669,-5363 669,-5275 165,-5275"/>
+</g>
+<g id="graph16" class="cluster"><title>cluster_5</title>
+<polygon fill="none" stroke="black" points="701,-2454 701,-2542 1205,-2542 1205,-2454 701,-2454"/>
+</g>
+<g id="graph17" class="cluster"><title>cluster_4</title>
+<polygon fill="none" stroke="black" points="835,-1400 835,-1488 1339,-1488 1339,-1400 835,-1400"/>
+</g>
+<g id="graph18" class="cluster"><title>cluster_7</title>
+<polygon fill="none" stroke="black" points="433,-4585 433,-4673 937,-4673 937,-4585 433,-4585"/>
+</g>
+<g id="graph19" class="cluster"><title>cluster_6</title>
+<polygon fill="none" stroke="black" points="567,-3087 567,-3175 1071,-3175 1071,-3087 567,-3087"/>
+</g>
+<g id="graph20" class="cluster"><title>cluster_9</title>
+<polygon fill="none" stroke="black" points="433,-3439 433,-3527 937,-3527 937,-3439 433,-3439"/>
+</g>
+<g id="graph21" class="cluster"><title>cluster_8</title>
+<polygon fill="none" stroke="black" points="299,-4980 299,-5068 803,-5068 803,-4980 299,-4980"/>
+</g>
+<g id="graph22" class="cluster"><title>cluster_11</title>
+<polygon fill="none" stroke="black" points="294,-616 294,-704 808,-704 808,-616 294,-616"/>
+</g>
+<g id="graph23" class="cluster"><title>cluster_10</title>
+<polygon fill="none" stroke="black" points="428,-2991 428,-3079 942,-3079 942,-2991 428,-2991"/>
+</g>
+<g id="graph24" class="cluster"><title>cluster_13</title>
+<polygon fill="none" stroke="black" points="294,-424 294,-512 808,-512 808,-424 294,-424"/>
+</g>
+<g id="graph25" class="cluster"><title>cluster_12</title>
+<polygon fill="none" stroke="black" points="294,-520 294,-608 808,-608 808,-520 294,-520"/>
+</g>
+<g id="graph26" class="cluster"><title>cluster_15</title>
+<polygon fill="none" stroke="black" points="294,-232 294,-320 808,-320 808,-232 294,-232"/>
+</g>
+<g id="graph27" class="cluster"><title>cluster_14</title>
+<polygon fill="none" stroke="black" points="294,-328 294,-416 808,-416 808,-328 294,-328"/>
+</g>
+<g id="graph28" class="cluster"><title>cluster_17</title>
+<polygon fill="none" stroke="black" points="294,-3904 294,-3992 808,-3992 808,-3904 294,-3904"/>
+</g>
+<g id="graph29" class="cluster"><title>cluster_16</title>
+<polygon fill="none" stroke="black" points="294,-104 294,-192 808,-192 808,-104 294,-104"/>
+</g>
+<g id="graph30" class="cluster"><title>cluster_19</title>
+<polygon fill="none" stroke="black" points="8,-5172 8,-5260 540,-5260 540,-5172 8,-5172"/>
+</g>
+<g id="graph31" class="cluster"><title>cluster_18</title>
+<polygon fill="none" stroke="black" points="160,-4419 160,-4507 674,-4507 674,-4419 160,-4419"/>
+</g>
+<g id="graph32" class="cluster"><title>cluster_31</title>
+<polygon fill="none" stroke="black" points="562,-1688 562,-1776 1076,-1776 1076,-1688 562,-1688"/>
+</g>
+<g id="graph33" class="cluster"><title>cluster_30</title>
+<polygon fill="none" stroke="black" points="696,-2096 696,-2184 1210,-2184 1210,-2096 696,-2096"/>
+</g>
+<g id="graph34" class="cluster"><title>cluster_37</title>
+<polygon fill="none" stroke="black" points="964,-616 964,-704 1478,-704 1478,-616 964,-616"/>
+</g>
+<g id="graph35" class="cluster"><title>cluster_36</title>
+<polygon fill="none" stroke="black" points="830,-1030 830,-1118 1344,-1118 1344,-1030 830,-1030"/>
+</g>
+<g id="graph36" class="cluster"><title>cluster_35</title>
+<polygon fill="none" stroke="black" points="428,-1592 428,-1680 942,-1680 942,-1592 428,-1592"/>
+</g>
+<g id="graph37" class="cluster"><title>cluster_34</title>
+<polygon fill="none" stroke="black" points="562,-712 562,-800 1076,-800 1076,-712 562,-712"/>
+</g>
+<g id="graph38" class="cluster"><title>cluster_33</title>
+<polygon fill="none" stroke="black" points="428,-1496 428,-1584 942,-1584 942,-1496 428,-1496"/>
+</g>
+<g id="graph39" class="cluster"><title>cluster_32</title>
+<polygon fill="none" stroke="black" points="562,-1930 562,-2018 1076,-2018 1076,-1930 562,-1930"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="64" cy="-2084" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="216" cy="-2084" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M66.1487,-2084C81.1775,-2084 170.918,-2084 203.873,-2084"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="204.136,-2087.5 214.136,-2084 204.136,-2080.5 204.136,-2087.5"/>
+<text text-anchor="middle" x="140" y="-2089.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="64" cy="-2043" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="216" cy="-2043" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M66.1487,-2043C81.1775,-2043 170.918,-2043 203.873,-2043"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="204.136,-2046.5 214.136,-2043 204.136,-2039.5 204.136,-2046.5"/>
+<text text-anchor="middle" x="140" y="-2048.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="64" cy="-2002" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="216" cy="-2002" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M66.1487,-2002C81.1775,-2002 170.918,-2002 203.873,-2002"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="204.136,-2005.5 214.136,-2002 204.136,-1998.5 204.136,-2005.5"/>
+<text text-anchor="middle" x="140" y="-2007.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="64" cy="-1961" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="216" cy="-1961" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M66.1487,-1961C81.1775,-1961 170.918,-1961 203.873,-1961"/>
+<polygon fill="#218559" stroke="#218559" points="204.136,-1964.5 214.136,-1961 204.136,-1957.5 204.136,-1964.5"/>
+<text text-anchor="middle" x="140" y="-1966.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 24,1 -->
+<g id="node15" class="node"><title>24,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5120" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-5131.17" font-family="Times Roman,serif" font-size="10.00">24,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-5112 459,-5126 510,-5126 510,-5112 459,-5112"/>
+<text text-anchor="start" x="467.5" y="-5116.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-5098 459,-5112 510,-5112 510,-5098 459,-5098"/>
+<text text-anchor="start" x="470" y="-5102.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+</g>
+<!-- 24,2 -->
+<g id="node16" class="node"><title>24,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-5120" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-5131.17" font-family="Times Roman,serif" font-size="10.00">24,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-5112 593,-5126 644,-5126 644,-5112 593,-5112"/>
+<text text-anchor="start" x="601" y="-5116.67" font-family="Times Roman,serif" font-size="10.00">GAAAC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-5098 593,-5112 644,-5112 644,-5098 593,-5098"/>
+<text text-anchor="start" x="604" y="-5102.67" font-family="Times Roman,serif" font-size="10.00">GTTTC</text>
+</g>
+<!-- 24,1->24,2 -->
+<g id="edge280" class="edge"><title>24,1->24,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-5113.53C540.501,-5113.25 550.748,-5113.18 560.703,-5113.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-5116.82 570.933,-5113.52 561.007,-5109.82 560.864,-5116.82"/>
+</g>
+<!-- 23,3 -->
+<g id="node52" class="node"><title>23,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-4725" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-4736.17" font-family="Times Roman,serif" font-size="10.00">23,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-4717 593,-4731 644,-4731 644,-4717 593,-4717"/>
+<text text-anchor="start" x="603.5" y="-4721.67" font-family="Times Roman,serif" font-size="10.00">TTCAC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-4703 593,-4717 644,-4717 644,-4703 593,-4703"/>
+<text text-anchor="start" x="601.5" y="-4707.67" font-family="Times Roman,serif" font-size="10.00">GTGAA</text>
+</g>
+<!-- 24,1->23,3 -->
+<g id="edge282" class="edge"><title>24,1->23,3</title>
+<path fill="none" stroke="#06a2cb" d="M515.6,-5092.91C528.303,-5082.03 540,-5072 540,-5072 540,-5072 586.676,-4864.35 607.814,-4770.32"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="611.241,-4771.03 610.019,-4760.5 604.411,-4769.49 611.241,-4771.03"/>
+</g>
+<!-- 7,2 -->
+<g id="node90" class="node"><title>7,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-4629" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-4640.17" font-family="Times Roman,serif" font-size="10.00">7,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-4621 596,-4635 641,-4635 641,-4621 596,-4621"/>
+<text text-anchor="start" x="603" y="-4625.67" font-family="Times Roman,serif" font-size="10.00">TTCAG</text>
+<polygon fill="#218559" stroke="#218559" points="596,-4607 596,-4621 641,-4621 641,-4607 596,-4607"/>
+<text text-anchor="start" x="601.5" y="-4611.67" font-family="Times Roman,serif" font-size="10.00">CTGAA</text>
+</g>
+<!-- 24,1->7,2 -->
+<g id="edge286" class="edge"><title>24,1->7,2</title>
+<path fill="none" stroke="#06a2cb" d="M515.6,-5092.91C528.303,-5082.03 540,-5072 540,-5072 540,-5072 552,-4898 552,-4898 552,-4898 562,-4677 562,-4677 562,-4677 569.944,-4670.19 579.849,-4661.7"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="582.391,-4664.13 587.705,-4654.97 577.835,-4658.82 582.391,-4664.13"/>
+</g>
+<!-- 8,1 -->
+<g id="node104" class="node"><title>8,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-5024" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="330.5" y="-5035.17" font-family="Times Roman,serif" font-size="10.00">8,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="328,-5016 328,-5030 373,-5030 373,-5016 328,-5016"/>
+<text text-anchor="start" x="333.5" y="-5020.67" font-family="Times Roman,serif" font-size="10.00">CTGAA</text>
+<polygon fill="#218559" stroke="#218559" points="328,-5002 328,-5016 373,-5016 373,-5002 328,-5002"/>
+<text text-anchor="start" x="335" y="-5006.67" font-family="Times Roman,serif" font-size="10.00">TTCAG</text>
+</g>
+<!-- 24,1->8,1 -->
+<g id="edge288" class="edge"><title>24,1->8,1</title>
+<path fill="none" stroke="#218559" d="M445.233,-5098.91C429.962,-5090.6 416,-5083 416,-5083 416,-5083 402.293,-5070.75 387.372,-5057.41"/>
+<polygon fill="#218559" stroke="#218559" points="389.313,-5054.45 379.525,-5050.39 384.648,-5059.67 389.313,-5054.45"/>
+</g>
+<!-- 17,1 -->
+<g id="node139" class="node"><title>17,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-3948" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-3959.17" font-family="Times Roman,serif" font-size="10.00">17,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-3940 325,-3954 376,-3954 376,-3940 325,-3940"/>
+<text text-anchor="start" x="333" y="-3944.67" font-family="Times Roman,serif" font-size="10.00">GAAAC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-3926 325,-3940 376,-3940 376,-3926 325,-3926"/>
+<text text-anchor="start" x="336" y="-3930.67" font-family="Times Roman,serif" font-size="10.00">GTTTC</text>
+</g>
+<!-- 24,1->17,1 -->
+<g id="edge278" class="edge"><title>24,1->17,1</title>
+<path fill="none" stroke="#dd1e2f" d="M452.4,-5092.91C439.697,-5082.03 428,-5072 428,-5072 428,-5072 418,-3850 418,-3850 418,-3850 416,-3850 416,-3850 416,-3850 395.53,-3880.4 377.39,-3907.33"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="374.294,-3905.66 371.611,-3915.91 380.1,-3909.57 374.294,-3905.66"/>
+</g>
+<!-- 19,3 -->
+<g id="node151" class="node"><title>19,3</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-5216" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-5227.17" font-family="Times Roman,serif" font-size="10.00">19,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-5208 325,-5222 376,-5222 376,-5208 325,-5208"/>
+<text text-anchor="start" x="334.5" y="-5212.67" font-family="Times Roman,serif" font-size="10.00">TTGAA</text>
+<polygon fill="#218559" stroke="#218559" points="325,-5194 325,-5208 376,-5208 376,-5194 325,-5194"/>
+<text text-anchor="start" x="335" y="-5198.67" font-family="Times Roman,serif" font-size="10.00">TTCAA</text>
+</g>
+<!-- 24,1->19,3 -->
+<g id="edge290" class="edge"><title>24,1->19,3</title>
+<path fill="none" stroke="#218559" d="M449.317,-5144.85C432.127,-5157.16 411.205,-5172.15 393.005,-5185.19"/>
+<polygon fill="#218559" stroke="#218559" points="390.948,-5182.36 384.857,-5191.03 395.025,-5188.05 390.948,-5182.36"/>
+</g>
+<!-- 18,4 -->
+<g id="node157" class="node"><title>18,4</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-4463" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-4474.17" font-family="Times Roman,serif" font-size="10.00">18,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-4455 593,-4469 644,-4469 644,-4455 593,-4455"/>
+<text text-anchor="start" x="603" y="-4459.67" font-family="Times Roman,serif" font-size="10.00">TTCAA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-4441 593,-4455 644,-4455 644,-4441 593,-4441"/>
+<text text-anchor="start" x="602.5" y="-4445.67" font-family="Times Roman,serif" font-size="10.00">TTGAA</text>
+</g>
+<!-- 24,1->18,4 -->
+<g id="edge284" class="edge"><title>24,1->18,4</title>
+<path fill="none" stroke="#06a2cb" d="M515.6,-5092.91C528.303,-5082.03 540,-5072 540,-5072 540,-5072 550,-4876 550,-4876 550,-4876 552,-4843 552,-4843 552,-4843 562,-4581 562,-4581 562,-4581 581.437,-4540.04 597.409,-4506.39"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="600.677,-4507.67 601.802,-4497.13 594.353,-4504.66 600.677,-4507.67"/>
+</g>
+<!-- 24,2->24,1 -->
+<g id="edge300" class="edge"><title>24,2->24,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-5126.48C561.29,-5126.75 551.041,-5126.82 541.091,-5126.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-5123.18 530.867,-5126.47 540.792,-5130.18 540.937,-5123.18"/>
+</g>
+<!-- 24,3 -->
+<g id="node17" class="node"><title>24,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-5120" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-5131.17" font-family="Times Roman,serif" font-size="10.00">24,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-5112 727,-5126 778,-5126 778,-5112 727,-5112"/>
+<text text-anchor="start" x="736" y="-5116.67" font-family="Times Roman,serif" font-size="10.00">AAACT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-5098 727,-5112 778,-5112 778,-5098 727,-5098"/>
+<text text-anchor="start" x="737.5" y="-5102.67" font-family="Times Roman,serif" font-size="10.00">AGTTT</text>
+</g>
+<!-- 24,2->24,3 -->
+<g id="edge294" class="edge"><title>24,2->24,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-5113.53C674.501,-5113.25 684.748,-5113.18 694.703,-5113.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-5116.82 704.933,-5113.52 695.007,-5109.82 694.864,-5116.82"/>
+</g>
+<!-- 25,1 -->
+<g id="node20" class="node"><title>25,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1170" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1181.17" font-family="Times Roman,serif" font-size="10.00">25,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1162 593,-1176 644,-1176 644,-1162 593,-1162"/>
+<text text-anchor="start" x="602" y="-1166.67" font-family="Times Roman,serif" font-size="10.00">AAACT</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1148 593,-1162 644,-1162 644,-1148 593,-1148"/>
+<text text-anchor="start" x="603.5" y="-1152.67" font-family="Times Roman,serif" font-size="10.00">AGTTT</text>
+</g>
+<!-- 24,2->25,1 -->
+<g id="edge292" class="edge"><title>24,2->25,1</title>
+<path fill="none" stroke="#dd1e2f" d="M586.07,-5092.84C568.813,-5078.15 551,-5063 551,-5063 551,-5063 551,-1501 551,-1501 551,-1501 590.35,-1306.6 608.737,-1215.76"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="612.213,-1216.23 610.766,-1205.74 605.352,-1214.84 612.213,-1216.23"/>
+</g>
+<!-- 7,1 -->
+<g id="node89" class="node"><title>7,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-4629" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-4640.17" font-family="Times Roman,serif" font-size="10.00">7,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-4621 462,-4635 507,-4635 507,-4621 462,-4621"/>
+<text text-anchor="start" x="470" y="-4625.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+<polygon fill="#218559" stroke="#218559" points="462,-4607 462,-4621 507,-4621 507,-4607 462,-4607"/>
+<text text-anchor="start" x="467.5" y="-4611.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+</g>
+<!-- 24,2->7,1 -->
+<g id="edge296" class="edge"><title>24,2->7,1</title>
+<path fill="none" stroke="#06a2cb" d="M586.4,-5092.91C573.697,-5082.03 562,-5072 562,-5072 562,-5072 552,-4365 552,-4365 552,-4365 550,-4365 550,-4365 550,-4365 540,-4579 540,-4579 540,-4579 531.629,-4586.47 521.36,-4595.64"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="518.768,-4593.26 513.64,-4602.54 523.43,-4598.49 518.768,-4593.26"/>
+</g>
+<!-- 19,4 -->
+<g id="node152" class="node"><title>19,4</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5216" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-5227.17" font-family="Times Roman,serif" font-size="10.00">19,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-5208 459,-5222 510,-5222 510,-5208 459,-5208"/>
+<text text-anchor="start" x="467.5" y="-5212.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-5194 459,-5208 510,-5208 510,-5194 459,-5194"/>
+<text text-anchor="start" x="470" y="-5198.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+</g>
+<!-- 24,2->19,4 -->
+<g id="edge298" class="edge"><title>24,2->19,4</title>
+<path fill="none" stroke="#218559" d="M599.965,-5153.61C580.424,-5190.03 552,-5243 552,-5243 552,-5243 550,-5243 550,-5243 550,-5243 544,-5240.55 535.618,-5237.12"/>
+<polygon fill="#218559" stroke="#218559" points="536.753,-5233.8 526.172,-5233.25 534.103,-5240.28 536.753,-5233.8"/>
+</g>
+<!-- 24,3->24,2 -->
+<g id="edge306" class="edge"><title>24,3->24,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-5126.48C695.29,-5126.75 685.041,-5126.82 675.091,-5126.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-5123.18 664.867,-5126.47 674.792,-5130.18 674.937,-5123.18"/>
+</g>
+<!-- 24,4 -->
+<g id="node18" class="node"><title>24,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-5120" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-5131.17" font-family="Times Roman,serif" font-size="10.00">24,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-5112 861,-5126 912,-5126 912,-5112 861,-5112"/>
+<text text-anchor="start" x="870.5" y="-5116.67" font-family="Times Roman,serif" font-size="10.00">AACTA</text>
+<polygon fill="#218559" stroke="#218559" points="861,-5098 861,-5112 912,-5112 912,-5098 861,-5098"/>
+<text text-anchor="start" x="872" y="-5102.67" font-family="Times Roman,serif" font-size="10.00">TAGTT</text>
+</g>
+<!-- 24,3->24,4 -->
+<g id="edge302" class="edge"><title>24,3->24,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-5113.53C808.501,-5113.25 818.748,-5113.18 828.703,-5113.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-5116.82 838.933,-5113.52 829.007,-5109.82 828.864,-5116.82"/>
+</g>
+<!-- 23,1 -->
+<g id="node50" class="node"><title>23,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-4725" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-4736.17" font-family="Times Roman,serif" font-size="10.00">23,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-4717 325,-4731 376,-4731 376,-4717 325,-4717"/>
+<text text-anchor="start" x="336" y="-4721.67" font-family="Times Roman,serif" font-size="10.00">GTTTC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-4703 325,-4717 376,-4717 376,-4703 325,-4703"/>
+<text text-anchor="start" x="333" y="-4707.67" font-family="Times Roman,serif" font-size="10.00">GAAAC</text>
+</g>
+<!-- 24,3->23,1 -->
+<g id="edge304" class="edge"><title>24,3->23,1</title>
+<path fill="none" stroke="#06a2cb" d="M720.4,-5092.91C707.697,-5082.03 696,-5072 696,-5072 696,-5072 674,-3900 674,-3900 674,-3900 562,-3900 562,-3900 562,-3900 540,-4026 540,-4026 540,-4026 428,-4066 428,-4066 428,-4066 418,-4240 418,-4240 418,-4240 398,-4511 398,-4511 398,-4511 374.399,-4616.22 360.296,-4679.1"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="356.808,-4678.66 358.034,-4689.18 363.638,-4680.19 356.808,-4678.66"/>
+</g>
+<!-- 24,4->24,3 -->
+<g id="edge310" class="edge"><title>24,4->24,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-5126.48C829.29,-5126.75 819.041,-5126.82 809.091,-5126.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-5123.18 798.867,-5126.47 808.792,-5130.18 808.937,-5123.18"/>
+</g>
+<!-- 25,3 -->
+<g id="node22" class="node"><title>25,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1170" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1181.17" font-family="Times Roman,serif" font-size="10.00">25,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1162 861,-1176 912,-1176 912,-1162 861,-1162"/>
+<text text-anchor="start" x="871.5" y="-1166.67" font-family="Times Roman,serif" font-size="10.00">ACTAT</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1148 861,-1162 912,-1162 912,-1148 861,-1148"/>
+<text text-anchor="start" x="871.5" y="-1152.67" font-family="Times Roman,serif" font-size="10.00">ATAGT</text>
+</g>
+<!-- 24,4->25,3 -->
+<g id="edge308" class="edge"><title>24,4->25,3</title>
+<path fill="none" stroke="#dd1e2f" d="M880.687,-5084.15C864.84,-4977.25 819,-4668 819,-4668 819,-4668 819,-1405 819,-1405 819,-1405 853.684,-1283.35 873.142,-1215.1"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="876.521,-1216.01 875.897,-1205.44 869.789,-1214.09 876.521,-1216.01"/>
+</g>
+<!-- 25,1->24,2 -->
+<g id="edge716" class="edge"><title>25,1->24,2</title>
+<path fill="none" stroke="#218559" d="M610.766,-1205.74C593.441,-1291.33 551,-1501 551,-1501 551,-1501 551,-5063 551,-5063 551,-5063 563.917,-5073.99 578.409,-5086.32"/>
+<polygon fill="#218559" stroke="#218559" points="576.185,-5089.02 586.07,-5092.84 580.721,-5083.69 576.185,-5089.02"/>
+</g>
+<!-- 25,2 -->
+<g id="node21" class="node"><title>25,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1170" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1181.17" font-family="Times Roman,serif" font-size="10.00">25,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1162 727,-1176 778,-1176 778,-1162 727,-1162"/>
+<text text-anchor="start" x="736.5" y="-1166.67" font-family="Times Roman,serif" font-size="10.00">AACTA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1148 727,-1162 778,-1162 778,-1148 727,-1148"/>
+<text text-anchor="start" x="738" y="-1152.67" font-family="Times Roman,serif" font-size="10.00">TAGTT</text>
+</g>
+<!-- 25,1->25,2 -->
+<g id="edge714" class="edge"><title>25,1->25,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1163.53C674.501,-1163.25 684.748,-1163.18 694.703,-1163.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1166.82 704.933,-1163.52 695.007,-1159.82 694.864,-1166.82"/>
+</g>
+<!-- 25,2->25,1 -->
+<g id="edge722" class="edge"><title>25,2->25,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-1176.48C695.29,-1176.75 685.041,-1176.82 675.091,-1176.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1173.18 664.867,-1176.47 674.792,-1180.18 674.937,-1173.18"/>
+</g>
+<!-- 25,2->25,3 -->
+<g id="edge718" class="edge"><title>25,2->25,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1163.53C808.501,-1163.25 818.748,-1163.18 828.703,-1163.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1166.82 838.933,-1163.52 829.007,-1159.82 828.864,-1166.82"/>
+</g>
+<!-- 26,4 -->
+<g id="node28" class="node"><title>26,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2402" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-2413.17" font-family="Times Roman,serif" font-size="10.00">26,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-2394 861,-2408 912,-2408 912,-2394 861,-2394"/>
+<text text-anchor="start" x="871.5" y="-2398.67" font-family="Times Roman,serif" font-size="10.00">ATAGT</text>
+<polygon fill="#218559" stroke="#218559" points="861,-2380 861,-2394 912,-2394 912,-2380 861,-2380"/>
+<text text-anchor="start" x="871.5" y="-2384.67" font-family="Times Roman,serif" font-size="10.00">ACTAT</text>
+</g>
+<!-- 25,2->26,4 -->
+<g id="edge720" class="edge"><title>25,2->26,4</title>
+<path fill="none" stroke="#ebb035" d="M758.261,-1206C772.874,-1290.02 808,-1492 808,-1492 808,-1492 820,-1894 820,-1894 820,-1894 830,-2354 830,-2354 830,-2354 837.283,-2360.24 846.596,-2368.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="844.529,-2371.06 854.4,-2374.91 849.085,-2365.75 844.529,-2371.06"/>
+</g>
+<!-- 25,3->24,4 -->
+<g id="edge726" class="edge"><title>25,3->24,4</title>
+<path fill="none" stroke="#218559" d="M875.897,-1205.44C857.18,-1271.09 819,-1405 819,-1405 819,-1405 819,-4668 819,-4668 819,-4668 862.193,-4959.39 879.219,-5074.25"/>
+<polygon fill="#218559" stroke="#218559" points="875.758,-5074.78 880.687,-5084.15 882.682,-5073.75 875.758,-5074.78"/>
+</g>
+<!-- 25,3->25,2 -->
+<g id="edge728" class="edge"><title>25,3->25,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-1176.48C829.29,-1176.75 819.041,-1176.82 809.091,-1176.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1173.18 798.867,-1176.47 808.792,-1180.18 808.937,-1173.18"/>
+</g>
+<!-- 25,4 -->
+<g id="node23" class="node"><title>25,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1170" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-1181.17" font-family="Times Roman,serif" font-size="10.00">25,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-1162 995,-1176 1046,-1176 1046,-1162 995,-1162"/>
+<text text-anchor="start" x="1006.5" y="-1166.67" font-family="Times Roman,serif" font-size="10.00">CTATT</text>
+<polygon fill="#218559" stroke="#218559" points="995,-1148 995,-1162 1046,-1162 1046,-1148 995,-1148"/>
+<text text-anchor="start" x="1004.5" y="-1152.67" font-family="Times Roman,serif" font-size="10.00">AATAG</text>
+</g>
+<!-- 25,3->25,4 -->
+<g id="edge724" class="edge"><title>25,3->25,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-1163.53C942.501,-1163.25 952.748,-1163.18 962.703,-1163.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-1166.82 972.933,-1163.52 963.007,-1159.82 962.864,-1166.82"/>
+</g>
+<!-- 25,4->25,3 -->
+<g id="edge732" class="edge"><title>25,4->25,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-1176.48C963.29,-1176.75 953.041,-1176.82 943.091,-1176.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-1173.18 932.867,-1176.47 942.792,-1180.18 942.937,-1173.18"/>
+</g>
+<!-- 26,2 -->
+<g id="node26" class="node"><title>26,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-2402" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-2413.17" font-family="Times Roman,serif" font-size="10.00">26,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-2394 593,-2408 644,-2408 644,-2394 593,-2394"/>
+<text text-anchor="start" x="604" y="-2398.67" font-family="Times Roman,serif" font-size="10.00">TAATA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-2380 593,-2394 644,-2394 644,-2380 593,-2380"/>
+<text text-anchor="start" x="605" y="-2384.67" font-family="Times Roman,serif" font-size="10.00">TATTA</text>
+</g>
+<!-- 25,4->26,2 -->
+<g id="edge730" class="edge"><title>25,4->26,2</title>
+<path fill="none" stroke="#ebb035" d="M1007.69,-1205.13C988.09,-1261.04 952,-1364 952,-1364 952,-1364 942,-1814 942,-1814 942,-1814 830,-1848 830,-1848 830,-1848 818,-1892 818,-1892 818,-1892 808,-2054 808,-2054 808,-2054 696,-2092 696,-2092 696,-2092 651.064,-2270.59 629.406,-2356.67"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="625.994,-2355.89 626.948,-2366.44 632.782,-2357.6 625.994,-2355.89"/>
+</g>
+<!-- 26,1 -->
+<g id="node25" class="node"><title>26,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-2402" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-2413.17" font-family="Times Roman,serif" font-size="10.00">26,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-2394 459,-2408 510,-2408 510,-2394 459,-2394"/>
+<text text-anchor="start" x="469.5" y="-2398.67" font-family="Times Roman,serif" font-size="10.00">GTAAT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-2380 459,-2394 510,-2394 510,-2380 459,-2380"/>
+<text text-anchor="start" x="470" y="-2384.67" font-family="Times Roman,serif" font-size="10.00">ATTAC</text>
+</g>
+<!-- 26,1->26,2 -->
+<g id="edge312" class="edge"><title>26,1->26,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-2395.53C540.501,-2395.25 550.748,-2395.18 560.703,-2395.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-2398.82 570.933,-2395.52 561.007,-2391.82 560.864,-2398.82"/>
+</g>
+<!-- 27,3 -->
+<g id="node32" class="node"><title>27,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-2836" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-2847.17" font-family="Times Roman,serif" font-size="10.00">27,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-2828 593,-2842 644,-2842 644,-2828 593,-2828"/>
+<text text-anchor="start" x="603" y="-2832.67" font-family="Times Roman,serif" font-size="10.00">TTACG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-2814 593,-2828 644,-2828 644,-2814 593,-2814"/>
+<text text-anchor="start" x="602" y="-2818.67" font-family="Times Roman,serif" font-size="10.00">CGTAA</text>
+</g>
+<!-- 26,1->27,3 -->
+<g id="edge314" class="edge"><title>26,1->27,3</title>
+<path fill="none" stroke="#06a2cb" d="M491.198,-2437.62C510.508,-2533.18 562,-2788 562,-2788 562,-2788 569.283,-2794.24 578.596,-2802.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="576.529,-2805.06 586.4,-2808.91 581.085,-2799.75 576.529,-2805.06"/>
+</g>
+<!-- 26,2->25,4 -->
+<g id="edge318" class="edge"><title>26,2->25,4</title>
+<path fill="none" stroke="#ebb035" d="M624.938,-2366.26C641.884,-2278.96 684,-2062 684,-2062 684,-2062 808,-2022 808,-2022 808,-2022 818,-1826 818,-1826 818,-1826 830,-1820 830,-1820 830,-1820 942,-1780 942,-1780 942,-1780 952,-1268 952,-1268 952,-1268 973.274,-1237.34 992.023,-1210.32"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="994.909,-1212.3 997.734,-1202.09 989.158,-1208.31 994.909,-1212.3"/>
+</g>
+<!-- 26,2->26,1 -->
+<g id="edge320" class="edge"><title>26,2->26,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-2408.48C561.29,-2408.75 551.041,-2408.82 541.091,-2408.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-2405.18 530.867,-2408.47 540.792,-2412.18 540.937,-2405.18"/>
+</g>
+<!-- 26,3 -->
+<g id="node27" class="node"><title>26,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2402" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2413.17" font-family="Times Roman,serif" font-size="10.00">26,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2394 727,-2408 778,-2408 778,-2394 727,-2394"/>
+<text text-anchor="start" x="736.5" y="-2398.67" font-family="Times Roman,serif" font-size="10.00">AATAG</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2380 727,-2394 778,-2394 778,-2380 727,-2380"/>
+<text text-anchor="start" x="738.5" y="-2384.67" font-family="Times Roman,serif" font-size="10.00">CTATT</text>
+</g>
+<!-- 26,2->26,3 -->
+<g id="edge316" class="edge"><title>26,2->26,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-2395.53C674.501,-2395.25 684.748,-2395.18 694.703,-2395.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-2398.82 704.933,-2395.52 695.007,-2391.82 694.864,-2398.82"/>
+</g>
+<!-- 26,3->26,2 -->
+<g id="edge326" class="edge"><title>26,3->26,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-2408.48C695.29,-2408.75 685.041,-2408.82 675.091,-2408.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-2405.18 664.867,-2408.47 674.792,-2412.18 674.937,-2405.18"/>
+</g>
+<!-- 26,3->26,4 -->
+<g id="edge322" class="edge"><title>26,3->26,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-2395.53C808.501,-2395.25 818.748,-2395.18 828.703,-2395.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-2398.82 838.933,-2395.52 829.007,-2391.82 828.864,-2398.82"/>
+</g>
+<!-- 27,1 -->
+<g id="node30" class="node"><title>27,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-2836" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-2847.17" font-family="Times Roman,serif" font-size="10.00">27,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-2828 325,-2842 376,-2842 376,-2828 325,-2828"/>
+<text text-anchor="start" x="337" y="-2832.67" font-family="Times Roman,serif" font-size="10.00">TATTA</text>
+<polygon fill="#218559" stroke="#218559" points="325,-2814 325,-2828 376,-2828 376,-2814 325,-2814"/>
+<text text-anchor="start" x="336" y="-2818.67" font-family="Times Roman,serif" font-size="10.00">TAATA</text>
+</g>
+<!-- 26,3->27,1 -->
+<g id="edge324" class="edge"><title>26,3->27,1</title>
+<path fill="none" stroke="#06a2cb" d="M720.4,-2429.09C707.697,-2439.97 696,-2450 696,-2450 696,-2450 686,-2566 686,-2566 686,-2566 480.412,-2731.2 390.866,-2803.16"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="388.432,-2800.63 382.829,-2809.62 392.816,-2806.08 388.432,-2800.63"/>
+</g>
+<!-- 26,4->25,2 -->
+<g id="edge328" class="edge"><title>26,4->25,2</title>
+<path fill="none" stroke="#ebb035" d="M854.4,-2374.91C841.697,-2364.03 830,-2354 830,-2354 830,-2354 808,-1492 808,-1492 808,-1492 775.499,-1305.12 760.017,-1216.1"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="763.423,-1215.25 758.261,-1206 756.526,-1216.45 763.423,-1215.25"/>
+</g>
+<!-- 26,4->26,3 -->
+<g id="edge330" class="edge"><title>26,4->26,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-2408.48C829.29,-2408.75 819.041,-2408.82 809.091,-2408.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-2405.18 798.867,-2408.47 808.792,-2412.18 808.937,-2405.18"/>
+</g>
+<!-- 27,1->26,3 -->
+<g id="edge736" class="edge"><title>27,1->26,3</title>
+<path fill="none" stroke="#06a2cb" d="M366.925,-2802.15C389.865,-2756.27 428,-2680 428,-2680 428,-2680 696,-2450 696,-2450 696,-2450 703.283,-2443.76 712.596,-2435.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="715.085,-2438.25 720.4,-2429.09 710.529,-2432.94 715.085,-2438.25"/>
+</g>
+<!-- 27,2 -->
+<g id="node31" class="node"><title>27,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-2836" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-2847.17" font-family="Times Roman,serif" font-size="10.00">27,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-2828 459,-2842 510,-2842 510,-2828 459,-2828"/>
+<text text-anchor="start" x="470" y="-2832.67" font-family="Times Roman,serif" font-size="10.00">ATTAC</text>
+<polygon fill="#218559" stroke="#218559" points="459,-2814 459,-2828 510,-2828 510,-2814 459,-2814"/>
+<text text-anchor="start" x="469.5" y="-2818.67" font-family="Times Roman,serif" font-size="10.00">GTAAT</text>
+</g>
+<!-- 27,1->27,2 -->
+<g id="edge734" class="edge"><title>27,1->27,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-2829.53C406.501,-2829.25 416.748,-2829.18 426.703,-2829.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-2832.82 436.933,-2829.52 427.007,-2825.82 426.864,-2832.82"/>
+</g>
+<!-- 27,2->27,1 -->
+<g id="edge742" class="edge"><title>27,2->27,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-2842.48C427.29,-2842.75 417.041,-2842.82 407.091,-2842.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-2839.18 396.867,-2842.47 406.792,-2846.18 406.937,-2839.18"/>
+</g>
+<!-- 27,2->27,3 -->
+<g id="edge740" class="edge"><title>27,2->27,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-2829.53C540.501,-2829.25 550.748,-2829.18 560.703,-2829.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-2832.82 570.933,-2829.52 561.007,-2825.82 560.864,-2832.82"/>
+</g>
+<!-- 28,1 -->
+<g id="node55" class="node"><title>28,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-2740" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-2751.17" font-family="Times Roman,serif" font-size="10.00">28,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-2732 593,-2746 644,-2746 644,-2732 593,-2732"/>
+<text text-anchor="start" x="603" y="-2736.67" font-family="Times Roman,serif" font-size="10.00">TTACG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-2718 593,-2732 644,-2732 644,-2718 593,-2718"/>
+<text text-anchor="start" x="602" y="-2722.67" font-family="Times Roman,serif" font-size="10.00">CGTAA</text>
+</g>
+<!-- 27,2->28,1 -->
+<g id="edge738" class="edge"><title>27,2->28,1</title>
+<path fill="none" stroke="#dd1e2f" d="M523.949,-2816.03C538.751,-2808.62 552,-2802 552,-2802 552,-2802 562,-2788 562,-2788 562,-2788 569.283,-2781.76 578.596,-2773.78"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="581.085,-2776.25 586.4,-2767.09 576.529,-2770.94 581.085,-2776.25"/>
+</g>
+<!-- 27,3->26,1 -->
+<g id="edge748" class="edge"><title>27,3->26,1</title>
+<path fill="none" stroke="#06a2cb" d="M586.4,-2808.91C573.697,-2798.03 562,-2788 562,-2788 562,-2788 550,-2746 550,-2746 550,-2746 510.777,-2541.56 492.805,-2447.89"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="496.198,-2447 490.876,-2437.84 489.323,-2448.32 496.198,-2447"/>
+</g>
+<!-- 27,3->27,2 -->
+<g id="edge750" class="edge"><title>27,3->27,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-2842.48C561.29,-2842.75 551.041,-2842.82 541.091,-2842.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-2839.18 530.867,-2842.47 540.792,-2846.18 540.937,-2839.18"/>
+</g>
+<!-- 27,4 -->
+<g id="node33" class="node"><title>27,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2836" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2847.17" font-family="Times Roman,serif" font-size="10.00">27,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2828 727,-2842 778,-2842 778,-2828 727,-2828"/>
+<text text-anchor="start" x="737" y="-2832.67" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2814 727,-2828 778,-2828 778,-2814 727,-2814"/>
+<text text-anchor="start" x="736.5" y="-2818.67" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+</g>
+<!-- 27,3->27,4 -->
+<g id="edge746" class="edge"><title>27,3->27,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-2829.53C674.501,-2829.25 684.748,-2829.18 694.703,-2829.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-2832.82 704.933,-2829.52 695.007,-2825.82 694.864,-2832.82"/>
+</g>
+<!-- 22,1 -->
+<g id="node45" class="node"><title>22,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3234" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-3245.17" font-family="Times Roman,serif" font-size="10.00">22,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-3226 459,-3240 510,-3240 510,-3226 459,-3226"/>
+<text text-anchor="start" x="469" y="-3230.67" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-3212 459,-3226 510,-3226 510,-3212 459,-3212"/>
+<text text-anchor="start" x="468.5" y="-3216.67" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+</g>
+<!-- 27,3->22,1 -->
+<g id="edge744" class="edge"><title>27,3->22,1</title>
+<path fill="none" stroke="#dd1e2f" d="M605.012,-2871.02C588.469,-2915.63 562,-2987 562,-2987 562,-2987 540,-3083 540,-3083 540,-3083 517.026,-3144.95 500.508,-3189.49"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="497.184,-3188.38 496.988,-3198.98 503.747,-3190.82 497.184,-3188.38"/>
+</g>
+<!-- 27,4->27,3 -->
+<g id="edge758" class="edge"><title>27,4->27,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-2842.48C695.29,-2842.75 685.041,-2842.82 675.091,-2842.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-2839.18 664.867,-2842.47 674.792,-2846.18 674.937,-2839.18"/>
+</g>
+<!-- 21,4 -->
+<g id="node43" class="node"><title>21,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3649" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-3660.17" font-family="Times Roman,serif" font-size="10.00">21,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-3641 861,-3655 912,-3655 912,-3641 861,-3641"/>
+<text text-anchor="start" x="869.5" y="-3645.67" font-family="Times Roman,serif" font-size="10.00">ACGTG</text>
+<polygon fill="#218559" stroke="#218559" points="861,-3627 861,-3641 912,-3641 912,-3627 861,-3627"/>
+<text text-anchor="start" x="870" y="-3631.67" font-family="Times Roman,serif" font-size="10.00">CACGT</text>
+</g>
+<!-- 27,4->21,4 -->
+<g id="edge754" class="edge"><title>27,4->21,4</title>
+<path fill="none" stroke="#dd1e2f" d="M764.988,-2871.02C781.531,-2915.63 808,-2987 808,-2987 808,-2987 820,-3083 820,-3083 820,-3083 830,-3531 830,-3531 830,-3531 849.437,-3571.96 865.409,-3605.61"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="862.353,-3607.34 869.802,-3614.87 868.677,-3604.33 862.353,-3607.34"/>
+</g>
+<!-- 22,2 -->
+<g id="node46" class="node"><title>22,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3234" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-3245.17" font-family="Times Roman,serif" font-size="10.00">22,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-3226 593,-3240 644,-3240 644,-3226 593,-3226"/>
+<text text-anchor="start" x="601.5" y="-3230.67" font-family="Times Roman,serif" font-size="10.00">ACGTG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-3212 593,-3226 644,-3226 644,-3212 593,-3212"/>
+<text text-anchor="start" x="602" y="-3216.67" font-family="Times Roman,serif" font-size="10.00">CACGT</text>
+</g>
+<!-- 27,4->22,2 -->
+<g id="edge756" class="edge"><title>27,4->22,2</title>
+<path fill="none" stroke="#dd1e2f" d="M739.012,-2871.02C722.469,-2915.63 696,-2987 696,-2987 696,-2987 674,-3179 674,-3179 674,-3179 665.159,-3187.68 654.502,-3198.15"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="651.994,-3195.71 647.312,-3205.21 656.899,-3200.7 651.994,-3195.71"/>
+</g>
+<!-- 28,3 -->
+<g id="node57" class="node"><title>28,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2740" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-2751.17" font-family="Times Roman,serif" font-size="10.00">28,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-2732 861,-2746 912,-2746 912,-2732 861,-2732"/>
+<text text-anchor="start" x="870.5" y="-2736.67" font-family="Times Roman,serif" font-size="10.00">ACGTC</text>
+<polygon fill="#218559" stroke="#218559" points="861,-2718 861,-2732 912,-2732 912,-2718 861,-2718"/>
+<text text-anchor="start" x="869.5" y="-2722.67" font-family="Times Roman,serif" font-size="10.00">GACGT</text>
+</g>
+<!-- 27,4->28,3 -->
+<g id="edge752" class="edge"><title>27,4->28,3</title>
+<path fill="none" stroke="#dd1e2f" d="M790.767,-2814.91C806.038,-2806.6 820,-2799 820,-2799 820,-2799 832.918,-2787.45 847.324,-2774.57"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="849.81,-2777.05 854.933,-2767.77 845.145,-2771.83 849.81,-2777.05"/>
+</g>
+<!-- 20,1 -->
+<g id="node35" class="node"><title>20,1</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-4114" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="193.5" y="-4125.17" font-family="Times Roman,serif" font-size="10.00">20,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="191,-4106 191,-4120 242,-4120 242,-4106 191,-4106"/>
+<text text-anchor="start" x="201.5" y="-4110.67" font-family="Times Roman,serif" font-size="10.00">TCAAT</text>
+<polygon fill="#218559" stroke="#218559" points="191,-4092 191,-4106 242,-4106 242,-4092 191,-4092"/>
+<text text-anchor="start" x="201" y="-4096.67" font-family="Times Roman,serif" font-size="10.00">ATTGA</text>
+</g>
+<!-- 20,2 -->
+<g id="node36" class="node"><title>20,2</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-4114" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-4125.17" font-family="Times Roman,serif" font-size="10.00">20,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-4106 325,-4120 376,-4120 376,-4106 325,-4106"/>
+<text text-anchor="start" x="335" y="-4110.67" font-family="Times Roman,serif" font-size="10.00">CAATA</text>
+<polygon fill="#218559" stroke="#218559" points="325,-4092 325,-4106 376,-4106 376,-4092 325,-4092"/>
+<text text-anchor="start" x="336" y="-4096.67" font-family="Times Roman,serif" font-size="10.00">TATTG</text>
+</g>
+<!-- 20,1->20,2 -->
+<g id="edge232" class="edge"><title>20,1->20,2</title>
+<path fill="none" stroke="#dd1e2f" d="M262.867,-4107.53C272.501,-4107.25 282.748,-4107.18 292.703,-4107.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="292.864,-4110.82 302.933,-4107.52 293.007,-4103.82 292.864,-4110.82"/>
+</g>
+<!-- 20,1->19,3 -->
+<g id="edge234" class="edge"><title>20,1->19,3</title>
+<path fill="none" stroke="#06a2cb" d="M237.703,-4146.23C257.603,-4175.79 284,-4215 284,-4215 284,-4215 294,-5072 294,-5072 294,-5072 316.267,-5129.26 332.719,-5171.56"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="329.557,-5173.09 336.444,-5181.14 336.081,-5170.55 329.557,-5173.09"/>
+</g>
+<!-- 20,2->20,1 -->
+<g id="edge240" class="edge"><title>20,2->20,1</title>
+<path fill="none" stroke="#218559" d="M302.933,-4120.48C293.29,-4120.75 283.041,-4120.82 273.091,-4120.68"/>
+<polygon fill="#218559" stroke="#218559" points="272.937,-4117.18 262.867,-4120.47 272.792,-4124.18 272.937,-4117.18"/>
+</g>
+<!-- 20,3 -->
+<g id="node37" class="node"><title>20,3</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-4114" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-4125.17" font-family="Times Roman,serif" font-size="10.00">20,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-4106 459,-4120 510,-4120 510,-4106 459,-4106"/>
+<text text-anchor="start" x="469" y="-4110.67" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="459,-4092 459,-4106 510,-4106 510,-4092 459,-4092"/>
+<text text-anchor="start" x="470.5" y="-4096.67" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 20,2->20,3 -->
+<g id="edge238" class="edge"><title>20,2->20,3</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-4107.53C406.501,-4107.25 416.748,-4107.18 426.703,-4107.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-4110.82 436.933,-4107.52 427.007,-4103.82 426.864,-4110.82"/>
+</g>
+<!-- 21,1 -->
+<g id="node40" class="node"><title>21,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3649" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-3660.17" font-family="Times Roman,serif" font-size="10.00">21,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-3641 459,-3655 510,-3655 510,-3641 459,-3641"/>
+<text text-anchor="start" x="469" y="-3645.67" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="459,-3627 459,-3641 510,-3641 510,-3627 459,-3627"/>
+<text text-anchor="start" x="470.5" y="-3631.67" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 20,2->21,1 -->
+<g id="edge236" class="edge"><title>20,2->21,1</title>
+<path fill="none" stroke="#dd1e2f" d="M364.013,-4079.55C378.18,-4044.72 398,-3996 398,-3996 398,-3996 449.463,-3788.35 472.769,-3694.32"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="476.192,-3695.05 475.201,-3684.5 469.398,-3693.37 476.192,-3695.05"/>
+</g>
+<!-- 20,3->20,2 -->
+<g id="edge246" class="edge"><title>20,3->20,2</title>
+<path fill="none" stroke="#218559" d="M436.933,-4120.48C427.29,-4120.75 417.041,-4120.82 407.091,-4120.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-4117.18 396.867,-4120.47 406.792,-4124.18 406.937,-4117.18"/>
+</g>
+<!-- 20,4 -->
+<g id="node38" class="node"><title>20,4</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-4114" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-4125.17" font-family="Times Roman,serif" font-size="10.00">20,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-4106 593,-4120 644,-4120 644,-4106 593,-4106"/>
+<text text-anchor="start" x="602.5" y="-4110.67" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-4092 593,-4106 644,-4106 644,-4092 593,-4092"/>
+<text text-anchor="start" x="603.5" y="-4096.67" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 20,3->20,4 -->
+<g id="edge242" class="edge"><title>20,3->20,4</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-4107.53C540.501,-4107.25 550.748,-4107.18 560.703,-4107.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-4110.82 570.933,-4107.52 561.007,-4103.82 560.864,-4110.82"/>
+</g>
+<!-- 19,1 -->
+<g id="node149" class="node"><title>19,1</title>
+<ellipse fill="none" stroke="black" cx="64" cy="-5216" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="41.5" y="-5227.17" font-family="Times Roman,serif" font-size="10.00">19,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="39,-5208 39,-5222 90,-5222 90,-5208 39,-5208"/>
+<text text-anchor="start" x="50" y="-5212.67" font-family="Times Roman,serif" font-size="10.00">TATTG</text>
+<polygon fill="#218559" stroke="#218559" points="39,-5194 39,-5208 90,-5208 90,-5194 39,-5194"/>
+<text text-anchor="start" x="49" y="-5198.67" font-family="Times Roman,serif" font-size="10.00">CAATA</text>
+</g>
+<!-- 20,3->19,1 -->
+<g id="edge244" class="edge"><title>20,3->19,1</title>
+<path fill="none" stroke="#06a2cb" d="M476.816,-4149.67C456.146,-4252.3 398,-4541 398,-4541 398,-4541 294,-4677 294,-4677 294,-4677 137.748,-5043.17 82.8196,-5171.9"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="79.4431,-5170.89 78.7374,-5181.46 85.8814,-5173.64 79.4431,-5170.89"/>
+</g>
+<!-- 20,4->20,3 -->
+<g id="edge250" class="edge"><title>20,4->20,3</title>
+<path fill="none" stroke="#218559" d="M570.933,-4120.48C561.29,-4120.75 551.041,-4120.82 541.091,-4120.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-4117.18 530.867,-4120.47 540.792,-4124.18 540.937,-4117.18"/>
+</g>
+<!-- 21,3 -->
+<g id="node42" class="node"><title>21,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3649" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-3660.17" font-family="Times Roman,serif" font-size="10.00">21,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-3641 727,-3655 778,-3655 778,-3641 727,-3641"/>
+<text text-anchor="start" x="737" y="-3645.67" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-3627 727,-3641 778,-3641 778,-3627 727,-3627"/>
+<text text-anchor="start" x="736.5" y="-3631.67" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+</g>
+<!-- 20,4->21,3 -->
+<g id="edge248" class="edge"><title>20,4->21,3</title>
+<path fill="none" stroke="#dd1e2f" d="M634.198,-4079.87C650.736,-4045.02 674,-3996 674,-3996 674,-3996 684,-3750 684,-3750 684,-3750 705.679,-3717.8 724.556,-3689.76"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727.616,-3691.48 730.297,-3681.23 721.809,-3687.58 727.616,-3691.48"/>
+</g>
+<!-- 21,1->20,2 -->
+<g id="edge664" class="edge"><title>21,1->20,2</title>
+<path fill="none" stroke="#218559" d="M475.04,-3684.44C456.575,-3757.49 416,-3918 416,-3918 416,-3918 398,-3996 398,-3996 398,-3996 381.582,-4036.36 367.95,-4069.87"/>
+<polygon fill="#218559" stroke="#218559" points="364.539,-4068.97 364.013,-4079.55 371.023,-4071.61 364.539,-4068.97"/>
+</g>
+<!-- 21,2 -->
+<g id="node41" class="node"><title>21,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3649" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-3660.17" font-family="Times Roman,serif" font-size="10.00">21,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-3641 593,-3655 644,-3655 644,-3641 593,-3641"/>
+<text text-anchor="start" x="602.5" y="-3645.67" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-3627 593,-3641 644,-3641 644,-3627 593,-3627"/>
+<text text-anchor="start" x="603.5" y="-3631.67" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 21,1->21,2 -->
+<g id="edge662" class="edge"><title>21,1->21,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-3642.53C540.501,-3642.25 550.748,-3642.18 560.703,-3642.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-3645.82 570.933,-3642.52 561.007,-3638.82 560.864,-3645.82"/>
+</g>
+<!-- 21,2->21,1 -->
+<g id="edge670" class="edge"><title>21,2->21,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-3655.48C561.29,-3655.75 551.041,-3655.82 541.091,-3655.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-3652.18 530.867,-3655.47 540.792,-3659.18 540.937,-3652.18"/>
+</g>
+<!-- 21,2->21,3 -->
+<g id="edge668" class="edge"><title>21,2->21,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-3642.53C674.501,-3642.25 684.748,-3642.18 694.703,-3642.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-3645.82 704.933,-3642.52 695.007,-3638.82 694.864,-3645.82"/>
+</g>
+<!-- 21,2->22,1 -->
+<g id="edge666" class="edge"><title>21,2->22,1</title>
+<path fill="none" stroke="#dd1e2f" d="M601.802,-3614.87C585.264,-3580.02 562,-3531 562,-3531 562,-3531 552,-3362 552,-3362 552,-3362 526.516,-3314.03 506.749,-3276.82"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="509.649,-3274.82 501.866,-3267.63 503.467,-3278.1 509.649,-3274.82"/>
+</g>
+<!-- 21,3->20,4 -->
+<g id="edge674" class="edge"><title>21,3->20,4</title>
+<path fill="none" stroke="#218559" d="M733.956,-3682.43C713.81,-3719.76 684,-3775 684,-3775 684,-3775 674,-3996 674,-3996 674,-3996 654.563,-4036.96 638.591,-4070.61"/>
+<polygon fill="#218559" stroke="#218559" points="635.323,-4069.33 634.198,-4079.87 641.647,-4072.34 635.323,-4069.33"/>
+</g>
+<!-- 21,3->21,2 -->
+<g id="edge676" class="edge"><title>21,3->21,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-3655.48C695.29,-3655.75 685.041,-3655.82 675.091,-3655.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-3652.18 664.867,-3655.47 674.792,-3659.18 674.937,-3652.18"/>
+</g>
+<!-- 21,3->21,4 -->
+<g id="edge672" class="edge"><title>21,3->21,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-3642.53C808.501,-3642.25 818.748,-3642.18 828.703,-3642.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-3645.82 838.933,-3642.52 829.007,-3638.82 828.864,-3645.82"/>
+</g>
+<!-- 21,4->27,4 -->
+<g id="edge680" class="edge"><title>21,4->27,4</title>
+<path fill="none" stroke="#218559" d="M869.802,-3614.87C853.264,-3580.02 830,-3531 830,-3531 830,-3531 820,-2915 820,-2915 820,-2915 802.13,-2894.24 784.712,-2874"/>
+<polygon fill="#218559" stroke="#218559" points="787.272,-2871.61 778.096,-2866.32 781.967,-2876.18 787.272,-2871.61"/>
+</g>
+<!-- 21,4->21,3 -->
+<g id="edge682" class="edge"><title>21,4->21,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-3655.48C829.29,-3655.75 819.041,-3655.82 809.091,-3655.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-3652.18 798.867,-3655.47 808.792,-3659.18 808.937,-3652.18"/>
+</g>
+<!-- 22,3 -->
+<g id="node47" class="node"><title>22,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3234" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-3245.17" font-family="Times Roman,serif" font-size="10.00">22,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-3226 727,-3240 778,-3240 778,-3226 727,-3226"/>
+<text text-anchor="start" x="735.5" y="-3230.67" font-family="Times Roman,serif" font-size="10.00">CGTGA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-3212 727,-3226 778,-3226 778,-3212 727,-3212"/>
+<text text-anchor="start" x="736" y="-3216.67" font-family="Times Roman,serif" font-size="10.00">TCACG</text>
+</g>
+<!-- 21,4->22,3 -->
+<g id="edge678" class="edge"><title>21,4->22,3</title>
+<path fill="none" stroke="#dd1e2f" d="M869.802,-3614.87C853.264,-3580.02 830,-3531 830,-3531 830,-3531 820,-3477 820,-3477 820,-3477 784.341,-3349.57 764.668,-3279.27"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="767.953,-3278.02 761.888,-3269.33 761.212,-3279.91 767.953,-3278.02"/>
+</g>
+<!-- 22,1->27,3 -->
+<g id="edge256" class="edge"><title>22,1->27,3</title>
+<path fill="none" stroke="#218559" d="M496.988,-3198.98C513.531,-3154.37 540,-3083 540,-3083 540,-3083 550,-2962 550,-2962 550,-2962 575.335,-2915.06 595.076,-2878.48"/>
+<polygon fill="#218559" stroke="#218559" points="598.286,-2879.9 599.956,-2869.43 592.126,-2876.57 598.286,-2879.9"/>
+</g>
+<!-- 22,1->21,2 -->
+<g id="edge258" class="edge"><title>22,1->21,2</title>
+<path fill="none" stroke="#218559" d="M500.984,-3267.72C521.125,-3307.7 552,-3369 552,-3369 552,-3369 562,-3531 562,-3531 562,-3531 581.437,-3571.96 597.409,-3605.61"/>
+<polygon fill="#218559" stroke="#218559" points="594.353,-3607.34 601.802,-3614.87 600.677,-3604.33 594.353,-3607.34"/>
+</g>
+<!-- 22,1->22,2 -->
+<g id="edge252" class="edge"><title>22,1->22,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-3227.53C540.501,-3227.25 550.748,-3227.18 560.703,-3227.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-3230.82 570.933,-3227.52 561.007,-3223.82 560.864,-3230.82"/>
+</g>
+<!-- 22,1->28,1 -->
+<g id="edge254" class="edge"><title>22,1->28,1</title>
+<path fill="none" stroke="#218559" d="M496.988,-3198.98C513.531,-3154.37 540,-3083 540,-3083 540,-3083 562,-2788 562,-2788 562,-2788 569.283,-2781.76 578.596,-2773.78"/>
+<polygon fill="#218559" stroke="#218559" points="581.085,-2776.25 586.4,-2767.09 576.529,-2770.94 581.085,-2776.25"/>
+</g>
+<!-- 22,2->27,4 -->
+<g id="edge264" class="edge"><title>22,2->27,4</title>
+<path fill="none" stroke="#218559" d="M647.312,-3205.21C660.861,-3191.9 674,-3179 674,-3179 674,-3179 684,-2962 684,-2962 684,-2962 709.335,-2915.06 729.076,-2878.48"/>
+<polygon fill="#218559" stroke="#218559" points="732.286,-2879.9 733.956,-2869.43 726.126,-2876.57 732.286,-2879.9"/>
+</g>
+<!-- 22,2->22,1 -->
+<g id="edge266" class="edge"><title>22,2->22,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-3240.48C561.29,-3240.75 551.041,-3240.82 541.091,-3240.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-3237.18 530.867,-3240.47 540.792,-3244.18 540.937,-3237.18"/>
+</g>
+<!-- 22,2->22,3 -->
+<g id="edge260" class="edge"><title>22,2->22,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-3227.53C674.501,-3227.25 684.748,-3227.18 694.703,-3227.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-3230.82 704.933,-3227.52 695.007,-3223.82 694.864,-3230.82"/>
+</g>
+<!-- 23,4 -->
+<g id="node53" class="node"><title>23,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-4725" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-4736.17" font-family="Times Roman,serif" font-size="10.00">23,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-4717 727,-4731 778,-4731 778,-4717 727,-4717"/>
+<text text-anchor="start" x="736" y="-4721.67" font-family="Times Roman,serif" font-size="10.00">TCACG</text>
+<polygon fill="#218559" stroke="#218559" points="727,-4703 727,-4717 778,-4717 778,-4703 727,-4703"/>
+<text text-anchor="start" x="735.5" y="-4707.67" font-family="Times Roman,serif" font-size="10.00">CGTGA</text>
+</g>
+<!-- 22,2->23,4 -->
+<g id="edge262" class="edge"><title>22,2->23,4</title>
+<path fill="none" stroke="#ebb035" d="M627.883,-3269.47C643.959,-3327.18 674,-3435 674,-3435 674,-3435 686,-3516 686,-3516 686,-3516 696,-4677 696,-4677 696,-4677 703.283,-4683.24 712.596,-4691.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="710.529,-4694.06 720.4,-4697.91 715.085,-4688.75 710.529,-4694.06"/>
+</g>
+<!-- 22,3->21,4 -->
+<g id="edge270" class="edge"><title>22,3->21,4</title>
+<path fill="none" stroke="#218559" d="M761.883,-3269.47C777.959,-3327.18 808,-3435 808,-3435 808,-3435 830,-3531 830,-3531 830,-3531 849.437,-3571.96 865.409,-3605.61"/>
+<polygon fill="#218559" stroke="#218559" points="862.353,-3607.34 869.802,-3614.87 868.677,-3604.33 862.353,-3607.34"/>
+</g>
+<!-- 22,3->22,2 -->
+<g id="edge272" class="edge"><title>22,3->22,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-3240.48C695.29,-3240.75 685.041,-3240.82 675.091,-3240.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-3237.18 664.867,-3240.47 674.792,-3244.18 674.937,-3237.18"/>
+</g>
+<!-- 22,4 -->
+<g id="node48" class="node"><title>22,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3234" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-3245.17" font-family="Times Roman,serif" font-size="10.00">22,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-3226 861,-3240 912,-3240 912,-3226 861,-3226"/>
+<text text-anchor="start" x="869.5" y="-3230.67" font-family="Times Roman,serif" font-size="10.00">GTGAA</text>
+<polygon fill="#218559" stroke="#218559" points="861,-3212 861,-3226 912,-3226 912,-3212 861,-3212"/>
+<text text-anchor="start" x="871.5" y="-3216.67" font-family="Times Roman,serif" font-size="10.00">TTCAC</text>
+</g>
+<!-- 22,3->22,4 -->
+<g id="edge268" class="edge"><title>22,3->22,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-3227.53C808.501,-3227.25 818.748,-3227.18 828.703,-3227.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-3230.82 838.933,-3227.52 829.007,-3223.82 828.864,-3230.82"/>
+</g>
+<!-- 22,4->22,3 -->
+<g id="edge276" class="edge"><title>22,4->22,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-3240.48C829.29,-3240.75 819.041,-3240.82 809.091,-3240.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-3237.18 798.867,-3240.47 808.792,-3244.18 808.937,-3237.18"/>
+</g>
+<!-- 23,2 -->
+<g id="node51" class="node"><title>23,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-4725" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-4736.17" font-family="Times Roman,serif" font-size="10.00">23,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-4717 459,-4731 510,-4731 510,-4717 459,-4717"/>
+<text text-anchor="start" x="470" y="-4721.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-4703 459,-4717 510,-4717 510,-4703 459,-4703"/>
+<text text-anchor="start" x="467.5" y="-4707.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+</g>
+<!-- 22,4->23,2 -->
+<g id="edge274" class="edge"><title>22,4->23,2</title>
+<path fill="none" stroke="#ebb035" d="M876.117,-3269.47C860.041,-3327.18 830,-3435 830,-3435 830,-3435 808,-3561 808,-3561 808,-3561 696,-3601 696,-3601 696,-3601 674,-4192 674,-4192 674,-4192 562,-4415 562,-4415 562,-4415 550,-4546 550,-4546 550,-4546 540,-4677 540,-4677 540,-4677 532.717,-4683.24 523.404,-4691.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="520.915,-4688.75 515.6,-4697.91 525.471,-4694.06 520.915,-4688.75"/>
+</g>
+<!-- 23,1->24,3 -->
+<g id="edge690" class="edge"><title>23,1->24,3</title>
+<path fill="none" stroke="#06a2cb" d="M358.034,-4689.18C371.699,-4628.26 398,-4511 398,-4511 398,-4511 416,-4240 416,-4240 416,-4240 418,-4212 418,-4212 418,-4212 428,-4026 428,-4026 428,-4026 540,-3996 540,-3996 540,-3996 562,-3896 562,-3896 562,-3896 674,-3896 674,-3896 674,-3896 686,-4442 686,-4442 686,-4442 696,-5072 696,-5072 696,-5072 703.283,-5078.24 712.596,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="710.529,-5089.06 720.4,-5092.91 715.085,-5083.75 710.529,-5089.06"/>
+</g>
+<!-- 23,1->23,2 -->
+<g id="edge686" class="edge"><title>23,1->23,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-4718.53C406.501,-4718.25 416.748,-4718.18 426.703,-4718.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-4721.82 436.933,-4718.52 427.007,-4714.82 426.864,-4721.82"/>
+</g>
+<!-- 23,1->7,1 -->
+<g id="edge684" class="edge"><title>23,1->7,1</title>
+<path fill="none" stroke="#dd1e2f" d="M386.389,-4701.45C402.556,-4690.99 418,-4681 418,-4681 418,-4681 430.492,-4671.16 444.607,-4660.04"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="446.857,-4662.72 452.546,-4653.78 442.525,-4657.22 446.857,-4662.72"/>
+</g>
+<!-- 17,2 -->
+<g id="node140" class="node"><title>17,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3948" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-3959.17" font-family="Times Roman,serif" font-size="10.00">17,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-3940 459,-3954 510,-3954 510,-3940 459,-3940"/>
+<text text-anchor="start" x="467" y="-3944.67" font-family="Times Roman,serif" font-size="10.00">AAACG</text>
+<polygon fill="#218559" stroke="#218559" points="459,-3926 459,-3940 510,-3940 510,-3926 459,-3926"/>
+<text text-anchor="start" x="469.5" y="-3930.67" font-family="Times Roman,serif" font-size="10.00">CGTTT</text>
+</g>
+<!-- 23,1->17,2 -->
+<g id="edge692" class="edge"><title>23,1->17,2</title>
+<path fill="none" stroke="#06a2cb" d="M358.034,-4689.18C371.699,-4628.26 398,-4511 398,-4511 398,-4511 416,-4215 416,-4215 416,-4215 418,-4187 418,-4187 418,-4187 428,-3998 428,-3998 428,-3998 435.684,-3991.14 445.359,-3982.5"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="447.923,-3984.9 453.052,-3975.63 443.261,-3979.68 447.923,-3984.9"/>
+</g>
+<!-- 23,1->19,4 -->
+<g id="edge688" class="edge"><title>23,1->19,4</title>
+<path fill="none" stroke="#ebb035" d="M356.826,-4760.7C370.078,-4829.99 398,-4976 398,-4976 398,-4976 418,-5091 418,-5091 418,-5091 428,-5168 428,-5168 428,-5168 435.283,-5174.24 444.596,-5182.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="442.529,-5185.06 452.4,-5188.91 447.085,-5179.75 442.529,-5185.06"/>
+</g>
+<!-- 18,1 -->
+<g id="node154" class="node"><title>18,1</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-4463" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="193.5" y="-4474.17" font-family="Times Roman,serif" font-size="10.00">18,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="191,-4455 191,-4469 242,-4469 242,-4455 191,-4455"/>
+<text text-anchor="start" x="201.5" y="-4459.67" font-family="Times Roman,serif" font-size="10.00">CGTTT</text>
+<polygon fill="#218559" stroke="#218559" points="191,-4441 191,-4455 242,-4455 242,-4441 191,-4441"/>
+<text text-anchor="start" x="199" y="-4445.67" font-family="Times Roman,serif" font-size="10.00">AAACG</text>
+</g>
+<!-- 23,1->18,1 -->
+<g id="edge694" class="edge"><title>23,1->18,1</title>
+<path fill="none" stroke="#218559" d="M333.345,-4690.93C313.793,-4650.94 284,-4590 284,-4590 284,-4590 258.516,-4542.4 238.749,-4505.49"/>
+<polygon fill="#218559" stroke="#218559" points="241.672,-4503.53 233.866,-4496.37 235.501,-4506.84 241.672,-4503.53"/>
+</g>
+<!-- 23,2->22,4 -->
+<g id="edge698" class="edge"><title>23,2->22,4</title>
+<path fill="none" stroke="#ebb035" d="M515.6,-4697.91C528.303,-4687.03 540,-4677 540,-4677 540,-4677 562,-4192 562,-4192 562,-4192 674,-4162 674,-4162 674,-4162 684,-3796 684,-3796 684,-3796 696,-3561 696,-3561 696,-3561 808,-3531 808,-3531 808,-3531 830,-3435 830,-3435 830,-3435 856.845,-3338.65 873.362,-3279.36"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="876.805,-3280.04 876.117,-3269.47 870.062,-3278.17 876.805,-3280.04"/>
+</g>
+<!-- 23,2->23,1 -->
+<g id="edge702" class="edge"><title>23,2->23,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-4731.48C427.29,-4731.75 417.041,-4731.82 407.091,-4731.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-4728.18 396.867,-4731.47 406.792,-4735.18 406.937,-4728.18"/>
+</g>
+<!-- 23,2->23,3 -->
+<g id="edge696" class="edge"><title>23,2->23,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-4718.53C540.501,-4718.25 550.748,-4718.18 560.703,-4718.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-4721.82 570.933,-4718.52 561.007,-4714.82 560.864,-4721.82"/>
+</g>
+<!-- 23,2->17,1 -->
+<g id="edge700" class="edge"><title>23,2->17,1</title>
+<path fill="none" stroke="#06a2cb" d="M452.4,-4697.91C439.697,-4687.03 428,-4677 428,-4677 428,-4677 418,-3825 418,-3825 418,-3825 416,-3825 416,-3825 416,-3825 392.048,-3869.64 373.003,-3905.13"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="369.679,-3903.92 368.035,-3914.39 375.847,-3907.23 369.679,-3903.92"/>
+</g>
+<!-- 23,3->24,1 -->
+<g id="edge706" class="edge"><title>23,3->24,1</title>
+<path fill="none" stroke="#06a2cb" d="M609.73,-4760.63C591.608,-4838.72 550,-5018 550,-5018 550,-5018 540,-5072 540,-5072 540,-5072 532.717,-5078.24 523.404,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="520.915,-5083.75 515.6,-5092.91 525.471,-5089.06 520.915,-5083.75"/>
+</g>
+<!-- 23,3->23,2 -->
+<g id="edge708" class="edge"><title>23,3->23,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-4731.48C561.29,-4731.75 551.041,-4731.82 541.091,-4731.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-4728.18 530.867,-4731.47 540.792,-4735.18 540.937,-4728.18"/>
+</g>
+<!-- 23,3->23,4 -->
+<g id="edge704" class="edge"><title>23,3->23,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-4718.53C674.501,-4718.25 684.748,-4718.18 694.703,-4718.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-4721.82 704.933,-4718.52 695.007,-4714.82 694.864,-4721.82"/>
+</g>
+<!-- 23,4->22,2 -->
+<g id="edge710" class="edge"><title>23,4->22,2</title>
+<path fill="none" stroke="#ebb035" d="M720.4,-4697.91C707.697,-4687.03 696,-4677 696,-4677 696,-4677 686,-3501 686,-3501 686,-3501 674,-3435 674,-3435 674,-3435 647.155,-3338.65 630.638,-3279.36"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="633.938,-3278.17 627.883,-3269.47 627.195,-3280.04 633.938,-3278.17"/>
+</g>
+<!-- 23,4->23,3 -->
+<g id="edge712" class="edge"><title>23,4->23,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-4731.48C695.29,-4731.75 685.041,-4731.82 675.091,-4731.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-4728.18 664.867,-4731.47 674.792,-4735.18 674.937,-4728.18"/>
+</g>
+<!-- 28,1->27,2 -->
+<g id="edge336" class="edge"><title>28,1->27,2</title>
+<path fill="none" stroke="#218559" d="M583.317,-2764.85C566.127,-2777.16 545.205,-2792.15 527.005,-2805.19"/>
+<polygon fill="#218559" stroke="#218559" points="524.948,-2802.36 518.857,-2811.03 529.025,-2808.05 524.948,-2802.36"/>
+</g>
+<!-- 28,1->22,1 -->
+<g id="edge332" class="edge"><title>28,1->22,1</title>
+<path fill="none" stroke="#dd1e2f" d="M586.4,-2767.09C573.697,-2777.97 562,-2788 562,-2788 562,-2788 550,-2923 550,-2923 550,-2923 540,-3083 540,-3083 540,-3083 517.026,-3144.95 500.508,-3189.49"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="497.184,-3188.38 496.988,-3198.98 503.747,-3190.82 497.184,-3188.38"/>
+</g>
+<!-- 28,2 -->
+<g id="node56" class="node"><title>28,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2740" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2751.17" font-family="Times Roman,serif" font-size="10.00">28,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2732 727,-2746 778,-2746 778,-2732 727,-2732"/>
+<text text-anchor="start" x="737" y="-2736.67" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2718 727,-2732 778,-2732 778,-2718 727,-2718"/>
+<text text-anchor="start" x="736.5" y="-2722.67" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+</g>
+<!-- 28,1->28,2 -->
+<g id="edge334" class="edge"><title>28,1->28,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-2733.53C674.501,-2733.25 684.748,-2733.18 694.703,-2733.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-2736.82 704.933,-2733.52 695.007,-2729.82 694.864,-2736.82"/>
+</g>
+<!-- 28,2->28,1 -->
+<g id="edge342" class="edge"><title>28,2->28,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-2746.48C695.29,-2746.75 685.041,-2746.82 675.091,-2746.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-2743.18 664.867,-2746.47 674.792,-2750.18 674.937,-2743.18"/>
+</g>
+<!-- 28,2->28,3 -->
+<g id="edge338" class="edge"><title>28,2->28,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-2733.53C808.501,-2733.25 818.748,-2733.18 828.703,-2733.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-2736.82 838.933,-2733.52 829.007,-2729.82 828.864,-2736.82"/>
+</g>
+<!-- 29,4 -->
+<g id="node63" class="node"><title>29,4</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-2306" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1131.5" y="-2317.17" font-family="Times Roman,serif" font-size="10.00">29,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1129,-2298 1129,-2312 1180,-2312 1180,-2298 1129,-2298"/>
+<text text-anchor="start" x="1137.5" y="-2302.67" font-family="Times Roman,serif" font-size="10.00">GACGT</text>
+<polygon fill="#218559" stroke="#218559" points="1129,-2284 1129,-2298 1180,-2298 1180,-2284 1129,-2284"/>
+<text text-anchor="start" x="1138.5" y="-2288.67" font-family="Times Roman,serif" font-size="10.00">ACGTC</text>
+</g>
+<!-- 28,2->29,4 -->
+<g id="edge340" class="edge"><title>28,2->29,4</title>
+<path fill="none" stroke="#ebb035" d="M790.086,-2718.03C809.886,-2706.6 830,-2695 830,-2695 830,-2695 1076,-2610 1076,-2610 1076,-2610 1106,-2450 1106,-2450 1106,-2450 1124.98,-2393.07 1139.07,-2350.8"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1142.42,-2351.82 1142.26,-2341.23 1135.78,-2349.61 1142.42,-2351.82"/>
+</g>
+<!-- 28,3->27,4 -->
+<g id="edge346" class="edge"><title>28,3->27,4</title>
+<path fill="none" stroke="#218559" d="M851.317,-2764.85C834.127,-2777.16 813.205,-2792.15 795.005,-2805.19"/>
+<polygon fill="#218559" stroke="#218559" points="792.948,-2802.36 786.857,-2811.03 797.025,-2808.05 792.948,-2802.36"/>
+</g>
+<!-- 28,3->28,2 -->
+<g id="edge348" class="edge"><title>28,3->28,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-2746.48C829.29,-2746.75 819.041,-2746.82 809.091,-2746.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-2743.18 798.867,-2746.47 808.792,-2750.18 808.937,-2743.18"/>
+</g>
+<!-- 28,4 -->
+<g id="node58" class="node"><title>28,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-2740" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-2751.17" font-family="Times Roman,serif" font-size="10.00">28,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-2732 995,-2746 1046,-2746 1046,-2732 995,-2732"/>
+<text text-anchor="start" x="1004" y="-2736.67" font-family="Times Roman,serif" font-size="10.00">CGTCA</text>
+<polygon fill="#218559" stroke="#218559" points="995,-2718 995,-2732 1046,-2732 1046,-2718 995,-2718"/>
+<text text-anchor="start" x="1003.5" y="-2722.67" font-family="Times Roman,serif" font-size="10.00">TGACG</text>
+</g>
+<!-- 28,3->28,4 -->
+<g id="edge344" class="edge"><title>28,3->28,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-2733.53C942.501,-2733.25 952.748,-2733.18 962.703,-2733.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-2736.82 972.933,-2733.52 963.007,-2729.82 962.864,-2736.82"/>
+</g>
+<!-- 28,4->28,3 -->
+<g id="edge354" class="edge"><title>28,4->28,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-2746.48C963.29,-2746.75 953.041,-2746.82 943.091,-2746.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-2743.18 932.867,-2746.47 942.792,-2750.18 942.937,-2743.18"/>
+</g>
+<!-- 29,2 -->
+<g id="node61" class="node"><title>29,2</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2306" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-2317.17" font-family="Times Roman,serif" font-size="10.00">29,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-2298 861,-2312 912,-2312 912,-2298 861,-2298"/>
+<text text-anchor="start" x="870" y="-2302.67" font-family="Times Roman,serif" font-size="10.00">ATGAC</text>
+<polygon fill="#218559" stroke="#218559" points="861,-2284 861,-2298 912,-2298 912,-2284 861,-2284"/>
+<text text-anchor="start" x="871.5" y="-2288.67" font-family="Times Roman,serif" font-size="10.00">GTCAT</text>
+</g>
+<!-- 28,4->29,2 -->
+<g id="edge352" class="edge"><title>28,4->29,2</title>
+<path fill="none" stroke="#ebb035" d="M1009.73,-2704.42C993.562,-2648.41 964,-2546 964,-2546 964,-2546 954,-2407 954,-2407 954,-2407 942,-2354 942,-2354 942,-2354 934.717,-2347.76 925.404,-2339.78"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="927.471,-2336.94 917.6,-2333.09 922.915,-2342.25 927.471,-2336.94"/>
+</g>
+<!-- 31,3 -->
+<g id="node161" class="node"><title>31,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1732" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1743.17" font-family="Times Roman,serif" font-size="10.00">31,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1724 861,-1738 912,-1738 912,-1724 861,-1724"/>
+<text text-anchor="start" x="871.5" y="-1728.67" font-family="Times Roman,serif" font-size="10.00">GTCAT</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1710 861,-1724 912,-1724 912,-1710 861,-1710"/>
+<text text-anchor="start" x="870" y="-1714.67" font-family="Times Roman,serif" font-size="10.00">ATGAC</text>
+</g>
+<!-- 28,4->31,3 -->
+<g id="edge350" class="edge"><title>28,4->31,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1009.73,-2704.42C993.562,-2648.41 964,-2546 964,-2546 964,-2546 954,-1346 954,-1346 954,-1346 952,-1346 952,-1346 952,-1346 942,-1684 942,-1684 942,-1684 934.717,-1690.24 925.404,-1698.22"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="922.915,-1695.75 917.6,-1704.91 927.471,-1701.06 922.915,-1695.75"/>
+</g>
+<!-- 29,1 -->
+<g id="node60" class="node"><title>29,1</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2306" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2317.17" font-family="Times Roman,serif" font-size="10.00">29,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2298 727,-2312 778,-2312 778,-2298 727,-2298"/>
+<text text-anchor="start" x="736" y="-2302.67" font-family="Times Roman,serif" font-size="10.00">CATGA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2284 727,-2298 778,-2298 778,-2284 727,-2284"/>
+<text text-anchor="start" x="737" y="-2288.67" font-family="Times Roman,serif" font-size="10.00">TCATG</text>
+</g>
+<!-- 29,1->29,2 -->
+<g id="edge760" class="edge"><title>29,1->29,2</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-2299.53C808.501,-2299.25 818.748,-2299.18 828.703,-2299.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-2302.82 838.933,-2299.52 829.007,-2295.82 828.864,-2302.82"/>
+</g>
+<!-- 30,2 -->
+<g id="node165" class="node"><title>30,2</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2140" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-2151.17" font-family="Times Roman,serif" font-size="10.00">30,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-2132 861,-2146 912,-2146 912,-2132 861,-2132"/>
+<text text-anchor="start" x="871" y="-2136.67" font-family="Times Roman,serif" font-size="10.00">TCATG</text>
+<polygon fill="#218559" stroke="#218559" points="861,-2118 861,-2132 912,-2132 912,-2118 861,-2118"/>
+<text text-anchor="start" x="870" y="-2122.67" font-family="Times Roman,serif" font-size="10.00">CATGA</text>
+</g>
+<!-- 29,1->30,2 -->
+<g id="edge764" class="edge"><title>29,1->30,2</title>
+<path fill="none" stroke="#218559" d="M780.444,-2277.14C799.078,-2258.23 820,-2237 820,-2237 820,-2237 840.341,-2207.11 858.438,-2180.51"/>
+<polygon fill="#218559" stroke="#218559" points="861.474,-2182.27 864.206,-2172.03 855.687,-2178.33 861.474,-2182.27"/>
+</g>
+<!-- 30,3 -->
+<g id="node166" class="node"><title>30,3</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-2140" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-2151.17" font-family="Times Roman,serif" font-size="10.00">30,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-2132 995,-2146 1046,-2146 1046,-2132 995,-2132"/>
+<text text-anchor="start" x="1004" y="-2136.67" font-family="Times Roman,serif" font-size="10.00">CATGA</text>
+<polygon fill="#218559" stroke="#218559" points="995,-2118 995,-2132 1046,-2132 1046,-2118 995,-2118"/>
+<text text-anchor="start" x="1005" y="-2122.67" font-family="Times Roman,serif" font-size="10.00">TCATG</text>
+</g>
+<!-- 29,1->30,3 -->
+<g id="edge762" class="edge"><title>29,1->30,3</title>
+<path fill="none" stroke="#06a2cb" d="M768.198,-2271.87C784.736,-2237.02 808,-2188 808,-2188 808,-2188 820,-2139 820,-2139 820,-2139 830,-2095 830,-2095 830,-2095 942,-2095 942,-2095 942,-2095 956.586,-2103.41 973.143,-2112.97"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="971.503,-2116.06 981.914,-2118.03 975.001,-2110 971.503,-2116.06"/>
+</g>
+<!-- 29,2->28,4 -->
+<g id="edge770" class="edge"><title>29,2->28,4</title>
+<path fill="none" stroke="#ebb035" d="M917.6,-2333.09C930.303,-2343.97 942,-2354 942,-2354 942,-2354 964,-2546 964,-2546 964,-2546 990.308,-2637.14 1006.86,-2694.48"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1003.59,-2695.78 1009.73,-2704.42 1010.32,-2693.84 1003.59,-2695.78"/>
+</g>
+<!-- 29,2->29,1 -->
+<g id="edge772" class="edge"><title>29,2->29,1</title>
+<path fill="none" stroke="#218559" d="M838.933,-2312.48C829.29,-2312.75 819.041,-2312.82 809.091,-2312.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-2309.18 798.867,-2312.47 808.792,-2316.18 808.937,-2309.18"/>
+</g>
+<!-- 29,3 -->
+<g id="node62" class="node"><title>29,3</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-2306" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-2317.17" font-family="Times Roman,serif" font-size="10.00">29,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-2298 995,-2312 1046,-2312 1046,-2298 995,-2298"/>
+<text text-anchor="start" x="1003.5" y="-2302.67" font-family="Times Roman,serif" font-size="10.00">TGACG</text>
+<polygon fill="#218559" stroke="#218559" points="995,-2284 995,-2298 1046,-2298 1046,-2284 995,-2284"/>
+<text text-anchor="start" x="1004" y="-2288.67" font-family="Times Roman,serif" font-size="10.00">CGTCA</text>
+</g>
+<!-- 29,2->29,3 -->
+<g id="edge766" class="edge"><title>29,2->29,3</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-2299.53C942.501,-2299.25 952.748,-2299.18 962.703,-2299.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-2302.82 972.933,-2299.52 963.007,-2295.82 962.864,-2302.82"/>
+</g>
+<!-- 32,4 -->
+<g id="node197" class="node"><title>32,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1974" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-1985.17" font-family="Times Roman,serif" font-size="10.00">32,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-1966 995,-1980 1046,-1980 1046,-1966 995,-1966"/>
+<text text-anchor="start" x="1004" y="-1970.67" font-family="Times Roman,serif" font-size="10.00">CGTCA</text>
+<polygon fill="#218559" stroke="#218559" points="995,-1952 995,-1966 1046,-1966 1046,-1952 995,-1952"/>
+<text text-anchor="start" x="1003.5" y="-1956.67" font-family="Times Roman,serif" font-size="10.00">TGACG</text>
+</g>
+<!-- 29,2->32,4 -->
+<g id="edge768" class="edge"><title>29,2->32,4</title>
+<path fill="none" stroke="#ebb035" d="M902.198,-2271.87C918.736,-2237.02 942,-2188 942,-2188 942,-2188 954,-2154 954,-2154 954,-2154 964,-2092 964,-2092 964,-2092 983.437,-2051.04 999.409,-2017.39"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1002.68,-2018.67 1003.8,-2008.13 996.353,-2015.66 1002.68,-2018.67"/>
+</g>
+<!-- 29,3->29,2 -->
+<g id="edge780" class="edge"><title>29,3->29,2</title>
+<path fill="none" stroke="#218559" d="M972.933,-2312.48C963.29,-2312.75 953.041,-2312.82 943.091,-2312.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-2309.18 932.867,-2312.47 942.792,-2316.18 942.937,-2309.18"/>
+</g>
+<!-- 29,3->29,4 -->
+<g id="edge774" class="edge"><title>29,3->29,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1066.87,-2299.53C1076.5,-2299.25 1086.75,-2299.18 1096.7,-2299.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1096.86,-2302.82 1106.93,-2299.52 1097.01,-2295.82 1096.86,-2302.82"/>
+</g>
+<!-- 30,1 -->
+<g id="node164" class="node"><title>30,1</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2140" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-2151.17" font-family="Times Roman,serif" font-size="10.00">30,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-2132 727,-2146 778,-2146 778,-2132 727,-2132"/>
+<text text-anchor="start" x="737.5" y="-2136.67" font-family="Times Roman,serif" font-size="10.00">GTCAT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-2118 727,-2132 778,-2132 778,-2118 727,-2118"/>
+<text text-anchor="start" x="736" y="-2122.67" font-family="Times Roman,serif" font-size="10.00">ATGAC</text>
+</g>
+<!-- 29,3->30,1 -->
+<g id="edge776" class="edge"><title>29,3->30,1</title>
+<path fill="none" stroke="#06a2cb" d="M1003.8,-2271.87C987.264,-2237.02 964,-2188 964,-2188 964,-2188 942,-1926 942,-1926 942,-1926 830,-1926 830,-1926 830,-1926 808,-2090 808,-2090 808,-2090 800.316,-2096.86 790.641,-2105.5"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="788.077,-2103.1 782.948,-2112.37 792.739,-2108.32 788.077,-2103.1"/>
+</g>
+<!-- 30,4 -->
+<g id="node167" class="node"><title>30,4</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-2140" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1131.5" y="-2151.17" font-family="Times Roman,serif" font-size="10.00">30,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1129,-2132 1129,-2146 1180,-2146 1180,-2132 1129,-2132"/>
+<text text-anchor="start" x="1138" y="-2136.67" font-family="Times Roman,serif" font-size="10.00">ATGAC</text>
+<polygon fill="#218559" stroke="#218559" points="1129,-2118 1129,-2132 1180,-2132 1180,-2118 1129,-2118"/>
+<text text-anchor="start" x="1139.5" y="-2122.67" font-family="Times Roman,serif" font-size="10.00">GTCAT</text>
+</g>
+<!-- 29,3->30,4 -->
+<g id="edge778" class="edge"><title>29,3->30,4</title>
+<path fill="none" stroke="#218559" d="M1048.44,-2277.14C1067.08,-2258.23 1088,-2237 1088,-2237 1088,-2237 1108.34,-2207.11 1126.44,-2180.51"/>
+<polygon fill="#218559" stroke="#218559" points="1129.47,-2182.27 1132.21,-2172.03 1123.69,-2178.33 1129.47,-2182.27"/>
+</g>
+<!-- 29,4->28,2 -->
+<g id="edge782" class="edge"><title>29,4->28,2</title>
+<path fill="none" stroke="#ebb035" d="M1142.26,-2341.23C1128.05,-2383.86 1106,-2450 1106,-2450 1106,-2450 1076,-2546 1076,-2546 1076,-2546 954,-2614 954,-2614 954,-2614 830,-2653 830,-2653 830,-2653 808,-2678 808,-2678 808,-2678 797.753,-2689.34 786.026,-2702.33"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="783.121,-2700.32 779.016,-2710.09 788.316,-2705.01 783.121,-2700.32"/>
+</g>
+<!-- 29,4->29,3 -->
+<g id="edge784" class="edge"><title>29,4->29,3</title>
+<path fill="none" stroke="#218559" d="M1106.93,-2312.48C1097.29,-2312.75 1087.04,-2312.82 1077.09,-2312.68"/>
+<polygon fill="#218559" stroke="#218559" points="1076.94,-2309.18 1066.87,-2312.47 1076.79,-2316.18 1076.94,-2309.18"/>
+</g>
+<!-- 1,1 -->
+<g id="node65" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="64" cy="-5415" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="44.5" y="-5426.17" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="42,-5407 42,-5421 87,-5421 87,-5407 42,-5407"/>
+<text text-anchor="start" x="49" y="-5411.67" font-family="Times Roman,serif" font-size="10.00">TAGTG</text>
+<polygon fill="#218559" stroke="#218559" points="42,-5393 42,-5407 87,-5407 87,-5393 42,-5393"/>
+<text text-anchor="start" x="48.5" y="-5397.67" font-family="Times Roman,serif" font-size="10.00">CACTA</text>
+</g>
+<!-- 1,2 -->
+<g id="node66" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-5415" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="196.5" y="-5426.17" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="194,-5407 194,-5421 239,-5421 239,-5407 194,-5407"/>
+<text text-anchor="start" x="199.5" y="-5411.67" font-family="Times Roman,serif" font-size="10.00">AGTGC</text>
+<polygon fill="#218559" stroke="#218559" points="194,-5393 194,-5407 239,-5407 239,-5393 194,-5393"/>
+<text text-anchor="start" x="200" y="-5397.67" font-family="Times Roman,serif" font-size="10.00">GCACT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge454" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M106.745,-5408.86C124.378,-5408.17 144.986,-5408.07 163.523,-5408.55"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="163.467,-5412.05 173.576,-5408.87 163.695,-5405.05 163.467,-5412.05"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge460" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M173.576,-5421.13C155.979,-5421.82 135.377,-5421.94 116.815,-5421.46"/>
+<polygon fill="#218559" stroke="#218559" points="116.852,-5417.96 106.745,-5421.14 116.627,-5424.96 116.852,-5417.96"/>
+</g>
+<!-- 1,3 -->
+<g id="node67" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-5415" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="330.5" y="-5426.17" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="328,-5407 328,-5421 373,-5421 373,-5407 328,-5407"/>
+<text text-anchor="start" x="333" y="-5411.67" font-family="Times Roman,serif" font-size="10.00">GTGCG</text>
+<polygon fill="#218559" stroke="#218559" points="328,-5393 328,-5407 373,-5407 373,-5393 328,-5393"/>
+<text text-anchor="start" x="333" y="-5397.67" font-family="Times Roman,serif" font-size="10.00">CGCAC</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge456" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M258.398,-5408.67C270.741,-5408.23 284.377,-5408.14 297.273,-5408.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="297.326,-5411.89 307.417,-5408.67 297.517,-5404.89 297.326,-5411.89"/>
+</g>
+<!-- 2,4 -->
+<g id="node77" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-5319" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-5330.17" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-5311 596,-5325 641,-5325 641,-5311 596,-5311"/>
+<text text-anchor="start" x="601" y="-5315.67" font-family="Times Roman,serif" font-size="10.00">CGCAC</text>
+<polygon fill="#218559" stroke="#218559" points="596,-5297 596,-5311 641,-5311 641,-5297 596,-5297"/>
+<text text-anchor="start" x="601" y="-5301.67" font-family="Times Roman,serif" font-size="10.00">GTGCG</text>
+</g>
+<!-- 1,2->2,4 -->
+<g id="edge458" class="edge"><title>1,2->2,4</title>
+<path fill="none" stroke="#ebb035" d="M251.804,-5435.66C272.309,-5447.49 294,-5460 294,-5460 294,-5460 540,-5460 540,-5460 540,-5460 571.999,-5402.16 595.006,-5360.57"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="598.131,-5362.15 599.909,-5351.7 592.006,-5358.76 598.131,-5362.15"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge464" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M307.417,-5421.33C295.062,-5421.77 281.424,-5421.86 268.535,-5421.61"/>
+<polygon fill="#218559" stroke="#218559" points="268.491,-5418.11 258.398,-5421.33 268.298,-5425.1 268.491,-5418.11"/>
+</g>
+<!-- 1,4 -->
+<g id="node68" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5415" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-5426.17" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-5407 462,-5421 507,-5421 507,-5407 462,-5407"/>
+<text text-anchor="start" x="467.5" y="-5411.67" font-family="Times Roman,serif" font-size="10.00">TGCGA</text>
+<polygon fill="#218559" stroke="#218559" points="462,-5393 462,-5407 507,-5407 507,-5393 462,-5393"/>
+<text text-anchor="start" x="468" y="-5397.67" font-family="Times Roman,serif" font-size="10.00">TCGCA</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge462" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M392.398,-5408.67C404.741,-5408.23 418.377,-5408.14 431.273,-5408.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="431.326,-5411.89 441.417,-5408.67 431.517,-5404.89 431.326,-5411.89"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge468" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M441.417,-5421.33C429.062,-5421.77 415.424,-5421.86 402.535,-5421.61"/>
+<polygon fill="#218559" stroke="#218559" points="402.491,-5418.11 392.398,-5421.33 402.298,-5425.1 402.491,-5418.11"/>
+</g>
+<!-- 2,2 -->
+<g id="node75" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-5319" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="330.5" y="-5330.17" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="328,-5311 328,-5325 373,-5325 373,-5311 328,-5311"/>
+<text text-anchor="start" x="334" y="-5315.67" font-family="Times Roman,serif" font-size="10.00">CTCGC</text>
+<polygon fill="#218559" stroke="#218559" points="328,-5297 328,-5311 373,-5311 373,-5297 328,-5297"/>
+<text text-anchor="start" x="332.5" y="-5301.67" font-family="Times Roman,serif" font-size="10.00">GCGAG</text>
+</g>
+<!-- 1,4->2,2 -->
+<g id="edge466" class="edge"><title>1,4->2,2</title>
+<path fill="none" stroke="#ebb035" d="M448.805,-5394.3C432.212,-5384.54 416,-5375 416,-5375 416,-5375 402.69,-5363.71 388.025,-5351.26"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="390.185,-5348.51 380.296,-5344.71 385.656,-5353.84 390.185,-5348.51"/>
+</g>
+<!-- 3,1 -->
+<g id="node70" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-52" rx="43.8406" ry="36.0624"/>
+<text text-anchor="start" x="732" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="729,-44 729,-58 775,-58 775,-44 729,-44"/>
+<text text-anchor="start" x="731.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">GCTAGG</text>
+<polygon fill="#218559" stroke="#218559" points="729,-30 729,-44 775,-44 775,-30 729,-30"/>
+<text text-anchor="start" x="732.5" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">CCTAGC</text>
+</g>
+<!-- 3,3 -->
+<g id="node71" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-44 864,-58 909,-58 909,-44 864,-44"/>
+<text text-anchor="start" x="869.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">TAGGG</text>
+<polygon fill="#218559" stroke="#218559" points="864,-30 864,-44 909,-44 909,-30 864,-30"/>
+<text text-anchor="start" x="870.5" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">CCCTA</text>
+</g>
+<!-- 3,1->3,3 -->
+<g id="edge470" class="edge"><title>3,1->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M795.506,-45.6333C807.566,-45.224 820.789,-45.1425 833.312,-45.3888"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.533,-48.8961 843.626,-45.6728 833.726,-41.8988 833.533,-48.8961"/>
+</g>
+<!-- 3,3->3,1 -->
+<g id="edge474" class="edge"><title>3,3->3,1</title>
+<path fill="none" stroke="#218559" d="M843.626,-58.3272C831.641,-58.7571 818.434,-58.8591 805.869,-58.6334"/>
+<polygon fill="#218559" stroke="#218559" points="805.593,-55.1253 795.506,-58.3667 805.413,-62.1229 805.593,-55.1253"/>
+</g>
+<!-- 3,4 -->
+<g id="node72" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1000.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="998,-44 998,-58 1043,-58 1043,-44 998,-44"/>
+<text text-anchor="start" x="1003.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">AGGGT</text>
+<polygon fill="#218559" stroke="#218559" points="998,-30 998,-44 1043,-44 1043,-30 998,-30"/>
+<text text-anchor="start" x="1004" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">ACCCT</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge472" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M928.398,-45.6719C940.741,-45.2298 954.377,-45.1351 967.273,-45.388"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="967.326,-48.8907 977.417,-45.6653 967.517,-41.8933 967.326,-48.8907"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge478" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M977.417,-58.3347C965.062,-58.7734 951.424,-58.8645 938.535,-58.6082"/>
+<polygon fill="#218559" stroke="#218559" points="938.491,-55.1057 928.398,-58.3281 938.298,-62.1031 938.491,-55.1057"/>
+</g>
+<!-- 4,3 -->
+<g id="node86" class="node"><title>4,3</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-1444" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1134.5" y="-1455.17" font-family="Times Roman,serif" font-size="10.00">4,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1132,-1436 1132,-1450 1177,-1450 1177,-1436 1132,-1436"/>
+<text text-anchor="start" x="1138" y="-1440.67" font-family="Times Roman,serif" font-size="10.00">GGGTT</text>
+<polygon fill="#218559" stroke="#218559" points="1132,-1422 1132,-1436 1177,-1436 1177,-1422 1132,-1422"/>
+<text text-anchor="start" x="1137.5" y="-1426.67" font-family="Times Roman,serif" font-size="10.00">AACCC</text>
+</g>
+<!-- 3,4->4,3 -->
+<g id="edge476" class="edge"><title>3,4->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1023.59,-87.8824C1035.95,-211.48 1076,-612 1076,-612 1076,-612 1106,-1122 1106,-1122 1106,-1122 1133.86,-1308.88 1147.13,-1397.9"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1143.7,-1398.63 1148.63,-1408 1150.62,-1397.59 1143.7,-1398.63"/>
+</g>
+<!-- 2,1 -->
+<g id="node74" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-5319" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="196.5" y="-5330.17" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="194,-5311 194,-5325 239,-5325 239,-5311 194,-5311"/>
+<text text-anchor="start" x="200" y="-5315.67" font-family="Times Roman,serif" font-size="10.00">CCTCG</text>
+<polygon fill="#218559" stroke="#218559" points="194,-5297 194,-5311 239,-5311 239,-5297 194,-5297"/>
+<text text-anchor="start" x="198.5" y="-5301.67" font-family="Times Roman,serif" font-size="10.00">CGAGG</text>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge48" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M258.398,-5312.67C270.741,-5312.23 284.377,-5312.14 297.273,-5312.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="297.326,-5315.89 307.417,-5312.67 297.517,-5308.89 297.326,-5315.89"/>
+</g>
+<!-- 2,2->1,4 -->
+<g id="edge52" class="edge"><title>2,2->1,4</title>
+<path fill="none" stroke="#ebb035" d="M382.78,-5342.48C400.868,-5355.44 423.505,-5371.66 442.782,-5385.47"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="440.926,-5388.45 451.094,-5391.43 445.003,-5382.76 440.926,-5388.45"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge54" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M307.417,-5325.33C295.062,-5325.77 281.424,-5325.86 268.535,-5325.61"/>
+<polygon fill="#218559" stroke="#218559" points="268.491,-5322.11 258.398,-5325.33 268.298,-5329.1 268.491,-5322.11"/>
+</g>
+<!-- 2,3 -->
+<g id="node76" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5319" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-5330.17" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-5311 462,-5325 507,-5325 507,-5311 462,-5311"/>
+<text text-anchor="start" x="468" y="-5315.67" font-family="Times Roman,serif" font-size="10.00">TCGCA</text>
+<polygon fill="#218559" stroke="#218559" points="462,-5297 462,-5311 507,-5311 507,-5297 462,-5297"/>
+<text text-anchor="start" x="467.5" y="-5301.67" font-family="Times Roman,serif" font-size="10.00">TGCGA</text>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge50" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M392.398,-5312.67C404.741,-5312.23 418.377,-5312.14 431.273,-5312.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="431.326,-5315.89 441.417,-5312.67 431.517,-5308.89 431.326,-5315.89"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge58" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M441.417,-5325.33C429.062,-5325.77 415.424,-5325.86 402.535,-5325.61"/>
+<polygon fill="#218559" stroke="#218559" points="402.491,-5322.11 392.398,-5325.33 402.298,-5329.1 402.491,-5322.11"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge56" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M526.398,-5312.67C538.741,-5312.23 552.377,-5312.14 565.273,-5312.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="565.326,-5315.89 575.417,-5312.67 565.517,-5308.89 565.326,-5315.89"/>
+</g>
+<!-- 2,4->1,2 -->
+<g id="edge60" class="edge"><title>2,4->1,2</title>
+<path fill="none" stroke="#ebb035" d="M604.961,-5353.38C585.726,-5404.09 552,-5493 552,-5493 552,-5493 282,-5493 282,-5493 282,-5493 264.575,-5472.41 247.632,-5452.38"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="250.083,-5449.86 240.952,-5444.49 244.739,-5454.38 250.083,-5449.86"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge62" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M575.417,-5325.33C563.062,-5325.77 549.424,-5325.86 536.535,-5325.61"/>
+<polygon fill="#218559" stroke="#218559" points="536.491,-5322.11 526.398,-5325.33 536.298,-5329.1 536.491,-5322.11"/>
+</g>
+<!-- 5,1 -->
+<g id="node79" class="node"><title>5,1</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-2498" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-2509.17" font-family="Times Roman,serif" font-size="10.00">5,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-2490 730,-2504 775,-2504 775,-2490 730,-2490"/>
+<text text-anchor="start" x="735" y="-2494.67" font-family="Times Roman,serif" font-size="10.00">AGCAA</text>
+<polygon fill="#218559" stroke="#218559" points="730,-2476 730,-2490 775,-2490 775,-2476 730,-2476"/>
+<text text-anchor="start" x="737.5" y="-2480.67" font-family="Times Roman,serif" font-size="10.00">TTGCT</text>
+</g>
+<!-- 5,2 -->
+<g id="node80" class="node"><title>5,2</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-2498" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-2509.17" font-family="Times Roman,serif" font-size="10.00">5,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-2490 864,-2504 909,-2504 909,-2490 864,-2490"/>
+<text text-anchor="start" x="869" y="-2494.67" font-family="Times Roman,serif" font-size="10.00">GCAAC</text>
+<polygon fill="#218559" stroke="#218559" points="864,-2476 864,-2490 909,-2490 909,-2476 864,-2476"/>
+<text text-anchor="start" x="870.5" y="-2480.67" font-family="Times Roman,serif" font-size="10.00">GTTGC</text>
+</g>
+<!-- 5,1->5,2 -->
+<g id="edge480" class="edge"><title>5,1->5,2</title>
+<path fill="none" stroke="#dd1e2f" d="M794.398,-2491.67C806.741,-2491.23 820.377,-2491.14 833.273,-2491.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.326,-2494.89 843.417,-2491.67 833.517,-2487.89 833.326,-2494.89"/>
+</g>
+<!-- 6,3 -->
+<g id="node96" class="node"><title>6,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3131" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-3142.17" font-family="Times Roman,serif" font-size="10.00">6,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-3123 864,-3137 909,-3137 909,-3123 864,-3123"/>
+<text text-anchor="start" x="870" y="-3127.67" font-family="Times Roman,serif" font-size="10.00">TGCTG</text>
+<polygon fill="#218559" stroke="#218559" points="864,-3109 864,-3123 909,-3123 909,-3109 864,-3109"/>
+<text text-anchor="start" x="869" y="-3113.67" font-family="Times Roman,serif" font-size="10.00">CAGCA</text>
+</g>
+<!-- 5,1->6,3 -->
+<g id="edge482" class="edge"><title>5,1->6,3</title>
+<path fill="none" stroke="#06a2cb" d="M762.141,-2533.13C778.279,-2589.04 808,-2692 808,-2692 808,-2692 820,-2810 820,-2810 820,-2810 830,-3083 830,-3083 830,-3083 837.944,-3089.81 847.849,-3098.3"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="845.835,-3101.18 855.705,-3105.03 850.391,-3095.87 845.835,-3101.18"/>
+</g>
+<!-- 5,2->5,1 -->
+<g id="edge488" class="edge"><title>5,2->5,1</title>
+<path fill="none" stroke="#218559" d="M843.417,-2504.33C831.062,-2504.77 817.424,-2504.86 804.535,-2504.61"/>
+<polygon fill="#218559" stroke="#218559" points="804.491,-2501.11 794.398,-2504.33 804.298,-2508.1 804.491,-2501.11"/>
+</g>
+<!-- 5,3 -->
+<g id="node81" class="node"><title>5,3</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-2498" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1000.5" y="-2509.17" font-family="Times Roman,serif" font-size="10.00">5,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="998,-2490 998,-2504 1043,-2504 1043,-2490 998,-2490"/>
+<text text-anchor="start" x="1003.5" y="-2494.67" font-family="Times Roman,serif" font-size="10.00">CAACC</text>
+<polygon fill="#218559" stroke="#218559" points="998,-2476 998,-2490 1043,-2490 1043,-2476 998,-2476"/>
+<text text-anchor="start" x="1004" y="-2480.67" font-family="Times Roman,serif" font-size="10.00">GGTTG</text>
+</g>
+<!-- 5,2->5,3 -->
+<g id="edge484" class="edge"><title>5,2->5,3</title>
+<path fill="none" stroke="#dd1e2f" d="M928.398,-2491.67C940.741,-2491.23 954.377,-2491.14 967.273,-2491.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="967.326,-2494.89 977.417,-2491.67 967.517,-2487.89 967.326,-2494.89"/>
+</g>
+<!-- 4,4 -->
+<g id="node87" class="node"><title>4,4</title>
+<ellipse fill="none" stroke="black" cx="1288" cy="-1444" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1268.5" y="-1455.17" font-family="Times Roman,serif" font-size="10.00">4,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1266,-1436 1266,-1450 1311,-1450 1311,-1436 1266,-1436"/>
+<text text-anchor="start" x="1272" y="-1440.67" font-family="Times Roman,serif" font-size="10.00">GGTTG</text>
+<polygon fill="#218559" stroke="#218559" points="1266,-1422 1266,-1436 1311,-1436 1311,-1422 1266,-1422"/>
+<text text-anchor="start" x="1271.5" y="-1426.67" font-family="Times Roman,serif" font-size="10.00">CAACC</text>
+</g>
+<!-- 5,2->4,4 -->
+<g id="edge486" class="edge"><title>5,2->4,4</title>
+<path fill="none" stroke="#ebb035" d="M916.295,-2472.03C929.489,-2460.72 942,-2450 942,-2450 942,-2450 954,-2353 954,-2353 954,-2353 964,-2258 964,-2258 964,-2258 1210,-2211 1210,-2211 1210,-2211 1222,-2096 1222,-2096 1222,-2096 1268.27,-1638.87 1283.33,-1490.15"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1286.83,-1490.28 1284.36,-1479.98 1279.87,-1489.58 1286.83,-1490.28"/>
+</g>
+<!-- 5,3->5,2 -->
+<g id="edge494" class="edge"><title>5,3->5,2</title>
+<path fill="none" stroke="#218559" d="M977.417,-2504.33C965.062,-2504.77 951.424,-2504.86 938.535,-2504.61"/>
+<polygon fill="#218559" stroke="#218559" points="938.491,-2501.11 928.398,-2504.33 938.298,-2508.1 938.491,-2501.11"/>
+</g>
+<!-- 5,4 -->
+<g id="node82" class="node"><title>5,4</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-2498" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1134.5" y="-2509.17" font-family="Times Roman,serif" font-size="10.00">5,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1132,-2490 1132,-2504 1177,-2504 1177,-2490 1132,-2490"/>
+<text text-anchor="start" x="1137.5" y="-2494.67" font-family="Times Roman,serif" font-size="10.00">AACCC</text>
+<polygon fill="#218559" stroke="#218559" points="1132,-2476 1132,-2490 1177,-2490 1177,-2476 1132,-2476"/>
+<text text-anchor="start" x="1138" y="-2480.67" font-family="Times Roman,serif" font-size="10.00">GGGTT</text>
+</g>
+<!-- 5,3->5,4 -->
+<g id="edge490" class="edge"><title>5,3->5,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1062.4,-2491.67C1074.74,-2491.23 1088.38,-2491.14 1101.27,-2491.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1101.33,-2494.89 1111.42,-2491.67 1101.52,-2487.89 1101.33,-2494.89"/>
+</g>
+<!-- 6,1 -->
+<g id="node94" class="node"><title>6,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3131" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-3142.17" font-family="Times Roman,serif" font-size="10.00">6,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-3123 596,-3137 641,-3137 641,-3123 596,-3123"/>
+<text text-anchor="start" x="602.5" y="-3127.67" font-family="Times Roman,serif" font-size="10.00">GTTGC</text>
+<polygon fill="#218559" stroke="#218559" points="596,-3109 596,-3123 641,-3123 641,-3109 596,-3109"/>
+<text text-anchor="start" x="601" y="-3113.67" font-family="Times Roman,serif" font-size="10.00">GCAAC</text>
+</g>
+<!-- 5,3->6,1 -->
+<g id="edge492" class="edge"><title>5,3->6,1</title>
+<path fill="none" stroke="#06a2cb" d="M988.4,-2522.83C975.697,-2532.81 964,-2542 964,-2542 964,-2542 942,-2577 942,-2577 942,-2577 830,-2615 830,-2615 830,-2615 808,-2636 808,-2636 808,-2636 696,-2692 696,-2692 696,-2692 686,-2881 686,-2881 686,-2881 674,-3083 674,-3083 674,-3083 666.056,-3089.81 656.151,-3098.3"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="653.609,-3095.87 648.295,-3105.03 658.165,-3101.18 653.609,-3095.87"/>
+</g>
+<!-- 5,4->5,3 -->
+<g id="edge498" class="edge"><title>5,4->5,3</title>
+<path fill="none" stroke="#218559" d="M1111.42,-2504.33C1099.06,-2504.77 1085.42,-2504.86 1072.54,-2504.61"/>
+<polygon fill="#218559" stroke="#218559" points="1072.49,-2501.11 1062.4,-2504.33 1072.3,-2508.1 1072.49,-2501.11"/>
+</g>
+<!-- 4,2 -->
+<g id="node85" class="node"><title>4,2</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1444" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1000.5" y="-1455.17" font-family="Times Roman,serif" font-size="10.00">4,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="998,-1436 998,-1450 1043,-1450 1043,-1436 998,-1436"/>
+<text text-anchor="start" x="1003.5" y="-1440.67" font-family="Times Roman,serif" font-size="10.00">AGGGT</text>
+<polygon fill="#218559" stroke="#218559" points="998,-1422 998,-1436 1043,-1436 1043,-1422 998,-1422"/>
+<text text-anchor="start" x="1004" y="-1426.67" font-family="Times Roman,serif" font-size="10.00">ACCCT</text>
+</g>
+<!-- 5,4->4,2 -->
+<g id="edge496" class="edge"><title>5,4->4,2</title>
+<path fill="none" stroke="#ebb035" d="M1142.38,-2463.14C1128.17,-2420.52 1106,-2354 1106,-2354 1106,-2354 1086,-1913 1086,-1913 1086,-1913 1076,-1684 1076,-1684 1076,-1684 1046.78,-1558.79 1030.56,-1489.25"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1033.94,-1488.36 1028.26,-1479.41 1027.13,-1489.95 1033.94,-1488.36"/>
+</g>
+<!-- 4,1 -->
+<g id="node84" class="node"><title>4,1</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1444" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-1455.17" font-family="Times Roman,serif" font-size="10.00">4,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-1436 864,-1450 909,-1450 909,-1436 864,-1436"/>
+<text text-anchor="start" x="868" y="-1440.67" font-family="Times Roman,serif" font-size="10.00">GAGGG</text>
+<polygon fill="#218559" stroke="#218559" points="864,-1422 864,-1436 909,-1436 909,-1422 864,-1422"/>
+<text text-anchor="start" x="870.5" y="-1426.67" font-family="Times Roman,serif" font-size="10.00">CCCTC</text>
+</g>
+<!-- 4,1->4,2 -->
+<g id="edge64" class="edge"><title>4,1->4,2</title>
+<path fill="none" stroke="#dd1e2f" d="M928.398,-1437.67C940.741,-1437.23 954.377,-1437.14 967.273,-1437.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="967.326,-1440.89 977.417,-1437.67 967.517,-1433.89 967.326,-1440.89"/>
+</g>
+<!-- 4,2->5,4 -->
+<g id="edge68" class="edge"><title>4,2->5,4</title>
+<path fill="none" stroke="#ebb035" d="M1028.26,-1479.41C1043.84,-1546.17 1076,-1684 1076,-1684 1076,-1684 1088,-1915 1088,-1915 1088,-1915 1106,-2354 1106,-2354 1106,-2354 1125.09,-2411.26 1139.19,-2453.56"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1135.9,-2454.76 1142.38,-2463.14 1142.54,-2452.55 1135.9,-2454.76"/>
+</g>
+<!-- 4,2->4,1 -->
+<g id="edge70" class="edge"><title>4,2->4,1</title>
+<path fill="none" stroke="#218559" d="M977.417,-1450.33C965.062,-1450.77 951.424,-1450.86 938.535,-1450.61"/>
+<polygon fill="#218559" stroke="#218559" points="938.491,-1447.11 928.398,-1450.33 938.298,-1454.1 938.491,-1447.11"/>
+</g>
+<!-- 4,2->4,3 -->
+<g id="edge66" class="edge"><title>4,2->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1062.4,-1437.67C1074.74,-1437.23 1088.38,-1437.14 1101.27,-1437.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1101.33,-1440.89 1111.42,-1437.67 1101.52,-1433.89 1101.33,-1440.89"/>
+</g>
+<!-- 4,3->3,4 -->
+<g id="edge74" class="edge"><title>4,3->3,4</title>
+<path fill="none" stroke="#218559" d="M1148.63,-1408C1136.11,-1323.98 1106,-1122 1106,-1122 1106,-1122 1088,-453 1088,-453 1088,-453 1045.65,-203.273 1027.79,-97.9643"/>
+<polygon fill="#218559" stroke="#218559" points="1031.22,-97.213 1026.09,-87.939 1024.32,-98.3834 1031.22,-97.213"/>
+</g>
+<!-- 4,3->4,2 -->
+<g id="edge76" class="edge"><title>4,3->4,2</title>
+<path fill="none" stroke="#218559" d="M1111.42,-1450.33C1099.06,-1450.77 1085.42,-1450.86 1072.54,-1450.61"/>
+<polygon fill="#218559" stroke="#218559" points="1072.49,-1447.11 1062.4,-1450.33 1072.3,-1454.1 1072.49,-1447.11"/>
+</g>
+<!-- 4,3->4,4 -->
+<g id="edge72" class="edge"><title>4,3->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1196.4,-1437.67C1208.74,-1437.23 1222.38,-1437.14 1235.27,-1437.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1235.33,-1440.89 1245.42,-1437.67 1235.52,-1433.89 1235.33,-1440.89"/>
+</g>
+<!-- 4,4->5,2 -->
+<g id="edge78" class="edge"><title>4,4->5,2</title>
+<path fill="none" stroke="#ebb035" d="M1284.24,-1479.88C1268.66,-1628.5 1210,-2188 1210,-2188 1210,-2188 964,-2228 964,-2228 964,-2228 942,-2450 942,-2450 942,-2450 934.056,-2456.81 924.151,-2465.3"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="921.609,-2462.87 916.295,-2472.03 926.165,-2468.18 921.609,-2462.87"/>
+</g>
+<!-- 4,4->4,3 -->
+<g id="edge80" class="edge"><title>4,4->4,3</title>
+<path fill="none" stroke="#218559" d="M1245.42,-1450.33C1233.06,-1450.77 1219.42,-1450.86 1206.54,-1450.61"/>
+<polygon fill="#218559" stroke="#218559" points="1206.49,-1447.11 1196.4,-1450.33 1206.3,-1454.1 1206.49,-1447.11"/>
+</g>
+<!-- 7,1->24,2 -->
+<g id="edge504" class="edge"><title>7,1->24,2</title>
+<path fill="none" stroke="#06a2cb" d="M514.295,-4654.97C527.489,-4666.28 540,-4677 540,-4677 540,-4677 562,-5072 562,-5072 562,-5072 569.283,-5078.24 578.596,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="576.529,-5089.06 586.4,-5092.91 581.085,-5083.75 576.529,-5089.06"/>
+</g>
+<!-- 7,1->23,1 -->
+<g id="edge508" class="edge"><title>7,1->23,1</title>
+<path fill="none" stroke="#218559" d="M451.161,-4652.53C433.641,-4665.08 411.867,-4680.68 393.012,-4694.19"/>
+<polygon fill="#218559" stroke="#218559" points="390.948,-4691.36 384.857,-4700.03 395.025,-4697.05 390.948,-4691.36"/>
+</g>
+<!-- 7,1->7,2 -->
+<g id="edge500" class="edge"><title>7,1->7,2</title>
+<path fill="none" stroke="#dd1e2f" d="M526.398,-4622.67C538.741,-4622.23 552.377,-4622.14 565.273,-4622.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="565.326,-4625.89 575.417,-4622.67 565.517,-4618.89 565.326,-4625.89"/>
+</g>
+<!-- 8,3 -->
+<g id="node106" class="node"><title>8,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-5024" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-5035.17" font-family="Times Roman,serif" font-size="10.00">8,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-5016 596,-5030 641,-5030 641,-5016 596,-5016"/>
+<text text-anchor="start" x="602" y="-5020.67" font-family="Times Roman,serif" font-size="10.00">GAAAT</text>
+<polygon fill="#218559" stroke="#218559" points="596,-5002 596,-5016 641,-5016 641,-5002 596,-5002"/>
+<text text-anchor="start" x="604.5" y="-5006.67" font-family="Times Roman,serif" font-size="10.00">ATTTC</text>
+</g>
+<!-- 7,1->8,3 -->
+<g id="edge502" class="edge"><title>7,1->8,3</title>
+<path fill="none" stroke="#06a2cb" d="M513.64,-4602.54C527.072,-4590.54 540,-4579 540,-4579 540,-4579 550,-4340 550,-4340 550,-4340 552,-4340 552,-4340 552,-4340 562,-4773 562,-4773 562,-4773 591.791,-4906.53 607.915,-4978.8"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="604.502,-4979.57 610.095,-4988.57 611.334,-4978.05 604.502,-4979.57"/>
+</g>
+<!-- 18,2 -->
+<g id="node155" class="node"><title>18,2</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-4463" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-4474.17" font-family="Times Roman,serif" font-size="10.00">18,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-4455 325,-4469 376,-4469 376,-4455 325,-4455"/>
+<text text-anchor="start" x="336" y="-4459.67" font-family="Times Roman,serif" font-size="10.00">GTTTC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-4441 325,-4455 376,-4455 376,-4441 325,-4441"/>
+<text text-anchor="start" x="333" y="-4445.67" font-family="Times Roman,serif" font-size="10.00">GAAAC</text>
+</g>
+<!-- 7,1->18,2 -->
+<g id="edge506" class="edge"><title>7,1->18,2</title>
+<path fill="none" stroke="#218559" d="M468.102,-4595.5C451.546,-4560.62 428,-4511 428,-4511 428,-4511 418,-4336 418,-4336 418,-4336 416,-4336 416,-4336 416,-4336 391.411,-4383.32 372.25,-4420.19"/>
+<polygon fill="#218559" stroke="#218559" points="369.019,-4418.81 367.514,-4429.3 375.231,-4422.04 369.019,-4418.81"/>
+</g>
+<!-- 7,2->24,1 -->
+<g id="edge514" class="edge"><title>7,2->24,1</title>
+<path fill="none" stroke="#06a2cb" d="M587.705,-4654.97C574.511,-4666.28 562,-4677 562,-4677 562,-4677 552,-4873 552,-4873 552,-4873 550,-4901 550,-4901 550,-4901 540,-5072 540,-5072 540,-5072 532.717,-5078.24 523.404,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="520.915,-5083.75 515.6,-5092.91 525.471,-5089.06 520.915,-5083.75"/>
+</g>
+<!-- 7,2->7,1 -->
+<g id="edge516" class="edge"><title>7,2->7,1</title>
+<path fill="none" stroke="#218559" d="M575.417,-4635.33C563.062,-4635.77 549.424,-4635.86 536.535,-4635.61"/>
+<polygon fill="#218559" stroke="#218559" points="536.491,-4632.11 526.398,-4635.33 536.298,-4639.1 536.491,-4632.11"/>
+</g>
+<!-- 7,3 -->
+<g id="node91" class="node"><title>7,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-4629" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-4640.17" font-family="Times Roman,serif" font-size="10.00">7,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-4621 730,-4635 775,-4635 775,-4621 730,-4621"/>
+<text text-anchor="start" x="736" y="-4625.67" font-family="Times Roman,serif" font-size="10.00">TCAGC</text>
+<polygon fill="#218559" stroke="#218559" points="730,-4607 730,-4621 775,-4621 775,-4607 730,-4607"/>
+<text text-anchor="start" x="735.5" y="-4611.67" font-family="Times Roman,serif" font-size="10.00">GCTGA</text>
+</g>
+<!-- 7,2->7,3 -->
+<g id="edge510" class="edge"><title>7,2->7,3</title>
+<path fill="none" stroke="#dd1e2f" d="M660.398,-4622.67C672.741,-4622.23 686.377,-4622.14 699.273,-4622.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="699.326,-4625.89 709.417,-4622.67 699.517,-4618.89 699.326,-4625.89"/>
+</g>
+<!-- 6,4 -->
+<g id="node97" class="node"><title>6,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-3131" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1000.5" y="-3142.17" font-family="Times Roman,serif" font-size="10.00">6,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="998,-3123 998,-3137 1043,-3137 1043,-3123 998,-3123"/>
+<text text-anchor="start" x="1003.5" y="-3127.67" font-family="Times Roman,serif" font-size="10.00">GCTGA</text>
+<polygon fill="#218559" stroke="#218559" points="998,-3109 998,-3123 1043,-3123 1043,-3109 998,-3109"/>
+<text text-anchor="start" x="1004" y="-3113.67" font-family="Times Roman,serif" font-size="10.00">TCAGC</text>
+</g>
+<!-- 7,2->6,4 -->
+<g id="edge512" class="edge"><title>7,2->6,4</title>
+<path fill="none" stroke="#ebb035" d="M653.804,-4608.34C674.309,-4596.51 696,-4584 696,-4584 696,-4584 808,-4541 808,-4541 808,-4541 820,-4518 820,-4518 820,-4518 942,-4081 942,-4081 942,-4081 1000.55,-3367.83 1016.2,-3177.32"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1019.71,-3177.33 1017.04,-3167.08 1012.73,-3176.76 1019.71,-3177.33"/>
+</g>
+<!-- 7,3->7,2 -->
+<g id="edge522" class="edge"><title>7,3->7,2</title>
+<path fill="none" stroke="#218559" d="M709.417,-4635.33C697.062,-4635.77 683.424,-4635.86 670.535,-4635.61"/>
+<polygon fill="#218559" stroke="#218559" points="670.491,-4632.11 660.398,-4635.33 670.298,-4639.1 670.491,-4632.11"/>
+</g>
+<!-- 7,4 -->
+<g id="node92" class="node"><title>7,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-4629" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-4640.17" font-family="Times Roman,serif" font-size="10.00">7,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-4621 864,-4635 909,-4635 909,-4621 864,-4621"/>
+<text text-anchor="start" x="869" y="-4625.67" font-family="Times Roman,serif" font-size="10.00">CAGCA</text>
+<polygon fill="#218559" stroke="#218559" points="864,-4607 864,-4621 909,-4621 909,-4607 864,-4607"/>
+<text text-anchor="start" x="870" y="-4611.67" font-family="Times Roman,serif" font-size="10.00">TGCTG</text>
+</g>
+<!-- 7,3->7,4 -->
+<g id="edge518" class="edge"><title>7,3->7,4</title>
+<path fill="none" stroke="#dd1e2f" d="M794.398,-4622.67C806.741,-4622.23 820.377,-4622.14 833.273,-4622.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.326,-4625.89 843.417,-4622.67 833.517,-4618.89 833.326,-4625.89"/>
+</g>
+<!-- 7,3->8,1 -->
+<g id="edge520" class="edge"><title>7,3->8,1</title>
+<path fill="none" stroke="#06a2cb" d="M739.294,-4594.14C717.192,-4533.5 674,-4415 674,-4415 674,-4415 552,-4311 552,-4311 552,-4311 550,-4311 550,-4311 550,-4311 540,-4545 540,-4545 540,-4545 428,-4584 428,-4584 428,-4584 398,-4773 398,-4773 398,-4773 372.635,-4905.64 358.782,-4978.08"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="355.267,-4977.82 356.826,-4988.3 362.142,-4979.14 355.267,-4977.82"/>
+</g>
+<!-- 7,4->7,3 -->
+<g id="edge526" class="edge"><title>7,4->7,3</title>
+<path fill="none" stroke="#218559" d="M843.417,-4635.33C831.062,-4635.77 817.424,-4635.86 804.535,-4635.61"/>
+<polygon fill="#218559" stroke="#218559" points="804.491,-4632.11 794.398,-4635.33 804.298,-4639.1 804.491,-4632.11"/>
+</g>
+<!-- 6,2 -->
+<g id="node95" class="node"><title>6,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3131" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-3142.17" font-family="Times Roman,serif" font-size="10.00">6,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-3123 730,-3137 775,-3137 775,-3123 730,-3123"/>
+<text text-anchor="start" x="737.5" y="-3127.67" font-family="Times Roman,serif" font-size="10.00">TTGCT</text>
+<polygon fill="#218559" stroke="#218559" points="730,-3109 730,-3123 775,-3123 775,-3109 730,-3109"/>
+<text text-anchor="start" x="735" y="-3113.67" font-family="Times Roman,serif" font-size="10.00">AGCAA</text>
+</g>
+<!-- 7,4->6,2 -->
+<g id="edge524" class="edge"><title>7,4->6,2</title>
+<path fill="none" stroke="#ebb035" d="M883.839,-4593.04C873.548,-4421.76 830,-3697 830,-3697 830,-3697 808,-3186 808,-3186 808,-3186 798.399,-3176.57 787.148,-3165.52"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="789.587,-3163.01 780,-3158.5 784.682,-3168 789.587,-3163.01"/>
+</g>
+<!-- 6,1->5,3 -->
+<g id="edge84" class="edge"><title>6,1->5,3</title>
+<path fill="none" stroke="#06a2cb" d="M648.295,-3105.03C661.489,-3093.72 674,-3083 674,-3083 674,-3083 696,-2650 696,-2650 696,-2650 818,-2587 818,-2587 818,-2587 942,-2543 942,-2543 942,-2543 957.73,-2533.93 975.061,-2523.93"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="977.283,-2526.69 984.196,-2518.66 973.785,-2520.62 977.283,-2526.69"/>
+</g>
+<!-- 6,1->6,2 -->
+<g id="edge82" class="edge"><title>6,1->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M660.398,-3124.67C672.741,-3124.23 686.377,-3124.14 699.273,-3124.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="699.326,-3127.89 709.417,-3124.67 699.517,-3120.89 699.326,-3127.89"/>
+</g>
+<!-- 6,2->7,4 -->
+<g id="edge88" class="edge"><title>6,2->7,4</title>
+<path fill="none" stroke="#ebb035" d="M790.372,-3147.93C805.796,-3154.73 820,-3161 820,-3161 820,-3161 830,-3697 830,-3697 830,-3697 871.947,-4395.11 883.232,-4582.94"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="879.745,-4583.26 883.839,-4593.04 886.733,-4582.84 879.745,-4583.26"/>
+</g>
+<!-- 6,2->6,1 -->
+<g id="edge90" class="edge"><title>6,2->6,1</title>
+<path fill="none" stroke="#218559" d="M709.417,-3137.33C697.062,-3137.77 683.424,-3137.86 670.535,-3137.61"/>
+<polygon fill="#218559" stroke="#218559" points="670.491,-3134.11 660.398,-3137.33 670.298,-3141.1 670.491,-3134.11"/>
+</g>
+<!-- 6,2->6,3 -->
+<g id="edge86" class="edge"><title>6,2->6,3</title>
+<path fill="none" stroke="#dd1e2f" d="M794.398,-3124.67C806.741,-3124.23 820.377,-3124.14 833.273,-3124.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.326,-3127.89 843.417,-3124.67 833.517,-3120.89 833.326,-3127.89"/>
+</g>
+<!-- 6,3->5,1 -->
+<g id="edge94" class="edge"><title>6,3->5,1</title>
+<path fill="none" stroke="#06a2cb" d="M855.705,-3105.03C842.511,-3093.72 830,-3083 830,-3083 830,-3083 820,-2834 820,-2834 820,-2834 808,-2692 808,-2692 808,-2692 781.55,-2600.37 765.006,-2543.06"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="768.277,-2541.77 762.141,-2533.13 761.552,-2543.71 768.277,-2541.77"/>
+</g>
+<!-- 6,3->6,2 -->
+<g id="edge96" class="edge"><title>6,3->6,2</title>
+<path fill="none" stroke="#218559" d="M843.417,-3137.33C831.062,-3137.77 817.424,-3137.86 804.535,-3137.61"/>
+<polygon fill="#218559" stroke="#218559" points="804.491,-3134.11 794.398,-3137.33 804.298,-3141.1 804.491,-3134.11"/>
+</g>
+<!-- 6,3->6,4 -->
+<g id="edge92" class="edge"><title>6,3->6,4</title>
+<path fill="none" stroke="#dd1e2f" d="M928.398,-3124.67C940.741,-3124.23 954.377,-3124.14 967.273,-3124.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="967.326,-3127.89 977.417,-3124.67 967.517,-3120.89 967.326,-3127.89"/>
+</g>
+<!-- 6,4->7,2 -->
+<g id="edge98" class="edge"><title>6,4->7,2</title>
+<path fill="none" stroke="#ebb035" d="M1015.06,-3166.84C997.916,-3291.25 942,-3697 942,-3697 942,-3697 820,-4503 820,-4503 820,-4503 684,-4551 684,-4551 684,-4551 674,-4579 674,-4579 674,-4579 665.629,-4586.47 655.36,-4595.64"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="652.768,-4593.26 647.64,-4602.54 657.43,-4598.49 652.768,-4593.26"/>
+</g>
+<!-- 6,4->6,3 -->
+<g id="edge100" class="edge"><title>6,4->6,3</title>
+<path fill="none" stroke="#218559" d="M977.417,-3137.33C965.062,-3137.77 951.424,-3137.86 938.535,-3137.61"/>
+<polygon fill="#218559" stroke="#218559" points="938.491,-3134.11 928.398,-3137.33 938.298,-3141.1 938.491,-3134.11"/>
+</g>
+<!-- 9,1 -->
+<g id="node99" class="node"><title>9,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3483" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-3494.17" font-family="Times Roman,serif" font-size="10.00">9,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-3475 462,-3489 507,-3489 507,-3475 462,-3475"/>
+<text text-anchor="start" x="468" y="-3479.67" font-family="Times Roman,serif" font-size="10.00">CAGAT</text>
+<polygon fill="#218559" stroke="#218559" points="462,-3461 462,-3475 507,-3475 507,-3461 462,-3461"/>
+<text text-anchor="start" x="469" y="-3465.67" font-family="Times Roman,serif" font-size="10.00">ATCTG</text>
+</g>
+<!-- 9,2 -->
+<g id="node100" class="node"><title>9,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3483" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="598.5" y="-3494.17" font-family="Times Roman,serif" font-size="10.00">9,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="596,-3475 596,-3489 641,-3489 641,-3475 596,-3475"/>
+<text text-anchor="start" x="603" y="-3479.67" font-family="Times Roman,serif" font-size="10.00">AGATT</text>
+<polygon fill="#218559" stroke="#218559" points="596,-3461 596,-3475 641,-3475 641,-3461 596,-3461"/>
+<text text-anchor="start" x="603.5" y="-3465.67" font-family="Times Roman,serif" font-size="10.00">AATCT</text>
+</g>
+<!-- 9,1->9,2 -->
+<g id="edge528" class="edge"><title>9,1->9,2</title>
+<path fill="none" stroke="#dd1e2f" d="M526.398,-3476.67C538.741,-3476.23 552.377,-3476.14 565.273,-3476.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="565.326,-3479.89 575.417,-3476.67 565.517,-3472.89 565.326,-3479.89"/>
+</g>
+<!-- 10,2 -->
+<g id="node115" class="node"><title>10,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3035" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-3046.17" font-family="Times Roman,serif" font-size="10.00">10,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-3027 593,-3041 644,-3041 644,-3027 593,-3027"/>
+<text text-anchor="start" x="600.5" y="-3031.67" font-family="Times Roman,serif" font-size="10.00">GCAGA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-3013 593,-3027 644,-3027 644,-3013 593,-3013"/>
+<text text-anchor="start" x="603" y="-3017.67" font-family="Times Roman,serif" font-size="10.00">TCTGC</text>
+</g>
+<!-- 9,1->10,2 -->
+<g id="edge530" class="edge"><title>9,1->10,2</title>
+<path fill="none" stroke="#218559" d="M493.883,-3447.53C509.959,-3389.82 540,-3282 540,-3282 540,-3282 552,-3197 552,-3197 552,-3197 562,-3083 562,-3083 562,-3083 569.283,-3076.76 578.596,-3068.78"/>
+<polygon fill="#218559" stroke="#218559" points="581.085,-3071.25 586.4,-3062.09 576.529,-3065.94 581.085,-3071.25"/>
+</g>
+<!-- 9,2->9,1 -->
+<g id="edge536" class="edge"><title>9,2->9,1</title>
+<path fill="none" stroke="#218559" d="M575.417,-3489.33C563.062,-3489.77 549.424,-3489.86 536.535,-3489.61"/>
+<polygon fill="#218559" stroke="#218559" points="536.491,-3486.11 526.398,-3489.33 536.298,-3493.1 536.491,-3486.11"/>
+</g>
+<!-- 9,3 -->
+<g id="node101" class="node"><title>9,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3483" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-3494.17" font-family="Times Roman,serif" font-size="10.00">9,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-3475 730,-3489 775,-3489 775,-3475 730,-3475"/>
+<text text-anchor="start" x="738" y="-3479.67" font-family="Times Roman,serif" font-size="10.00">GATTT</text>
+<polygon fill="#218559" stroke="#218559" points="730,-3461 730,-3475 775,-3475 775,-3461 730,-3461"/>
+<text text-anchor="start" x="736.5" y="-3465.67" font-family="Times Roman,serif" font-size="10.00">AAATC</text>
+</g>
+<!-- 9,2->9,3 -->
+<g id="edge532" class="edge"><title>9,2->9,3</title>
+<path fill="none" stroke="#dd1e2f" d="M660.398,-3476.67C672.741,-3476.23 686.377,-3476.14 699.273,-3476.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="699.326,-3479.89 709.417,-3476.67 699.517,-3472.89 699.326,-3479.89"/>
+</g>
+<!-- 8,4 -->
+<g id="node107" class="node"><title>8,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-5024" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="732.5" y="-5035.17" font-family="Times Roman,serif" font-size="10.00">8,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730,-5016 730,-5030 775,-5030 775,-5016 730,-5016"/>
+<text text-anchor="start" x="736.5" y="-5020.67" font-family="Times Roman,serif" font-size="10.00">AAATC</text>
+<polygon fill="#218559" stroke="#218559" points="730,-5002 730,-5016 775,-5016 775,-5002 730,-5002"/>
+<text text-anchor="start" x="738" y="-5006.67" font-family="Times Roman,serif" font-size="10.00">GATTT</text>
+</g>
+<!-- 9,2->8,4 -->
+<g id="edge534" class="edge"><title>9,2->8,4</title>
+<path fill="none" stroke="#ebb035" d="M633.898,-3516.5C650.454,-3551.38 674,-3601 674,-3601 674,-3601 686,-3822 686,-3822 686,-3822 696,-4773 696,-4773 696,-4773 725.791,-4906.53 741.915,-4978.8"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="738.502,-4979.57 744.095,-4988.57 745.334,-4978.05 738.502,-4979.57"/>
+</g>
+<!-- 9,3->9,2 -->
+<g id="edge542" class="edge"><title>9,3->9,2</title>
+<path fill="none" stroke="#218559" d="M709.417,-3489.33C697.062,-3489.77 683.424,-3489.86 670.535,-3489.61"/>
+<polygon fill="#218559" stroke="#218559" points="670.491,-3486.11 660.398,-3489.33 670.298,-3493.1 670.491,-3486.11"/>
+</g>
+<!-- 9,4 -->
+<g id="node102" class="node"><title>9,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3483" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="866.5" y="-3494.17" font-family="Times Roman,serif" font-size="10.00">9,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="864,-3475 864,-3489 909,-3489 909,-3475 864,-3475"/>
+<text text-anchor="start" x="872.5" y="-3479.67" font-family="Times Roman,serif" font-size="10.00">ATTTC</text>
+<polygon fill="#218559" stroke="#218559" points="864,-3461 864,-3475 909,-3475 909,-3461 864,-3461"/>
+<text text-anchor="start" x="870" y="-3465.67" font-family="Times Roman,serif" font-size="10.00">GAAAT</text>
+</g>
+<!-- 9,3->9,4 -->
+<g id="edge538" class="edge"><title>9,3->9,4</title>
+<path fill="none" stroke="#dd1e2f" d="M794.398,-3476.67C806.741,-3476.23 820.377,-3476.14 833.273,-3476.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="833.326,-3479.89 843.417,-3476.67 833.517,-3472.89 833.326,-3479.89"/>
+</g>
+<!-- 10,4 -->
+<g id="node117" class="node"><title>10,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-3035" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-3046.17" font-family="Times Roman,serif" font-size="10.00">10,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-3027 861,-3041 912,-3041 912,-3027 861,-3027"/>
+<text text-anchor="start" x="871" y="-3031.67" font-family="Times Roman,serif" font-size="10.00">AGATT</text>
+<polygon fill="#218559" stroke="#218559" points="861,-3013 861,-3027 912,-3027 912,-3013 861,-3013"/>
+<text text-anchor="start" x="871.5" y="-3017.67" font-family="Times Roman,serif" font-size="10.00">AATCT</text>
+</g>
+<!-- 9,3->10,4 -->
+<g id="edge540" class="edge"><title>9,3->10,4</title>
+<path fill="none" stroke="#218559" d="M761.883,-3447.53C777.959,-3389.82 808,-3282 808,-3282 808,-3282 820,-3197 820,-3197 820,-3197 830,-3083 830,-3083 830,-3083 837.283,-3076.76 846.596,-3068.78"/>
+<polygon fill="#218559" stroke="#218559" points="849.085,-3071.25 854.4,-3062.09 844.529,-3065.94 849.085,-3071.25"/>
+</g>
+<!-- 9,4->9,3 -->
+<g id="edge546" class="edge"><title>9,4->9,3</title>
+<path fill="none" stroke="#218559" d="M843.417,-3489.33C831.062,-3489.77 817.424,-3489.86 804.535,-3489.61"/>
+<polygon fill="#218559" stroke="#218559" points="804.491,-3486.11 794.398,-3489.33 804.298,-3493.1 804.491,-3486.11"/>
+</g>
+<!-- 8,2 -->
+<g id="node105" class="node"><title>8,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-5024" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="464.5" y="-5035.17" font-family="Times Roman,serif" font-size="10.00">8,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="462,-5016 462,-5030 507,-5030 507,-5016 462,-5016"/>
+<text text-anchor="start" x="467.5" y="-5020.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+<polygon fill="#218559" stroke="#218559" points="462,-5002 462,-5016 507,-5016 507,-5002 462,-5002"/>
+<text text-anchor="start" x="470" y="-5006.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+</g>
+<!-- 9,4->8,2 -->
+<g id="edge544" class="edge"><title>9,4->8,2</title>
+<path fill="none" stroke="#ebb035" d="M870.102,-3516.5C853.546,-3551.38 830,-3601 830,-3601 830,-3601 808,-3996 808,-3996 808,-3996 674,-4511 674,-4511 674,-4511 562,-4541 562,-4541 562,-4541 540,-4855 540,-4855 540,-4855 515.396,-4929.25 498.805,-4979.32"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="495.426,-4978.39 495.603,-4988.98 502.071,-4980.59 495.426,-4978.39"/>
+</g>
+<!-- 8,1->24,1 -->
+<g id="edge102" class="edge"><title>8,1->24,1</title>
+<path fill="none" stroke="#dd1e2f" d="M382.78,-5047.48C400.328,-5060.06 422.158,-5075.7 441.047,-5089.23"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="439.049,-5092.1 449.217,-5095.08 443.126,-5086.41 439.049,-5092.1"/>
+</g>
+<!-- 8,1->7,3 -->
+<g id="edge106" class="edge"><title>8,1->7,3</title>
+<path fill="none" stroke="#06a2cb" d="M356.826,-4988.3C370.078,-4919.01 398,-4773 398,-4773 398,-4773 428,-4551 428,-4551 428,-4551 540,-4511 540,-4511 540,-4511 550,-4259 550,-4259 550,-4259 562,-4248 562,-4248 562,-4248 674,-4162 674,-4162 674,-4162 684,-3800 684,-3800 684,-3800 686,-3800 686,-3800 686,-3800 696,-3996 696,-3996 696,-3996 734.995,-4436.78 747.905,-4582.71"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="744.42,-4583.04 748.788,-4592.69 751.393,-4582.42 744.42,-4583.04"/>
+</g>
+<!-- 8,1->8,2 -->
+<g id="edge104" class="edge"><title>8,1->8,2</title>
+<path fill="none" stroke="#dd1e2f" d="M392.398,-5017.67C404.741,-5017.23 418.377,-5017.14 431.273,-5017.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="431.326,-5020.89 441.417,-5017.67 431.517,-5013.89 431.326,-5020.89"/>
+</g>
+<!-- 8,2->9,4 -->
+<g id="edge110" class="edge"><title>8,2->9,4</title>
+<path fill="none" stroke="#ebb035" d="M495.845,-4988.99C515.327,-4931.4 552,-4823 552,-4823 552,-4823 562,-4581 562,-4581 562,-4581 674,-4541 674,-4541 674,-4541 696,-4504 696,-4504 696,-4504 820,-4465 820,-4465 820,-4465 830,-3601 830,-3601 830,-3601 849.673,-3559.55 865.699,-3525.78"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="868.977,-3527.03 870.102,-3516.5 862.653,-3524.03 868.977,-3527.03"/>
+</g>
+<!-- 8,2->8,1 -->
+<g id="edge112" class="edge"><title>8,2->8,1</title>
+<path fill="none" stroke="#218559" d="M441.417,-5030.33C429.062,-5030.77 415.424,-5030.86 402.535,-5030.61"/>
+<polygon fill="#218559" stroke="#218559" points="402.491,-5027.11 392.398,-5030.33 402.298,-5034.1 402.491,-5027.11"/>
+</g>
+<!-- 8,2->8,3 -->
+<g id="edge108" class="edge"><title>8,2->8,3</title>
+<path fill="none" stroke="#dd1e2f" d="M526.398,-5017.67C538.741,-5017.23 552.377,-5017.14 565.273,-5017.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="565.326,-5020.89 575.417,-5017.67 565.517,-5013.89 565.326,-5020.89"/>
+</g>
+<!-- 8,3->7,1 -->
+<g id="edge116" class="edge"><title>8,3->7,1</title>
+<path fill="none" stroke="#06a2cb" d="M610.095,-4988.57C594.659,-4919.38 562,-4773 562,-4773 562,-4773 552,-4315 552,-4315 552,-4315 550,-4315 550,-4315 550,-4315 540,-4579 540,-4579 540,-4579 531.629,-4586.47 521.36,-4595.64"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="518.768,-4593.26 513.64,-4602.54 523.43,-4598.49 518.768,-4593.26"/>
+</g>
+<!-- 8,3->8,2 -->
+<g id="edge120" class="edge"><title>8,3->8,2</title>
+<path fill="none" stroke="#218559" d="M575.417,-5030.33C563.062,-5030.77 549.424,-5030.86 536.535,-5030.61"/>
+<polygon fill="#218559" stroke="#218559" points="536.491,-5027.11 526.398,-5030.33 536.298,-5034.1 536.491,-5027.11"/>
+</g>
+<!-- 8,3->8,4 -->
+<g id="edge114" class="edge"><title>8,3->8,4</title>
+<path fill="none" stroke="#dd1e2f" d="M660.398,-5017.67C672.741,-5017.23 686.377,-5017.14 699.273,-5017.39"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="699.326,-5020.89 709.417,-5017.67 699.517,-5013.89 699.326,-5020.89"/>
+</g>
+<!-- 8,3->19,4 -->
+<g id="edge118" class="edge"><title>8,3->19,4</title>
+<path fill="none" stroke="#218559" d="M587.705,-5049.97C574.511,-5061.28 562,-5072 562,-5072 562,-5072 552,-5193 552,-5193 552,-5193 545.818,-5195.09 537.182,-5198.01"/>
+<polygon fill="#218559" stroke="#218559" points="535.802,-5194.78 527.45,-5201.3 538.045,-5201.41 535.802,-5194.78"/>
+</g>
+<!-- 8,4->9,2 -->
+<g id="edge122" class="edge"><title>8,4->9,2</title>
+<path fill="none" stroke="#ebb035" d="M744.095,-4988.57C728.659,-4919.38 696,-4773 696,-4773 696,-4773 686,-3557 686,-3557 686,-3557 668.526,-3537.98 651.293,-3519.23"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="653.829,-3516.82 644.485,-3511.82 648.674,-3521.55 653.829,-3516.82"/>
+</g>
+<!-- 8,4->8,3 -->
+<g id="edge124" class="edge"><title>8,4->8,3</title>
+<path fill="none" stroke="#218559" d="M709.417,-5030.33C697.062,-5030.77 683.424,-5030.86 670.535,-5030.61"/>
+<polygon fill="#218559" stroke="#218559" points="670.491,-5027.11 660.398,-5030.33 670.298,-5034.1 670.491,-5027.11"/>
+</g>
+<!-- 11,1 -->
+<g id="node109" class="node"><title>11,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">11,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-652 325,-666 376,-666 376,-652 325,-652"/>
+<text text-anchor="start" x="333.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">CTGGC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-638 325,-652 376,-652 376,-638 325,-638"/>
+<text text-anchor="start" x="332.5" y="-642.667" font-family="Times Roman,serif" font-size="10.00">GCCAG</text>
+</g>
+<!-- 11,2 -->
+<g id="node110" class="node"><title>11,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">11,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-652 459,-666 510,-666 510,-652 459,-652"/>
+<text text-anchor="start" x="467.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">TGGCA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-638 459,-652 510,-652 510,-638 459,-638"/>
+<text text-anchor="start" x="467.5" y="-642.667" font-family="Times Roman,serif" font-size="10.00">TGCCA</text>
+</g>
+<!-- 11,1->11,2 -->
+<g id="edge548" class="edge"><title>11,1->11,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-653.529C406.501,-653.254 416.748,-653.183 426.703,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-656.817 436.933,-653.523 427.007,-649.819 426.864,-656.817"/>
+</g>
+<!-- 12,2 -->
+<g id="node125" class="node"><title>12,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-564" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-575.167" font-family="Times Roman,serif" font-size="10.00">12,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-556 459,-570 510,-570 510,-556 459,-556"/>
+<text text-anchor="start" x="468.5" y="-560.667" font-family="Times Roman,serif" font-size="10.00">TCTGG</text>
+<polygon fill="#218559" stroke="#218559" points="459,-542 459,-556 510,-556 510,-542 459,-542"/>
+<text text-anchor="start" x="467" y="-546.667" font-family="Times Roman,serif" font-size="10.00">CCAGA</text>
+</g>
+<!-- 11,1->12,2 -->
+<g id="edge550" class="edge"><title>11,1->12,2</title>
+<path fill="none" stroke="#218559" d="M387.58,-637.894C403.307,-628.643 418,-620 418,-620 418,-620 430.304,-609.561 444.286,-597.696"/>
+<polygon fill="#218559" stroke="#218559" points="446.799,-600.154 452.16,-591.016 442.27,-594.817 446.799,-600.154"/>
+</g>
+<!-- 11,2->11,1 -->
+<g id="edge556" class="edge"><title>11,2->11,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-666.477C427.29,-666.749 417.041,-666.817 407.091,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-663.18 396.867,-666.471 406.792,-670.179 406.937,-663.18"/>
+</g>
+<!-- 11,3 -->
+<g id="node111" class="node"><title>11,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">11,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-652 593,-666 644,-666 644,-652 593,-652"/>
+<text text-anchor="start" x="600.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">GGCAG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-638 593,-652 644,-652 644,-638 593,-638"/>
+<text text-anchor="start" x="601.5" y="-642.667" font-family="Times Roman,serif" font-size="10.00">CTGCC</text>
+</g>
+<!-- 11,2->11,3 -->
+<g id="edge554" class="edge"><title>11,2->11,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-653.529C540.501,-653.254 550.748,-653.183 560.703,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-656.817 570.933,-653.523 561.007,-649.819 560.864,-656.817"/>
+</g>
+<!-- 10,1 -->
+<g id="node114" class="node"><title>10,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-3035" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-3046.17" font-family="Times Roman,serif" font-size="10.00">10,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-3027 459,-3041 510,-3041 510,-3027 459,-3027"/>
+<text text-anchor="start" x="466.5" y="-3031.67" font-family="Times Roman,serif" font-size="10.00">GGCAG</text>
+<polygon fill="#218559" stroke="#218559" points="459,-3013 459,-3027 510,-3027 510,-3013 459,-3013"/>
+<text text-anchor="start" x="467.5" y="-3017.67" font-family="Times Roman,serif" font-size="10.00">CTGCC</text>
+</g>
+<!-- 11,2->10,1 -->
+<g id="edge552" class="edge"><title>11,2->10,1</title>
+<path fill="none" stroke="#dd1e2f" d="M480.949,-696.137C467.359,-857.109 413,-1501 413,-1501 413,-1501 413,-2875 413,-2875 413,-2875 443.68,-2944.14 464.704,-2991.52"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="461.513,-2992.96 468.769,-3000.68 467.912,-2990.12 461.513,-2992.96"/>
+</g>
+<!-- 11,3->11,2 -->
+<g id="edge562" class="edge"><title>11,3->11,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-666.477C561.29,-666.749 551.041,-666.817 541.091,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-663.18 530.867,-666.471 540.792,-670.179 540.937,-663.18"/>
+</g>
+<!-- 11,4 -->
+<g id="node112" class="node"><title>11,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">11,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-652 727,-666 778,-666 778,-652 727,-652"/>
+<text text-anchor="start" x="734.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">GCAGA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-638 727,-652 778,-652 778,-638 727,-638"/>
+<text text-anchor="start" x="737" y="-642.667" font-family="Times Roman,serif" font-size="10.00">TCTGC</text>
+</g>
+<!-- 11,3->11,4 -->
+<g id="edge558" class="edge"><title>11,3->11,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-653.529C674.501,-653.254 684.748,-653.183 694.703,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-656.817 704.933,-653.523 695.007,-649.819 694.864,-656.817"/>
+</g>
+<!-- 12,4 -->
+<g id="node127" class="node"><title>12,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-564" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-575.167" font-family="Times Roman,serif" font-size="10.00">12,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-556 727,-570 778,-570 778,-556 727,-556"/>
+<text text-anchor="start" x="735.5" y="-560.667" font-family="Times Roman,serif" font-size="10.00">TGGCA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-542 727,-556 778,-556 778,-542 727,-542"/>
+<text text-anchor="start" x="735.5" y="-546.667" font-family="Times Roman,serif" font-size="10.00">TGCCA</text>
+</g>
+<!-- 11,3->12,4 -->
+<g id="edge560" class="edge"><title>11,3->12,4</title>
+<path fill="none" stroke="#218559" d="M655.58,-637.894C671.307,-628.643 686,-620 686,-620 686,-620 698.304,-609.561 712.286,-597.696"/>
+<polygon fill="#218559" stroke="#218559" points="714.799,-600.154 720.16,-591.016 710.27,-594.817 714.799,-600.154"/>
+</g>
+<!-- 11,4->11,3 -->
+<g id="edge566" class="edge"><title>11,4->11,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-666.477C695.29,-666.749 685.041,-666.817 675.091,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-663.18 664.867,-666.471 674.792,-670.179 674.937,-663.18"/>
+</g>
+<!-- 10,3 -->
+<g id="node116" class="node"><title>10,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3035" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-3046.17" font-family="Times Roman,serif" font-size="10.00">10,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-3027 727,-3041 778,-3041 778,-3027 727,-3027"/>
+<text text-anchor="start" x="736" y="-3031.67" font-family="Times Roman,serif" font-size="10.00">CAGAT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-3013 727,-3027 778,-3027 778,-3013 727,-3013"/>
+<text text-anchor="start" x="737" y="-3017.67" font-family="Times Roman,serif" font-size="10.00">ATCTG</text>
+</g>
+<!-- 11,4->10,3 -->
+<g id="edge564" class="edge"><title>11,4->10,3</title>
+<path fill="none" stroke="#dd1e2f" d="M720.07,-687.164C702.813,-701.845 685,-717 685,-717 685,-717 685,-2875 685,-2875 685,-2875 713.831,-2943.85 733.667,-2991.22"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="730.536,-2992.8 737.627,-3000.68 736.993,-2990.1 730.536,-2992.8"/>
+</g>
+<!-- 10,1->11,2 -->
+<g id="edge128" class="edge"><title>10,1->11,2</title>
+<path fill="none" stroke="#218559" d="M468.769,-3000.68C447.907,-2953.66 413,-2875 413,-2875 413,-2875 413,-1501 413,-1501 413,-1501 465.257,-882.016 480.107,-706.113"/>
+<polygon fill="#218559" stroke="#218559" points="483.595,-706.396 480.949,-696.137 476.62,-705.807 483.595,-706.396"/>
+</g>
+<!-- 10,1->10,2 -->
+<g id="edge126" class="edge"><title>10,1->10,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-3028.53C540.501,-3028.25 550.748,-3028.18 560.703,-3028.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-3031.82 570.933,-3028.52 561.007,-3024.82 560.864,-3031.82"/>
+</g>
+<!-- 10,2->9,1 -->
+<g id="edge130" class="edge"><title>10,2->9,1</title>
+<path fill="none" stroke="#dd1e2f" d="M586.4,-3062.09C573.697,-3072.97 562,-3083 562,-3083 562,-3083 540,-3282 540,-3282 540,-3282 513.155,-3378.35 496.638,-3437.64"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="493.195,-3436.96 493.883,-3447.53 499.938,-3438.83 493.195,-3436.96"/>
+</g>
+<!-- 10,2->10,1 -->
+<g id="edge134" class="edge"><title>10,2->10,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-3041.48C561.29,-3041.75 551.041,-3041.82 541.091,-3041.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-3038.18 530.867,-3041.47 540.792,-3045.18 540.937,-3038.18"/>
+</g>
+<!-- 10,2->10,3 -->
+<g id="edge132" class="edge"><title>10,2->10,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-3028.53C674.501,-3028.25 684.748,-3028.18 694.703,-3028.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-3031.82 704.933,-3028.52 695.007,-3024.82 694.864,-3031.82"/>
+</g>
+<!-- 10,3->11,4 -->
+<g id="edge138" class="edge"><title>10,3->11,4</title>
+<path fill="none" stroke="#218559" d="M737.627,-3000.68C717.94,-2953.66 685,-2875 685,-2875 685,-2875 685,-717 685,-717 685,-717 697.917,-706.011 712.409,-693.682"/>
+<polygon fill="#218559" stroke="#218559" points="714.721,-696.31 720.07,-687.164 710.185,-690.979 714.721,-696.31"/>
+</g>
+<!-- 10,3->10,2 -->
+<g id="edge140" class="edge"><title>10,3->10,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-3041.48C695.29,-3041.75 685.041,-3041.82 675.091,-3041.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-3038.18 664.867,-3041.47 674.792,-3045.18 674.937,-3038.18"/>
+</g>
+<!-- 10,3->10,4 -->
+<g id="edge136" class="edge"><title>10,3->10,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-3028.53C808.501,-3028.25 818.748,-3028.18 828.703,-3028.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-3031.82 838.933,-3028.52 829.007,-3024.82 828.864,-3031.82"/>
+</g>
+<!-- 10,4->9,3 -->
+<g id="edge142" class="edge"><title>10,4->9,3</title>
+<path fill="none" stroke="#dd1e2f" d="M854.4,-3062.09C841.697,-3072.97 830,-3083 830,-3083 830,-3083 808,-3282 808,-3282 808,-3282 781.155,-3378.35 764.638,-3437.64"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="761.195,-3436.96 761.883,-3447.53 767.938,-3438.83 761.195,-3436.96"/>
+</g>
+<!-- 10,4->10,3 -->
+<g id="edge144" class="edge"><title>10,4->10,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-3041.48C829.29,-3041.75 819.041,-3041.82 809.091,-3041.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-3038.18 798.867,-3041.47 808.792,-3045.18 808.937,-3038.18"/>
+</g>
+<!-- 13,1 -->
+<g id="node119" class="node"><title>13,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-468" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-479.167" font-family="Times Roman,serif" font-size="10.00">13,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-460 325,-474 376,-474 376,-460 325,-460"/>
+<text text-anchor="start" x="336" y="-464.667" font-family="Times Roman,serif" font-size="10.00">ATCTC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-446 325,-460 376,-460 376,-446 325,-446"/>
+<text text-anchor="start" x="334" y="-450.667" font-family="Times Roman,serif" font-size="10.00">GAGAT</text>
+</g>
+<!-- 13,2 -->
+<g id="node120" class="node"><title>13,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-468" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-479.167" font-family="Times Roman,serif" font-size="10.00">13,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-460 459,-474 510,-474 510,-460 459,-460"/>
+<text text-anchor="start" x="470" y="-464.667" font-family="Times Roman,serif" font-size="10.00">TCTCT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-446 459,-460 510,-460 510,-446 459,-446"/>
+<text text-anchor="start" x="467" y="-450.667" font-family="Times Roman,serif" font-size="10.00">AGAGA</text>
+</g>
+<!-- 13,1->13,2 -->
+<g id="edge568" class="edge"><title>13,1->13,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-461.529C406.501,-461.254 416.748,-461.183 426.703,-461.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-464.817 436.933,-461.523 427.007,-457.819 426.864,-464.817"/>
+</g>
+<!-- 14,2 -->
+<g id="node135" class="node"><title>14,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-372" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-383.167" font-family="Times Roman,serif" font-size="10.00">14,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-364 459,-378 510,-378 510,-364 459,-364"/>
+<text text-anchor="start" x="469.5" y="-368.667" font-family="Times Roman,serif" font-size="10.00">CATCT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-350 459,-364 510,-364 510,-350 459,-350"/>
+<text text-anchor="start" x="468" y="-354.667" font-family="Times Roman,serif" font-size="10.00">AGATG</text>
+</g>
+<!-- 13,1->14,2 -->
+<g id="edge570" class="edge"><title>13,1->14,2</title>
+<path fill="none" stroke="#218559" d="M387.58,-445.894C403.307,-436.643 418,-428 418,-428 418,-428 430.304,-417.561 444.286,-405.696"/>
+<polygon fill="#218559" stroke="#218559" points="446.799,-408.154 452.16,-399.016 442.27,-402.817 446.799,-408.154"/>
+</g>
+<!-- 13,2->13,1 -->
+<g id="edge576" class="edge"><title>13,2->13,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-474.477C427.29,-474.749 417.041,-474.817 407.091,-474.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-471.18 396.867,-474.471 406.792,-478.179 406.937,-471.18"/>
+</g>
+<!-- 13,3 -->
+<g id="node121" class="node"><title>13,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-468" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-479.167" font-family="Times Roman,serif" font-size="10.00">13,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-460 593,-474 644,-474 644,-460 593,-460"/>
+<text text-anchor="start" x="603" y="-464.667" font-family="Times Roman,serif" font-size="10.00">CTCTG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-446 593,-460 644,-460 644,-446 593,-446"/>
+<text text-anchor="start" x="601" y="-450.667" font-family="Times Roman,serif" font-size="10.00">CAGAG</text>
+</g>
+<!-- 13,2->13,3 -->
+<g id="edge574" class="edge"><title>13,2->13,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-461.529C540.501,-461.254 550.748,-461.183 560.703,-461.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-464.817 570.933,-461.523 561.007,-457.819 560.864,-464.817"/>
+</g>
+<!-- 12,1 -->
+<g id="node124" class="node"><title>12,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-564" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-575.167" font-family="Times Roman,serif" font-size="10.00">12,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-556 325,-570 376,-570 376,-556 325,-556"/>
+<text text-anchor="start" x="335" y="-560.667" font-family="Times Roman,serif" font-size="10.00">CTCTG</text>
+<polygon fill="#218559" stroke="#218559" points="325,-542 325,-556 376,-556 376,-542 325,-542"/>
+<text text-anchor="start" x="333" y="-546.667" font-family="Times Roman,serif" font-size="10.00">CAGAG</text>
+</g>
+<!-- 13,2->12,1 -->
+<g id="edge572" class="edge"><title>13,2->12,1</title>
+<path fill="none" stroke="#dd1e2f" d="M452.16,-495.016C435.283,-509.336 418,-524 418,-524 418,-524 408.3,-529.706 396.227,-536.808"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="394.425,-533.807 387.58,-541.894 397.974,-539.841 394.425,-533.807"/>
+</g>
+<!-- 13,3->13,2 -->
+<g id="edge582" class="edge"><title>13,3->13,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-474.477C561.29,-474.749 551.041,-474.817 541.091,-474.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-471.18 530.867,-474.471 540.792,-478.179 540.937,-471.18"/>
+</g>
+<!-- 13,4 -->
+<g id="node122" class="node"><title>13,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-468" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-479.167" font-family="Times Roman,serif" font-size="10.00">13,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-460 727,-474 778,-474 778,-460 727,-460"/>
+<text text-anchor="start" x="736.5" y="-464.667" font-family="Times Roman,serif" font-size="10.00">TCTGG</text>
+<polygon fill="#218559" stroke="#218559" points="727,-446 727,-460 778,-460 778,-446 727,-446"/>
+<text text-anchor="start" x="735" y="-450.667" font-family="Times Roman,serif" font-size="10.00">CCAGA</text>
+</g>
+<!-- 13,3->13,4 -->
+<g id="edge578" class="edge"><title>13,3->13,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-461.529C674.501,-461.254 684.748,-461.183 694.703,-461.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-464.817 704.933,-461.523 695.007,-457.819 694.864,-464.817"/>
+</g>
+<!-- 14,4 -->
+<g id="node137" class="node"><title>14,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-372" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-383.167" font-family="Times Roman,serif" font-size="10.00">14,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-364 727,-378 778,-378 778,-364 727,-364"/>
+<text text-anchor="start" x="738" y="-368.667" font-family="Times Roman,serif" font-size="10.00">TCTCT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-350 727,-364 778,-364 778,-350 727,-350"/>
+<text text-anchor="start" x="735" y="-354.667" font-family="Times Roman,serif" font-size="10.00">AGAGA</text>
+</g>
+<!-- 13,3->14,4 -->
+<g id="edge580" class="edge"><title>13,3->14,4</title>
+<path fill="none" stroke="#218559" d="M655.58,-445.894C671.307,-436.643 686,-428 686,-428 686,-428 698.304,-417.561 712.286,-405.696"/>
+<polygon fill="#218559" stroke="#218559" points="714.799,-408.154 720.16,-399.016 710.27,-402.817 714.799,-408.154"/>
+</g>
+<!-- 13,4->13,3 -->
+<g id="edge586" class="edge"><title>13,4->13,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-474.477C695.29,-474.749 685.041,-474.817 675.091,-474.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-471.18 664.867,-474.471 674.792,-478.179 674.937,-471.18"/>
+</g>
+<!-- 12,3 -->
+<g id="node126" class="node"><title>12,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-564" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-575.167" font-family="Times Roman,serif" font-size="10.00">12,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-556 593,-570 644,-570 644,-556 593,-556"/>
+<text text-anchor="start" x="601.5" y="-560.667" font-family="Times Roman,serif" font-size="10.00">CTGGC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-542 593,-556 644,-556 644,-542 593,-542"/>
+<text text-anchor="start" x="600.5" y="-546.667" font-family="Times Roman,serif" font-size="10.00">GCCAG</text>
+</g>
+<!-- 13,4->12,3 -->
+<g id="edge584" class="edge"><title>13,4->12,3</title>
+<path fill="none" stroke="#dd1e2f" d="M720.16,-495.016C703.283,-509.336 686,-524 686,-524 686,-524 676.3,-529.706 664.227,-536.808"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="662.425,-533.807 655.58,-541.894 665.974,-539.841 662.425,-533.807"/>
+</g>
+<!-- 12,1->13,2 -->
+<g id="edge148" class="edge"><title>12,1->13,2</title>
+<path fill="none" stroke="#218559" d="M384.857,-539.028C402.072,-526.694 422.998,-511.703 441.18,-498.677"/>
+<polygon fill="#218559" stroke="#218559" points="443.227,-501.516 449.317,-492.847 439.15,-495.826 443.227,-501.516"/>
+</g>
+<!-- 12,1->12,2 -->
+<g id="edge146" class="edge"><title>12,1->12,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-557.529C406.501,-557.254 416.748,-557.183 426.703,-557.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-560.817 436.933,-557.523 427.007,-553.819 426.864,-560.817"/>
+</g>
+<!-- 12,2->11,1 -->
+<g id="edge150" class="edge"><title>12,2->11,1</title>
+<path fill="none" stroke="#dd1e2f" d="M449.317,-588.847C432.127,-601.162 411.205,-616.152 393.005,-629.191"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="390.948,-626.359 384.857,-635.028 395.025,-632.049 390.948,-626.359"/>
+</g>
+<!-- 12,2->12,1 -->
+<g id="edge154" class="edge"><title>12,2->12,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-570.477C427.29,-570.749 417.041,-570.817 407.091,-570.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-567.18 396.867,-570.471 406.792,-574.179 406.937,-567.18"/>
+</g>
+<!-- 12,2->12,3 -->
+<g id="edge152" class="edge"><title>12,2->12,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-557.529C540.501,-557.254 550.748,-557.183 560.703,-557.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-560.817 570.933,-557.523 561.007,-553.819 560.864,-560.817"/>
+</g>
+<!-- 12,3->13,4 -->
+<g id="edge158" class="edge"><title>12,3->13,4</title>
+<path fill="none" stroke="#218559" d="M652.857,-539.028C670.072,-526.694 690.998,-511.703 709.18,-498.677"/>
+<polygon fill="#218559" stroke="#218559" points="711.227,-501.516 717.317,-492.847 707.15,-495.826 711.227,-501.516"/>
+</g>
+<!-- 12,3->12,2 -->
+<g id="edge160" class="edge"><title>12,3->12,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-570.477C561.29,-570.749 551.041,-570.817 541.091,-570.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-567.18 530.867,-570.471 540.792,-574.179 540.937,-567.18"/>
+</g>
+<!-- 12,3->12,4 -->
+<g id="edge156" class="edge"><title>12,3->12,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-557.529C674.501,-557.254 684.748,-557.183 694.703,-557.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-560.817 704.933,-557.523 695.007,-553.819 694.864,-560.817"/>
+</g>
+<!-- 12,4->11,3 -->
+<g id="edge162" class="edge"><title>12,4->11,3</title>
+<path fill="none" stroke="#dd1e2f" d="M717.317,-588.847C700.127,-601.162 679.205,-616.152 661.005,-629.191"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="658.948,-626.359 652.857,-635.028 663.025,-632.049 658.948,-626.359"/>
+</g>
+<!-- 12,4->12,3 -->
+<g id="edge164" class="edge"><title>12,4->12,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-570.477C695.29,-570.749 685.041,-570.817 675.091,-570.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-567.18 664.867,-570.471 674.792,-574.179 674.937,-567.18"/>
+</g>
+<!-- 15,1 -->
+<g id="node129" class="node"><title>15,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-276" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-287.167" font-family="Times Roman,serif" font-size="10.00">15,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-268 325,-282 376,-282 376,-268 325,-268"/>
+<text text-anchor="start" x="332.5" y="-272.667" font-family="Times Roman,serif" font-size="10.00">CGGCA</text>
+<polygon fill="#218559" stroke="#218559" points="325,-254 325,-268 376,-268 376,-254 325,-254"/>
+<text text-anchor="start" x="333.5" y="-258.667" font-family="Times Roman,serif" font-size="10.00">TGCCG</text>
+</g>
+<!-- 15,2 -->
+<g id="node130" class="node"><title>15,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-276" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-287.167" font-family="Times Roman,serif" font-size="10.00">15,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-268 459,-282 510,-282 510,-268 459,-268"/>
+<text text-anchor="start" x="468" y="-272.667" font-family="Times Roman,serif" font-size="10.00">GGCAT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-254 459,-268 510,-268 510,-254 459,-254"/>
+<text text-anchor="start" x="468" y="-258.667" font-family="Times Roman,serif" font-size="10.00">ATGCC</text>
+</g>
+<!-- 15,1->15,2 -->
+<g id="edge588" class="edge"><title>15,1->15,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-269.529C406.501,-269.254 416.748,-269.183 426.703,-269.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-272.817 436.933,-269.523 427.007,-265.819 426.864,-272.817"/>
+</g>
+<!-- 16,2 -->
+<g id="node145" class="node"><title>16,2</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-148" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">16,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-140 459,-154 510,-154 510,-140 459,-140"/>
+<text text-anchor="start" x="466.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">ACGGC</text>
+<polygon fill="#218559" stroke="#218559" points="459,-126 459,-140 510,-140 510,-126 459,-126"/>
+<text text-anchor="start" x="467.5" y="-130.667" font-family="Times Roman,serif" font-size="10.00">GCCGT</text>
+</g>
+<!-- 15,1->16,2 -->
+<g id="edge590" class="edge"><title>15,1->16,2</title>
+<path fill="none" stroke="#218559" d="M384.398,-250.707C401.265,-238.305 418,-226 418,-226 418,-226 434.96,-205.956 451.686,-186.19"/>
+<polygon fill="#218559" stroke="#218559" points="454.506,-188.275 458.294,-178.38 449.162,-183.753 454.506,-188.275"/>
+</g>
+<!-- 15,2->15,1 -->
+<g id="edge596" class="edge"><title>15,2->15,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-282.477C427.29,-282.749 417.041,-282.817 407.091,-282.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-279.18 396.867,-282.471 406.792,-286.179 406.937,-279.18"/>
+</g>
+<!-- 15,3 -->
+<g id="node131" class="node"><title>15,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-276" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-287.167" font-family="Times Roman,serif" font-size="10.00">15,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-268 593,-282 644,-282 644,-268 593,-268"/>
+<text text-anchor="start" x="602.5" y="-272.667" font-family="Times Roman,serif" font-size="10.00">GCATC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-254 593,-268 644,-268 644,-254 593,-254"/>
+<text text-anchor="start" x="602" y="-258.667" font-family="Times Roman,serif" font-size="10.00">GATGC</text>
+</g>
+<!-- 15,2->15,3 -->
+<g id="edge594" class="edge"><title>15,2->15,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-269.529C540.501,-269.254 550.748,-269.183 560.703,-269.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-272.817 570.933,-269.523 561.007,-265.819 560.864,-272.817"/>
+</g>
+<!-- 14,1 -->
+<g id="node134" class="node"><title>14,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-372" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-383.167" font-family="Times Roman,serif" font-size="10.00">14,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-364 325,-378 376,-378 376,-364 325,-364"/>
+<text text-anchor="start" x="334.5" y="-368.667" font-family="Times Roman,serif" font-size="10.00">GCATC</text>
+<polygon fill="#218559" stroke="#218559" points="325,-350 325,-364 376,-364 376,-350 325,-350"/>
+<text text-anchor="start" x="334" y="-354.667" font-family="Times Roman,serif" font-size="10.00">GATGC</text>
+</g>
+<!-- 15,2->14,1 -->
+<g id="edge592" class="edge"><title>15,2->14,1</title>
+<path fill="none" stroke="#dd1e2f" d="M452.16,-303.016C435.283,-317.336 418,-332 418,-332 418,-332 408.3,-337.706 396.227,-344.808"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="394.425,-341.807 387.58,-349.894 397.974,-347.841 394.425,-341.807"/>
+</g>
+<!-- 15,3->15,2 -->
+<g id="edge602" class="edge"><title>15,3->15,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-282.477C561.29,-282.749 551.041,-282.817 541.091,-282.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-279.18 530.867,-282.471 540.792,-286.179 540.937,-279.18"/>
+</g>
+<!-- 15,4 -->
+<g id="node132" class="node"><title>15,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-276" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-287.167" font-family="Times Roman,serif" font-size="10.00">15,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-268 727,-282 778,-282 778,-268 727,-268"/>
+<text text-anchor="start" x="737.5" y="-272.667" font-family="Times Roman,serif" font-size="10.00">CATCT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-254 727,-268 778,-268 778,-254 727,-254"/>
+<text text-anchor="start" x="736" y="-258.667" font-family="Times Roman,serif" font-size="10.00">AGATG</text>
+</g>
+<!-- 15,3->15,4 -->
+<g id="edge598" class="edge"><title>15,3->15,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-269.529C674.501,-269.254 684.748,-269.183 694.703,-269.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-272.817 704.933,-269.523 695.007,-265.819 694.864,-272.817"/>
+</g>
+<!-- 16,4 -->
+<g id="node147" class="node"><title>16,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-148" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">16,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-140 727,-154 778,-154 778,-140 727,-140"/>
+<text text-anchor="start" x="736" y="-144.667" font-family="Times Roman,serif" font-size="10.00">GGCAT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-126 727,-140 778,-140 778,-126 727,-126"/>
+<text text-anchor="start" x="736" y="-130.667" font-family="Times Roman,serif" font-size="10.00">ATGCC</text>
+</g>
+<!-- 15,3->16,4 -->
+<g id="edge600" class="edge"><title>15,3->16,4</title>
+<path fill="none" stroke="#218559" d="M652.398,-250.707C669.265,-238.305 686,-226 686,-226 686,-226 702.96,-205.956 719.686,-186.19"/>
+<polygon fill="#218559" stroke="#218559" points="722.506,-188.275 726.294,-178.38 717.162,-183.753 722.506,-188.275"/>
+</g>
+<!-- 15,4->15,3 -->
+<g id="edge606" class="edge"><title>15,4->15,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-282.477C695.29,-282.749 685.041,-282.817 675.091,-282.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-279.18 664.867,-282.471 674.792,-286.179 674.937,-279.18"/>
+</g>
+<!-- 14,3 -->
+<g id="node136" class="node"><title>14,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-372" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-383.167" font-family="Times Roman,serif" font-size="10.00">14,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-364 593,-378 644,-378 644,-364 593,-364"/>
+<text text-anchor="start" x="604" y="-368.667" font-family="Times Roman,serif" font-size="10.00">ATCTC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-350 593,-364 644,-364 644,-350 593,-350"/>
+<text text-anchor="start" x="602" y="-354.667" font-family="Times Roman,serif" font-size="10.00">GAGAT</text>
+</g>
+<!-- 15,4->14,3 -->
+<g id="edge604" class="edge"><title>15,4->14,3</title>
+<path fill="none" stroke="#dd1e2f" d="M720.16,-303.016C703.283,-317.336 686,-332 686,-332 686,-332 676.3,-337.706 664.227,-344.808"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="662.425,-341.807 655.58,-349.894 665.974,-347.841 662.425,-341.807"/>
+</g>
+<!-- 14,1->15,2 -->
+<g id="edge168" class="edge"><title>14,1->15,2</title>
+<path fill="none" stroke="#218559" d="M384.857,-347.028C402.072,-334.694 422.998,-319.703 441.18,-306.677"/>
+<polygon fill="#218559" stroke="#218559" points="443.227,-309.516 449.317,-300.847 439.15,-303.826 443.227,-309.516"/>
+</g>
+<!-- 14,1->14,2 -->
+<g id="edge166" class="edge"><title>14,1->14,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-365.529C406.501,-365.254 416.748,-365.183 426.703,-365.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-368.817 436.933,-365.523 427.007,-361.819 426.864,-368.817"/>
+</g>
+<!-- 14,2->13,1 -->
+<g id="edge170" class="edge"><title>14,2->13,1</title>
+<path fill="none" stroke="#dd1e2f" d="M449.317,-396.847C432.127,-409.162 411.205,-424.152 393.005,-437.191"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="390.948,-434.359 384.857,-443.028 395.025,-440.049 390.948,-434.359"/>
+</g>
+<!-- 14,2->14,1 -->
+<g id="edge174" class="edge"><title>14,2->14,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-378.477C427.29,-378.749 417.041,-378.817 407.091,-378.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-375.18 396.867,-378.471 406.792,-382.179 406.937,-375.18"/>
+</g>
+<!-- 14,2->14,3 -->
+<g id="edge172" class="edge"><title>14,2->14,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-365.529C540.501,-365.254 550.748,-365.183 560.703,-365.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-368.817 570.933,-365.523 561.007,-361.819 560.864,-368.817"/>
+</g>
+<!-- 14,3->15,4 -->
+<g id="edge178" class="edge"><title>14,3->15,4</title>
+<path fill="none" stroke="#218559" d="M652.857,-347.028C670.072,-334.694 690.998,-319.703 709.18,-306.677"/>
+<polygon fill="#218559" stroke="#218559" points="711.227,-309.516 717.317,-300.847 707.15,-303.826 711.227,-309.516"/>
+</g>
+<!-- 14,3->14,2 -->
+<g id="edge180" class="edge"><title>14,3->14,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-378.477C561.29,-378.749 551.041,-378.817 541.091,-378.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-375.18 530.867,-378.471 540.792,-382.179 540.937,-375.18"/>
+</g>
+<!-- 14,3->14,4 -->
+<g id="edge176" class="edge"><title>14,3->14,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-365.529C674.501,-365.254 684.748,-365.183 694.703,-365.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-368.817 704.933,-365.523 695.007,-361.819 694.864,-368.817"/>
+</g>
+<!-- 14,4->13,3 -->
+<g id="edge182" class="edge"><title>14,4->13,3</title>
+<path fill="none" stroke="#dd1e2f" d="M717.317,-396.847C700.127,-409.162 679.205,-424.152 661.005,-437.191"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="658.948,-434.359 652.857,-443.028 663.025,-440.049 658.948,-434.359"/>
+</g>
+<!-- 14,4->14,3 -->
+<g id="edge184" class="edge"><title>14,4->14,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-378.477C695.29,-378.749 685.041,-378.817 675.091,-378.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-375.18 664.867,-378.471 674.792,-382.179 674.937,-375.18"/>
+</g>
+<!-- 17,1->24,1 -->
+<g id="edge614" class="edge"><title>17,1->24,1</title>
+<path fill="none" stroke="#218559" d="M364.013,-3982.45C378.18,-4017.28 398,-4066 398,-4066 398,-4066 418,-4361 418,-4361 418,-4361 428,-5072 428,-5072 428,-5072 435.283,-5078.24 444.596,-5086.22"/>
+<polygon fill="#218559" stroke="#218559" points="442.529,-5089.06 452.4,-5092.91 447.085,-5083.75 442.529,-5089.06"/>
+</g>
+<!-- 17,1->23,2 -->
+<g id="edge610" class="edge"><title>17,1->23,2</title>
+<path fill="none" stroke="#06a2cb" d="M365.308,-3913.67C384.805,-3869.95 416,-3800 416,-3800 416,-3800 418,-3800 418,-3800 418,-3800 428,-4677 428,-4677 428,-4677 435.283,-4683.24 444.596,-4691.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="442.529,-4694.06 452.4,-4697.91 447.085,-4688.75 442.529,-4694.06"/>
+</g>
+<!-- 17,1->17,2 -->
+<g id="edge608" class="edge"><title>17,1->17,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-3941.53C406.501,-3941.25 416.748,-3941.18 426.703,-3941.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-3944.82 436.933,-3941.52 427.007,-3937.82 426.864,-3944.82"/>
+</g>
+<!-- 18,3 -->
+<g id="node156" class="node"><title>18,3</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-4463" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-4474.17" font-family="Times Roman,serif" font-size="10.00">18,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-4455 459,-4469 510,-4469 510,-4455 459,-4455"/>
+<text text-anchor="start" x="470" y="-4459.67" font-family="Times Roman,serif" font-size="10.00">TTTCA</text>
+<polygon fill="#218559" stroke="#218559" points="459,-4441 459,-4455 510,-4455 510,-4441 459,-4441"/>
+<text text-anchor="start" x="467.5" y="-4445.67" font-family="Times Roman,serif" font-size="10.00">TGAAA</text>
+</g>
+<!-- 17,1->18,3 -->
+<g id="edge612" class="edge"><title>17,1->18,3</title>
+<path fill="none" stroke="#06a2cb" d="M365.188,-3913.83C379.25,-3882.19 398,-3840 398,-3840 398,-3840 416,-3775 416,-3775 416,-3775 418,-3775 418,-3775 418,-3775 428,-4162 428,-4162 428,-4162 459.813,-4333 475.483,-4417.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="472.086,-4418.1 477.356,-4427.29 478.968,-4416.82 472.086,-4418.1"/>
+</g>
+<!-- 17,2->23,1 -->
+<g id="edge620" class="edge"><title>17,2->23,1</title>
+<path fill="none" stroke="#06a2cb" d="M453.052,-3975.63C440.1,-3987.2 428,-3998 428,-3998 428,-3998 416,-4190 416,-4190 416,-4190 398,-4511 398,-4511 398,-4511 374.399,-4616.22 360.296,-4679.1"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="356.808,-4678.66 358.034,-4689.18 363.638,-4680.19 356.808,-4678.66"/>
+</g>
+<!-- 17,2->17,1 -->
+<g id="edge622" class="edge"><title>17,2->17,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-3954.48C427.29,-3954.75 417.041,-3954.82 407.091,-3954.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-3951.18 396.867,-3954.47 406.792,-3958.18 406.937,-3951.18"/>
+</g>
+<!-- 17,3 -->
+<g id="node141" class="node"><title>17,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-3948" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-3959.17" font-family="Times Roman,serif" font-size="10.00">17,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-3940 593,-3954 644,-3954 644,-3940 593,-3940"/>
+<text text-anchor="start" x="600.5" y="-3944.67" font-family="Times Roman,serif" font-size="10.00">AACGG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-3926 593,-3940 644,-3940 644,-3926 593,-3926"/>
+<text text-anchor="start" x="603" y="-3930.67" font-family="Times Roman,serif" font-size="10.00">CCGTT</text>
+</g>
+<!-- 17,2->17,3 -->
+<g id="edge618" class="edge"><title>17,2->17,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-3941.53C540.501,-3941.25 550.748,-3941.18 560.703,-3941.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-3944.82 570.933,-3941.52 561.007,-3937.82 560.864,-3944.82"/>
+</g>
+<!-- 16,1 -->
+<g id="node144" class="node"><title>16,1</title>
+<ellipse fill="none" stroke="black" cx="350" cy="-148" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="327.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">16,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325,-140 325,-154 376,-154 376,-140 325,-140"/>
+<text text-anchor="start" x="332.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">AACGG</text>
+<polygon fill="#218559" stroke="#218559" points="325,-126 325,-140 376,-140 376,-126 325,-126"/>
+<text text-anchor="start" x="335" y="-130.667" font-family="Times Roman,serif" font-size="10.00">CCGTT</text>
+</g>
+<!-- 17,2->16,1 -->
+<g id="edge616" class="edge"><title>17,2->16,1</title>
+<path fill="none" stroke="#dd1e2f" d="M476.036,-3912.3C460.575,-3843.01 428,-3697 428,-3697 428,-3697 418,-2372 418,-2372 418,-2372 398,-228 398,-228 398,-228 386.635,-209.059 374.965,-189.609"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="377.947,-187.775 369.801,-181.001 371.944,-191.377 377.947,-187.775"/>
+</g>
+<!-- 17,3->17,2 -->
+<g id="edge628" class="edge"><title>17,3->17,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-3954.48C561.29,-3954.75 551.041,-3954.82 541.091,-3954.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-3951.18 530.867,-3954.47 540.792,-3958.18 540.937,-3951.18"/>
+</g>
+<!-- 17,4 -->
+<g id="node142" class="node"><title>17,4</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-3948" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-3959.17" font-family="Times Roman,serif" font-size="10.00">17,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-3940 727,-3954 778,-3954 778,-3940 727,-3940"/>
+<text text-anchor="start" x="734.5" y="-3944.67" font-family="Times Roman,serif" font-size="10.00">ACGGC</text>
+<polygon fill="#218559" stroke="#218559" points="727,-3926 727,-3940 778,-3940 778,-3926 727,-3926"/>
+<text text-anchor="start" x="735.5" y="-3930.67" font-family="Times Roman,serif" font-size="10.00">GCCGT</text>
+</g>
+<!-- 17,3->17,4 -->
+<g id="edge624" class="edge"><title>17,3->17,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-3941.53C674.501,-3941.25 684.748,-3941.18 694.703,-3941.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-3944.82 704.933,-3941.52 695.007,-3937.82 694.864,-3944.82"/>
+</g>
+<!-- 17,3->18,1 -->
+<g id="edge626" class="edge"><title>17,3->18,1</title>
+<path fill="none" stroke="#06a2cb" d="M610.036,-3912.3C594.575,-3843.01 562,-3697 562,-3697 562,-3697 540,-3435 540,-3435 540,-3435 428,-3435 428,-3435 428,-3435 398,-3669 398,-3669 398,-3669 294,-3903 294,-3903 294,-3903 264,-4162 264,-4162 264,-4162 236.799,-4332.57 223.35,-4416.91"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="219.861,-4416.56 221.742,-4426.99 226.773,-4417.67 219.861,-4416.56"/>
+</g>
+<!-- 17,4->17,3 -->
+<g id="edge632" class="edge"><title>17,4->17,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-3954.48C695.29,-3954.75 685.041,-3954.82 675.091,-3954.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-3951.18 664.867,-3954.47 674.792,-3958.18 674.937,-3951.18"/>
+</g>
+<!-- 16,3 -->
+<g id="node146" class="node"><title>16,3</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-148" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">16,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-140 593,-154 644,-154 644,-140 593,-140"/>
+<text text-anchor="start" x="600.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">CGGCA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-126 593,-140 644,-140 644,-126 593,-126"/>
+<text text-anchor="start" x="601.5" y="-130.667" font-family="Times Roman,serif" font-size="10.00">TGCCG</text>
+</g>
+<!-- 17,4->16,3 -->
+<g id="edge630" class="edge"><title>17,4->16,3</title>
+<path fill="none" stroke="#dd1e2f" d="M744.036,-3912.3C728.575,-3843.01 696,-3697 696,-3697 696,-3697 686,-1855 686,-1855 686,-1855 674,-228 674,-228 674,-228 660.245,-208.35 646.369,-188.527"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="649.057,-186.263 640.455,-180.078 643.322,-190.278 649.057,-186.263"/>
+</g>
+<!-- 16,1->17,2 -->
+<g id="edge188" class="edge"><title>16,1->17,2</title>
+<path fill="none" stroke="#218559" d="M369.801,-181.001C383.023,-203.038 398,-228 398,-228 398,-228 428,-3697 428,-3697 428,-3697 457.714,-3830.18 473.853,-3902.52"/>
+<polygon fill="#218559" stroke="#218559" points="470.442,-3903.31 476.036,-3912.3 477.274,-3901.78 470.442,-3903.31"/>
+</g>
+<!-- 16,1->16,2 -->
+<g id="edge186" class="edge"><title>16,1->16,2</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-141.529C406.501,-141.254 416.748,-141.183 426.703,-141.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-144.817 436.933,-141.523 427.007,-137.819 426.864,-144.817"/>
+</g>
+<!-- 16,2->15,1 -->
+<g id="edge190" class="edge"><title>16,2->15,1</title>
+<path fill="none" stroke="#dd1e2f" d="M454.344,-176.328C434.498,-195.285 408.229,-220.378 387.013,-240.644"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="384.553,-238.154 379.739,-247.593 389.388,-243.216 384.553,-238.154"/>
+</g>
+<!-- 16,2->16,1 -->
+<g id="edge194" class="edge"><title>16,2->16,1</title>
+<path fill="none" stroke="#218559" d="M436.933,-154.477C427.29,-154.749 417.041,-154.817 407.091,-154.684"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-151.18 396.867,-154.471 406.792,-158.179 406.937,-151.18"/>
+</g>
+<!-- 16,2->16,3 -->
+<g id="edge192" class="edge"><title>16,2->16,3</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-141.529C540.501,-141.254 550.748,-141.183 560.703,-141.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-144.817 570.933,-141.523 561.007,-137.819 560.864,-144.817"/>
+</g>
+<!-- 16,3->17,4 -->
+<g id="edge198" class="edge"><title>16,3->17,4</title>
+<path fill="none" stroke="#218559" d="M640.455,-180.078C656.034,-202.335 674,-228 674,-228 674,-228 696,-3697 696,-3697 696,-3697 725.714,-3830.18 741.853,-3902.52"/>
+<polygon fill="#218559" stroke="#218559" points="738.442,-3903.31 744.036,-3912.3 745.274,-3901.78 738.442,-3903.31"/>
+</g>
+<!-- 16,3->16,2 -->
+<g id="edge200" class="edge"><title>16,3->16,2</title>
+<path fill="none" stroke="#218559" d="M570.933,-154.477C561.29,-154.749 551.041,-154.817 541.091,-154.684"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-151.18 530.867,-154.471 540.792,-158.179 540.937,-151.18"/>
+</g>
+<!-- 16,3->16,4 -->
+<g id="edge196" class="edge"><title>16,3->16,4</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-141.529C674.501,-141.254 684.748,-141.183 694.703,-141.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-144.817 704.933,-141.523 695.007,-137.819 694.864,-144.817"/>
+</g>
+<!-- 16,4->15,3 -->
+<g id="edge202" class="edge"><title>16,4->15,3</title>
+<path fill="none" stroke="#dd1e2f" d="M722.344,-176.328C702.498,-195.285 676.229,-220.378 655.013,-240.644"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="652.553,-238.154 647.739,-247.593 657.388,-243.216 652.553,-238.154"/>
+</g>
+<!-- 16,4->16,3 -->
+<g id="edge204" class="edge"><title>16,4->16,3</title>
+<path fill="none" stroke="#218559" d="M704.933,-154.477C695.29,-154.749 685.041,-154.817 675.091,-154.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-151.18 664.867,-154.471 674.792,-158.179 674.937,-151.18"/>
+</g>
+<!-- 19,1->20,3 -->
+<g id="edge636" class="edge"><title>19,1->20,3</title>
+<path fill="none" stroke="#06a2cb" d="M71.2944,-5180.29C93.6974,-5070.61 160,-4746 160,-4746 160,-4746 294,-4541 294,-4541 294,-4541 398,-4511 398,-4511 398,-4511 451.557,-4263.76 474.142,-4159.51"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="477.596,-4160.09 476.292,-4149.58 470.755,-4158.61 477.596,-4160.09"/>
+</g>
+<!-- 19,2 -->
+<g id="node150" class="node"><title>19,2</title>
+<ellipse fill="none" stroke="black" cx="216" cy="-5216" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="193.5" y="-5227.17" font-family="Times Roman,serif" font-size="10.00">19,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="191,-5208 191,-5222 242,-5222 242,-5208 191,-5208"/>
+<text text-anchor="start" x="201" y="-5212.67" font-family="Times Roman,serif" font-size="10.00">ATTGA</text>
+<polygon fill="#218559" stroke="#218559" points="191,-5194 191,-5208 242,-5208 242,-5194 191,-5194"/>
+<text text-anchor="start" x="201.5" y="-5198.67" font-family="Times Roman,serif" font-size="10.00">TCAAT</text>
+</g>
+<!-- 19,1->19,2 -->
+<g id="edge634" class="edge"><title>19,1->19,2</title>
+<path fill="none" stroke="#dd1e2f" d="M110.845,-5209.71C126.015,-5209.21 143.011,-5209.12 158.843,-5209.44"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="158.958,-5212.94 169.048,-5209.71 159.144,-5205.94 158.958,-5212.94"/>
+</g>
+<!-- 19,2->19,1 -->
+<g id="edge642" class="edge"><title>19,2->19,1</title>
+<path fill="none" stroke="#218559" d="M169.048,-5222.29C153.87,-5222.79 136.872,-5222.88 121.045,-5222.56"/>
+<polygon fill="#218559" stroke="#218559" points="120.935,-5219.06 110.845,-5222.29 120.748,-5226.05 120.935,-5219.06"/>
+</g>
+<!-- 19,2->19,3 -->
+<g id="edge638" class="edge"><title>19,2->19,3</title>
+<path fill="none" stroke="#dd1e2f" d="M262.867,-5209.53C272.501,-5209.25 282.748,-5209.18 292.703,-5209.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="292.864,-5212.82 302.933,-5209.52 293.007,-5205.82 292.864,-5212.82"/>
+</g>
+<!-- 19,2->18,4 -->
+<g id="edge640" class="edge"><title>19,2->18,4</title>
+<path fill="none" stroke="#ebb035" d="M227.425,-5180.84C249.091,-5114.18 294,-4976 294,-4976 294,-4976 540,-4801 540,-4801 540,-4801 562,-4513 562,-4513 562,-4513 569.684,-4506.14 579.359,-4497.5"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="581.923,-4499.9 587.052,-4490.63 577.261,-4494.68 581.923,-4499.9"/>
+</g>
+<!-- 19,3->24,1 -->
+<g id="edge644" class="edge"><title>19,3->24,1</title>
+<path fill="none" stroke="#dd1e2f" d="M383,-5190C399.5,-5177 416,-5164 416,-5164 416,-5164 426.392,-5157.28 439.051,-5149.08"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="441.117,-5151.92 447.611,-5143.55 437.314,-5146.04 441.117,-5151.92"/>
+</g>
+<!-- 19,3->20,1 -->
+<g id="edge648" class="edge"><title>19,3->20,1</title>
+<path fill="none" stroke="#06a2cb" d="M336.444,-5181.14C319.871,-5138.52 294,-5072 294,-5072 294,-5072 264,-4415 264,-4415 264,-4415 236.799,-4244.43 223.35,-4160.09"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="226.773,-4159.33 221.742,-4150.01 219.861,-4160.44 226.773,-4159.33"/>
+</g>
+<!-- 19,3->19,2 -->
+<g id="edge650" class="edge"><title>19,3->19,2</title>
+<path fill="none" stroke="#218559" d="M302.933,-5222.48C293.29,-5222.75 283.041,-5222.82 273.091,-5222.68"/>
+<polygon fill="#218559" stroke="#218559" points="272.937,-5219.18 262.867,-5222.47 272.792,-5226.18 272.937,-5219.18"/>
+</g>
+<!-- 19,3->19,4 -->
+<g id="edge646" class="edge"><title>19,3->19,4</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-5209.53C406.501,-5209.25 416.748,-5209.18 426.703,-5209.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-5212.82 436.933,-5209.52 427.007,-5205.82 426.864,-5212.82"/>
+</g>
+<!-- 19,4->24,2 -->
+<g id="edge654" class="edge"><title>19,4->24,2</title>
+<path fill="none" stroke="#dd1e2f" d="M531.615,-5217.44C542.023,-5217.76 550,-5218 550,-5218 550,-5218 552,-5218 552,-5218 552,-5218 572.47,-5187.6 590.61,-5160.67"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593.706,-5162.34 596.389,-5152.09 587.9,-5158.43 593.706,-5162.34"/>
+</g>
+<!-- 19,4->23,1 -->
+<g id="edge658" class="edge"><title>19,4->23,1</title>
+<path fill="none" stroke="#ebb035" d="M452.4,-5188.91C439.697,-5178.03 428,-5168 428,-5168 428,-5168 398,-4976 398,-4976 398,-4976 372.635,-4843.36 358.782,-4770.92"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="362.142,-4769.86 356.826,-4760.7 355.267,-4771.18 362.142,-4769.86"/>
+</g>
+<!-- 19,4->8,3 -->
+<g id="edge652" class="edge"><title>19,4->8,3</title>
+<path fill="none" stroke="#dd1e2f" d="M515.6,-5188.91C528.303,-5178.03 540,-5168 540,-5168 540,-5168 562,-5072 562,-5072 562,-5072 569.944,-5065.19 579.849,-5056.7"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="582.391,-5059.13 587.705,-5049.97 577.835,-5053.82 582.391,-5059.13"/>
+</g>
+<!-- 19,4->19,3 -->
+<g id="edge660" class="edge"><title>19,4->19,3</title>
+<path fill="none" stroke="#218559" d="M436.933,-5222.48C427.29,-5222.75 417.041,-5222.82 407.091,-5222.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-5219.18 396.867,-5222.47 406.792,-5226.18 406.937,-5219.18"/>
+</g>
+<!-- 19,4->18,2 -->
+<g id="edge656" class="edge"><title>19,4->18,2</title>
+<path fill="none" stroke="#ebb035" d="M452.4,-5188.91C439.697,-5178.03 428,-5168 428,-5168 428,-5168 398,-4677 398,-4677 398,-4677 374.399,-4571.78 360.296,-4508.9"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="363.638,-4507.81 358.034,-4498.82 356.808,-4509.34 363.638,-4507.81"/>
+</g>
+<!-- 18,1->23,1 -->
+<g id="edge206" class="edge"><title>18,1->23,1</title>
+<path fill="none" stroke="#dd1e2f" d="M233.244,-4496.72C257.516,-4544.17 301.748,-4630.66 328.249,-4682.47"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="325.153,-4684.1 332.822,-4691.41 331.385,-4680.92 325.153,-4684.1"/>
+</g>
+<!-- 18,1->17,3 -->
+<g id="edge210" class="edge"><title>18,1->17,3</title>
+<path fill="none" stroke="#06a2cb" d="M221.742,-4426.99C234.483,-4347.1 264,-4162 264,-4162 264,-4162 294,-3812 294,-3812 294,-3812 428,-3405 428,-3405 428,-3405 552,-3405 552,-3405 552,-3405 562,-3697 562,-3697 562,-3697 591.714,-3830.18 607.853,-3902.52"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="604.442,-3903.31 610.036,-3912.3 611.274,-3901.78 604.442,-3903.31"/>
+</g>
+<!-- 18,1->18,2 -->
+<g id="edge208" class="edge"><title>18,1->18,2</title>
+<path fill="none" stroke="#dd1e2f" d="M262.867,-4456.53C272.501,-4456.25 282.748,-4456.18 292.703,-4456.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="292.864,-4459.82 302.933,-4456.52 293.007,-4452.82 292.864,-4459.82"/>
+</g>
+<!-- 18,2->7,1 -->
+<g id="edge212" class="edge"><title>18,2->7,1</title>
+<path fill="none" stroke="#dd1e2f" d="M368.035,-4429.39C387.576,-4392.97 416,-4340 416,-4340 416,-4340 418,-4340 418,-4340 418,-4340 428,-4511 428,-4511 428,-4511 447.673,-4552.45 463.699,-4586.22"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="460.653,-4587.97 468.102,-4595.5 466.977,-4584.97 460.653,-4587.97"/>
+</g>
+<!-- 18,2->19,4 -->
+<g id="edge216" class="edge"><title>18,2->19,4</title>
+<path fill="none" stroke="#ebb035" d="M371.611,-4430.91C390.859,-4402.33 416,-4365 416,-4365 416,-4365 418,-4365 418,-4365 418,-4365 428,-5168 428,-5168 428,-5168 435.283,-5174.24 444.596,-5182.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="442.529,-5185.06 452.4,-5188.91 447.085,-5179.75 442.529,-5185.06"/>
+</g>
+<!-- 18,2->18,1 -->
+<g id="edge218" class="edge"><title>18,2->18,1</title>
+<path fill="none" stroke="#218559" d="M302.933,-4469.48C293.29,-4469.75 283.041,-4469.82 273.091,-4469.68"/>
+<polygon fill="#218559" stroke="#218559" points="272.937,-4466.18 262.867,-4469.47 272.792,-4473.18 272.937,-4466.18"/>
+</g>
+<!-- 18,2->18,3 -->
+<g id="edge214" class="edge"><title>18,2->18,3</title>
+<path fill="none" stroke="#dd1e2f" d="M396.867,-4456.53C406.501,-4456.25 416.748,-4456.18 426.703,-4456.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="426.864,-4459.82 436.933,-4456.52 427.007,-4452.82 426.864,-4459.82"/>
+</g>
+<!-- 18,3->17,1 -->
+<g id="edge222" class="edge"><title>18,3->17,1</title>
+<path fill="none" stroke="#06a2cb" d="M477.356,-4427.29C462.522,-4347.56 428,-4162 428,-4162 428,-4162 418,-3750 418,-3750 418,-3750 416,-3750 416,-3750 416,-3750 398,-3840 398,-3840 398,-3840 382.733,-3874.35 369.42,-3904.31"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="366.051,-3903.27 365.188,-3913.83 372.447,-3906.11 366.051,-3903.27"/>
+</g>
+<!-- 18,3->18,2 -->
+<g id="edge224" class="edge"><title>18,3->18,2</title>
+<path fill="none" stroke="#218559" d="M436.933,-4469.48C427.29,-4469.75 417.041,-4469.82 407.091,-4469.68"/>
+<polygon fill="#218559" stroke="#218559" points="406.937,-4466.18 396.867,-4469.47 406.792,-4473.18 406.937,-4466.18"/>
+</g>
+<!-- 18,3->18,4 -->
+<g id="edge220" class="edge"><title>18,3->18,4</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-4456.53C540.501,-4456.25 550.748,-4456.18 560.703,-4456.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-4459.82 570.933,-4456.52 561.007,-4452.82 560.864,-4459.82"/>
+</g>
+<!-- 18,4->24,1 -->
+<g id="edge228" class="edge"><title>18,4->24,1</title>
+<path fill="none" stroke="#06a2cb" d="M601.802,-4497.13C585.264,-4531.98 562,-4581 562,-4581 562,-4581 550,-4848 550,-4848 550,-4848 540,-5072 540,-5072 540,-5072 532.717,-5078.24 523.404,-5086.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="520.915,-5083.75 515.6,-5092.91 525.471,-5089.06 520.915,-5083.75"/>
+</g>
+<!-- 18,4->19,2 -->
+<g id="edge226" class="edge"><title>18,4->19,2</title>
+<path fill="none" stroke="#ebb035" d="M587.052,-4490.63C574.1,-4502.2 562,-4513 562,-4513 562,-4513 550,-4556 550,-4556 550,-4556 540,-4773 540,-4773 540,-4773 282,-4836 282,-4836 282,-4836 241.471,-5069.35 223.932,-5170.33"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="220.472,-5169.8 222.209,-5180.25 227.369,-5171 220.472,-5169.8"/>
+</g>
+<!-- 18,4->18,3 -->
+<g id="edge230" class="edge"><title>18,4->18,3</title>
+<path fill="none" stroke="#218559" d="M570.933,-4469.48C561.29,-4469.75 551.041,-4469.82 541.091,-4469.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-4466.18 530.867,-4469.47 540.792,-4473.18 540.937,-4466.18"/>
+</g>
+<!-- 31,1 -->
+<g id="node159" class="node"><title>31,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1732" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1743.17" font-family="Times Roman,serif" font-size="10.00">31,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1724 593,-1738 644,-1738 644,-1724 593,-1724"/>
+<text text-anchor="start" x="602" y="-1728.67" font-family="Times Roman,serif" font-size="10.00">GCGTC</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1710 593,-1724 644,-1724 644,-1710 593,-1710"/>
+<text text-anchor="start" x="600.5" y="-1714.67" font-family="Times Roman,serif" font-size="10.00">GACGC</text>
+</g>
+<!-- 31,2 -->
+<g id="node160" class="node"><title>31,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1732" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1743.17" font-family="Times Roman,serif" font-size="10.00">31,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1724 727,-1738 778,-1738 778,-1724 727,-1724"/>
+<text text-anchor="start" x="736" y="-1728.67" font-family="Times Roman,serif" font-size="10.00">CGTCA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1710 727,-1724 778,-1724 778,-1710 727,-1710"/>
+<text text-anchor="start" x="735.5" y="-1714.67" font-family="Times Roman,serif" font-size="10.00">TGACG</text>
+</g>
+<!-- 31,1->31,2 -->
+<g id="edge786" class="edge"><title>31,1->31,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1725.53C674.501,-1725.25 684.748,-1725.18 694.703,-1725.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1728.82 704.933,-1725.52 695.007,-1721.82 694.864,-1728.82"/>
+</g>
+<!-- 32,2 -->
+<g id="node195" class="node"><title>32,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1974" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1985.17" font-family="Times Roman,serif" font-size="10.00">32,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1966 727,-1980 778,-1980 778,-1966 727,-1966"/>
+<text text-anchor="start" x="735.5" y="-1970.67" font-family="Times Roman,serif" font-size="10.00">AGCGT</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1952 727,-1966 778,-1966 778,-1952 727,-1952"/>
+<text text-anchor="start" x="736" y="-1956.67" font-family="Times Roman,serif" font-size="10.00">ACGCT</text>
+</g>
+<!-- 31,1->32,2 -->
+<g id="edge788" class="edge"><title>31,1->32,2</title>
+<path fill="none" stroke="#218559" d="M636.491,-1765.39C660.503,-1808.76 702.432,-1884.48 728.624,-1931.78"/>
+<polygon fill="#218559" stroke="#218559" points="725.577,-1933.51 733.483,-1940.56 731.701,-1930.12 725.577,-1933.51"/>
+</g>
+<!-- 31,2->31,1 -->
+<g id="edge796" class="edge"><title>31,2->31,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-1738.48C695.29,-1738.75 685.041,-1738.82 675.091,-1738.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1735.18 664.867,-1738.47 674.792,-1742.18 674.937,-1735.18"/>
+</g>
+<!-- 31,2->31,3 -->
+<g id="edge792" class="edge"><title>31,2->31,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1725.53C808.501,-1725.25 818.748,-1725.18 828.703,-1725.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1728.82 838.933,-1725.52 829.007,-1721.82 828.864,-1728.82"/>
+</g>
+<!-- 31,2->30,1 -->
+<g id="edge790" class="edge"><title>31,2->30,1</title>
+<path fill="none" stroke="#dd1e2f" d="M740.329,-1767.36C721.134,-1825.52 685,-1935 685,-1935 685,-1935 685,-2013 685,-2013 685,-2013 709.962,-2060.32 729.413,-2097.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="726.459,-2099.09 734.221,-2106.3 732.651,-2095.82 726.459,-2099.09"/>
+</g>
+<!-- 31,2->30,4 -->
+<g id="edge794" class="edge"><title>31,2->30,4</title>
+<path fill="none" stroke="#ebb035" d="M783.6,-1704.91C796.303,-1694.03 808,-1684 808,-1684 808,-1684 820,-1354 820,-1354 820,-1354 830,-1026 830,-1026 830,-1026 1076,-1026 1076,-1026 1076,-1026 1106,-1492 1106,-1492 1106,-1492 1139.58,-1945.29 1150.57,-2093.63"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1147.09,-2094.06 1151.32,-2103.77 1154.07,-2093.54 1147.09,-2094.06"/>
+</g>
+<!-- 31,3->28,4 -->
+<g id="edge802" class="edge"><title>31,3->28,4</title>
+<path fill="none" stroke="#218559" d="M896.271,-1767.58C912.438,-1823.59 942,-1926 942,-1926 942,-1926 964,-2546 964,-2546 964,-2546 990.308,-2637.14 1006.86,-2694.48"/>
+<polygon fill="#218559" stroke="#218559" points="1003.59,-2695.78 1009.73,-2704.42 1010.32,-2693.84 1003.59,-2695.78"/>
+</g>
+<!-- 31,3->31,2 -->
+<g id="edge804" class="edge"><title>31,3->31,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-1738.48C829.29,-1738.75 819.041,-1738.82 809.091,-1738.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1735.18 798.867,-1738.47 808.792,-1742.18 808.937,-1735.18"/>
+</g>
+<!-- 31,4 -->
+<g id="node162" class="node"><title>31,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1732" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-1743.17" font-family="Times Roman,serif" font-size="10.00">31,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-1724 995,-1738 1046,-1738 1046,-1724 995,-1724"/>
+<text text-anchor="start" x="1005" y="-1728.67" font-family="Times Roman,serif" font-size="10.00">TCATG</text>
+<polygon fill="#218559" stroke="#218559" points="995,-1710 995,-1724 1046,-1724 1046,-1710 995,-1710"/>
+<text text-anchor="start" x="1004" y="-1714.67" font-family="Times Roman,serif" font-size="10.00">CATGA</text>
+</g>
+<!-- 31,3->31,4 -->
+<g id="edge798" class="edge"><title>31,3->31,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-1725.53C942.501,-1725.25 952.748,-1725.18 962.703,-1725.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-1728.82 972.933,-1725.52 963.007,-1721.82 962.864,-1728.82"/>
+</g>
+<!-- 31,3->32,4 -->
+<g id="edge800" class="edge"><title>31,3->32,4</title>
+<path fill="none" stroke="#218559" d="M917.6,-1704.91C930.303,-1694.03 942,-1684 942,-1684 942,-1684 952,-1293 952,-1293 952,-1293 954,-1293 954,-1293 954,-1293 964,-1780 964,-1780 964,-1780 990.308,-1871.14 1006.86,-1928.48"/>
+<polygon fill="#218559" stroke="#218559" points="1003.59,-1929.78 1009.73,-1938.42 1010.32,-1927.84 1003.59,-1929.78"/>
+</g>
+<!-- 31,4->31,3 -->
+<g id="edge810" class="edge"><title>31,4->31,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-1738.48C963.29,-1738.75 953.041,-1738.82 943.091,-1738.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-1735.18 932.867,-1738.47 942.792,-1742.18 942.937,-1735.18"/>
+</g>
+<!-- 31,4->30,2 -->
+<g id="edge808" class="edge"><title>31,4->30,2</title>
+<path fill="none" stroke="#ebb035" d="M1009.73,-1767.58C993.562,-1823.59 964,-1926 964,-1926 964,-1926 942,-2022 942,-2022 942,-2022 922.563,-2062.96 906.591,-2096.61"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="903.323,-2095.33 902.198,-2105.87 909.647,-2098.34 903.323,-2095.33"/>
+</g>
+<!-- 31,4->30,3 -->
+<g id="edge806" class="edge"><title>31,4->30,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1008.33,-1767.36C989.134,-1825.52 953,-1935 953,-1935 953,-1935 953,-2013 953,-2013 953,-2013 977.962,-2060.32 997.413,-2097.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="994.459,-2099.09 1002.22,-2106.3 1000.65,-2095.82 994.459,-2099.09"/>
+</g>
+<!-- 30,1->29,3 -->
+<g id="edge358" class="edge"><title>30,1->29,3</title>
+<path fill="none" stroke="#06a2cb" d="M782.948,-2112.37C795.9,-2100.8 808,-2090 808,-2090 808,-2090 818,-1896 818,-1896 818,-1896 942,-1848 942,-1848 942,-1848 952,-1368 952,-1368 952,-1368 954,-1368 954,-1368 954,-1368 964,-2188 964,-2188 964,-2188 983.437,-2228.96 999.409,-2262.61"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="996.353,-2264.34 1003.8,-2271.87 1002.68,-2261.33 996.353,-2264.34"/>
+</g>
+<!-- 30,1->31,2 -->
+<g id="edge360" class="edge"><title>30,1->31,2</title>
+<path fill="none" stroke="#218559" d="M734.221,-2106.3C714.372,-2068.68 685,-2013 685,-2013 685,-2013 685,-1935 685,-1935 685,-1935 717.423,-1836.76 737.159,-1776.97"/>
+<polygon fill="#218559" stroke="#218559" points="740.519,-1777.95 740.329,-1767.36 733.872,-1775.76 740.519,-1777.95"/>
+</g>
+<!-- 30,1->30,2 -->
+<g id="edge356" class="edge"><title>30,1->30,2</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-2133.53C808.501,-2133.25 818.748,-2133.18 828.703,-2133.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-2136.82 838.933,-2133.52 829.007,-2129.82 828.864,-2136.82"/>
+</g>
+<!-- 30,2->29,1 -->
+<g id="edge362" class="edge"><title>30,2->29,1</title>
+<path fill="none" stroke="#dd1e2f" d="M861.016,-2170.95C839.056,-2198.15 807,-2237.87 783.329,-2267.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="780.448,-2265.19 776.89,-2275.17 785.895,-2269.58 780.448,-2265.19"/>
+</g>
+<!-- 30,2->31,4 -->
+<g id="edge366" class="edge"><title>30,2->31,4</title>
+<path fill="none" stroke="#ebb035" d="M902.198,-2105.87C918.736,-2071.02 942,-2022 942,-2022 942,-2022 952,-1898 952,-1898 952,-1898 981.876,-1825.07 1002.02,-1775.89"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1005.36,-1776.98 1005.91,-1766.4 998.881,-1774.32 1005.36,-1776.98"/>
+</g>
+<!-- 30,2->30,1 -->
+<g id="edge368" class="edge"><title>30,2->30,1</title>
+<path fill="none" stroke="#218559" d="M838.933,-2146.48C829.29,-2146.75 819.041,-2146.82 809.091,-2146.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-2143.18 798.867,-2146.47 808.792,-2150.18 808.937,-2143.18"/>
+</g>
+<!-- 30,2->30,3 -->
+<g id="edge364" class="edge"><title>30,2->30,3</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-2133.53C942.501,-2133.25 952.748,-2133.18 962.703,-2133.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-2136.82 972.933,-2133.52 963.007,-2129.82 962.864,-2136.82"/>
+</g>
+<!-- 30,3->29,1 -->
+<g id="edge372" class="edge"><title>30,3->29,1</title>
+<path fill="none" stroke="#06a2cb" d="M1003.8,-2105.87C987.264,-2071.02 964,-2022 964,-2022 964,-2022 954,-1876 954,-1876 954,-1876 952,-1876 952,-1876 952,-1876 942,-2022 942,-2022 942,-2022 830,-2062 830,-2062 830,-2062 808,-2188 808,-2188 808,-2188 788.563,-2228.96 772.591,-2262.61"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="769.323,-2261.33 768.198,-2271.87 775.647,-2264.34 769.323,-2261.33"/>
+</g>
+<!-- 30,3->31,4 -->
+<g id="edge374" class="edge"><title>30,3->31,4</title>
+<path fill="none" stroke="#218559" d="M1002.22,-2106.3C982.372,-2068.68 953,-2013 953,-2013 953,-2013 953,-1935 953,-1935 953,-1935 985.423,-1836.76 1005.16,-1776.97"/>
+<polygon fill="#218559" stroke="#218559" points="1008.52,-1777.95 1008.33,-1767.36 1001.87,-1775.76 1008.52,-1777.95"/>
+</g>
+<!-- 30,3->30,2 -->
+<g id="edge376" class="edge"><title>30,3->30,2</title>
+<path fill="none" stroke="#218559" d="M972.933,-2146.48C963.29,-2146.75 953.041,-2146.82 943.091,-2146.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-2143.18 932.867,-2146.47 942.792,-2150.18 942.937,-2143.18"/>
+</g>
+<!-- 30,3->30,4 -->
+<g id="edge370" class="edge"><title>30,3->30,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1066.87,-2133.53C1076.5,-2133.25 1086.75,-2133.18 1096.7,-2133.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1096.86,-2136.82 1106.93,-2133.52 1097.01,-2129.82 1096.86,-2136.82"/>
+</g>
+<!-- 30,4->29,3 -->
+<g id="edge378" class="edge"><title>30,4->29,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1129.02,-2170.95C1107.06,-2198.15 1075,-2237.87 1051.33,-2267.19"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1048.45,-2265.19 1044.89,-2275.17 1053.89,-2269.58 1048.45,-2265.19"/>
+</g>
+<!-- 30,4->31,2 -->
+<g id="edge380" class="edge"><title>30,4->31,2</title>
+<path fill="none" stroke="#ebb035" d="M1151.32,-2103.77C1141.21,-1967.31 1106,-1492 1106,-1492 1106,-1492 1088,-996 1088,-996 1088,-996 830,-996 830,-996 830,-996 808,-1684 808,-1684 808,-1684 800.717,-1690.24 791.404,-1698.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="788.915,-1695.75 783.6,-1704.91 793.471,-1701.06 788.915,-1695.75"/>
+</g>
+<!-- 30,4->30,3 -->
+<g id="edge382" class="edge"><title>30,4->30,3</title>
+<path fill="none" stroke="#218559" d="M1106.93,-2146.48C1097.29,-2146.75 1087.04,-2146.82 1077.09,-2146.68"/>
+<polygon fill="#218559" stroke="#218559" points="1076.94,-2143.18 1066.87,-2146.47 1076.79,-2150.18 1076.94,-2143.18"/>
+</g>
+<!-- 37,1 -->
+<g id="node169" class="node"><title>37,1</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">37,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-652 995,-666 1046,-666 1046,-652 995,-652"/>
+<text text-anchor="start" x="1003.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">CCACA</text>
+<polygon fill="#218559" stroke="#218559" points="995,-638 995,-652 1046,-652 1046,-638 995,-638"/>
+<text text-anchor="start" x="1004" y="-642.667" font-family="Times Roman,serif" font-size="10.00">TGTGG</text>
+</g>
+<!-- 37,2 -->
+<g id="node170" class="node"><title>37,2</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1131.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">37,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1129,-652 1129,-666 1180,-666 1180,-652 1129,-652"/>
+<text text-anchor="start" x="1137.5" y="-656.667" font-family="Times Roman,serif" font-size="10.00">CACAC</text>
+<polygon fill="#218559" stroke="#218559" points="1129,-638 1129,-652 1180,-652 1180,-638 1129,-638"/>
+<text text-anchor="start" x="1138" y="-642.667" font-family="Times Roman,serif" font-size="10.00">GTGTG</text>
+</g>
+<!-- 37,1->37,2 -->
+<g id="edge860" class="edge"><title>37,1->37,2</title>
+<path fill="none" stroke="#dd1e2f" d="M1066.87,-653.529C1076.5,-653.254 1086.75,-653.183 1096.7,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1096.86,-656.817 1106.93,-653.523 1097.01,-649.819 1096.86,-656.817"/>
+</g>
+<!-- 37,2->37,1 -->
+<g id="edge866" class="edge"><title>37,2->37,1</title>
+<path fill="none" stroke="#218559" d="M1106.93,-666.477C1097.29,-666.749 1087.04,-666.817 1077.09,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="1076.94,-663.18 1066.87,-666.471 1076.79,-670.179 1076.94,-663.18"/>
+</g>
+<!-- 37,3 -->
+<g id="node171" class="node"><title>37,3</title>
+<ellipse fill="none" stroke="black" cx="1288" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1265.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">37,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1263,-652 1263,-666 1314,-666 1314,-652 1263,-652"/>
+<text text-anchor="start" x="1271" y="-656.667" font-family="Times Roman,serif" font-size="10.00">ACACG</text>
+<polygon fill="#218559" stroke="#218559" points="1263,-638 1263,-652 1314,-652 1314,-638 1263,-638"/>
+<text text-anchor="start" x="1272.5" y="-642.667" font-family="Times Roman,serif" font-size="10.00">CGTGT</text>
+</g>
+<!-- 37,2->37,3 -->
+<g id="edge862" class="edge"><title>37,2->37,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1200.87,-653.529C1210.5,-653.254 1220.75,-653.183 1230.7,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1230.86,-656.817 1240.93,-653.523 1231.01,-649.819 1230.86,-656.817"/>
+</g>
+<!-- 36,4 -->
+<g id="node177" class="node"><title>36,4</title>
+<ellipse fill="none" stroke="black" cx="1288" cy="-1074" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1265.5" y="-1085.17" font-family="Times Roman,serif" font-size="10.00">36,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1263,-1066 1263,-1080 1314,-1080 1314,-1066 1263,-1066"/>
+<text text-anchor="start" x="1272.5" y="-1070.67" font-family="Times Roman,serif" font-size="10.00">CGTGT</text>
+<polygon fill="#218559" stroke="#218559" points="1263,-1052 1263,-1066 1314,-1066 1314,-1052 1263,-1052"/>
+<text text-anchor="start" x="1271" y="-1056.67" font-family="Times Roman,serif" font-size="10.00">ACACG</text>
+</g>
+<!-- 37,2->36,4 -->
+<g id="edge864" class="edge"><title>37,2->36,4</title>
+<path fill="none" stroke="#ebb035" d="M1165.42,-695.297C1189.75,-770.458 1246.64,-946.204 1273.48,-1029.15"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1270.19,-1030.36 1276.6,-1038.79 1276.85,-1028.2 1270.19,-1030.36"/>
+</g>
+<!-- 37,3->37,2 -->
+<g id="edge870" class="edge"><title>37,3->37,2</title>
+<path fill="none" stroke="#218559" d="M1240.93,-666.477C1231.29,-666.749 1221.04,-666.817 1211.09,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="1210.94,-663.18 1200.87,-666.471 1210.79,-670.179 1210.94,-663.18"/>
+</g>
+<!-- 37,4 -->
+<g id="node172" class="node"><title>37,4</title>
+<ellipse fill="none" stroke="black" cx="1422" cy="-660" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1399.5" y="-671.167" font-family="Times Roman,serif" font-size="10.00">37,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1397,-652 1397,-666 1448,-666 1448,-652 1397,-652"/>
+<text text-anchor="start" x="1405" y="-656.667" font-family="Times Roman,serif" font-size="10.00">CACGC</text>
+<polygon fill="#218559" stroke="#218559" points="1397,-638 1397,-652 1448,-652 1448,-638 1397,-638"/>
+<text text-anchor="start" x="1405" y="-642.667" font-family="Times Roman,serif" font-size="10.00">GCGTG</text>
+</g>
+<!-- 37,3->37,4 -->
+<g id="edge868" class="edge"><title>37,3->37,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1334.87,-653.529C1344.5,-653.254 1354.75,-653.183 1364.7,-653.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1364.86,-656.817 1374.93,-653.523 1365.01,-649.819 1364.86,-656.817"/>
+</g>
+<!-- 37,4->37,3 -->
+<g id="edge874" class="edge"><title>37,4->37,3</title>
+<path fill="none" stroke="#218559" d="M1374.93,-666.477C1365.29,-666.749 1355.04,-666.817 1345.09,-666.684"/>
+<polygon fill="#218559" stroke="#218559" points="1344.94,-663.18 1334.87,-666.471 1344.79,-670.179 1344.94,-663.18"/>
+</g>
+<!-- 36,2 -->
+<g id="node175" class="node"><title>36,2</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-1074" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-1085.17" font-family="Times Roman,serif" font-size="10.00">36,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-1066 995,-1080 1046,-1080 1046,-1066 995,-1066"/>
+<text text-anchor="start" x="1003.5" y="-1070.67" font-family="Times Roman,serif" font-size="10.00">AGCGT</text>
+<polygon fill="#218559" stroke="#218559" points="995,-1052 995,-1066 1046,-1066 1046,-1052 995,-1052"/>
+<text text-anchor="start" x="1004" y="-1056.67" font-family="Times Roman,serif" font-size="10.00">ACGCT</text>
+</g>
+<!-- 37,4->36,2 -->
+<g id="edge872" class="edge"><title>37,4->36,2</title>
+<path fill="none" stroke="#ebb035" d="M1404.3,-693.583C1381.29,-737.25 1344,-808 1344,-808 1344,-808 1210,-946 1210,-946 1210,-946 1120.23,-1006.48 1064.1,-1044.29"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1062.08,-1041.43 1055.74,-1049.92 1065.99,-1047.24 1062.08,-1041.43"/>
+</g>
+<!-- 36,1 -->
+<g id="node174" class="node"><title>36,1</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1074" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1085.17" font-family="Times Roman,serif" font-size="10.00">36,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1066 861,-1080 912,-1080 912,-1066 861,-1066"/>
+<text text-anchor="start" x="868.5" y="-1070.67" font-family="Times Roman,serif" font-size="10.00">AAGCG</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1052 861,-1066 912,-1066 912,-1052 861,-1052"/>
+<text text-anchor="start" x="870.5" y="-1056.67" font-family="Times Roman,serif" font-size="10.00">CGCTT</text>
+</g>
+<!-- 36,1->36,2 -->
+<g id="edge434" class="edge"><title>36,1->36,2</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-1067.53C942.501,-1067.25 952.748,-1067.18 962.703,-1067.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-1070.82 972.933,-1067.52 963.007,-1063.82 962.864,-1070.82"/>
+</g>
+<!-- 35,3 -->
+<g id="node181" class="node"><title>35,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1636" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1647.17" font-family="Times Roman,serif" font-size="10.00">35,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1628 727,-1642 778,-1642 778,-1628 727,-1628"/>
+<text text-anchor="start" x="737" y="-1632.67" font-family="Times Roman,serif" font-size="10.00">GCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1614 727,-1628 778,-1628 778,-1614 727,-1614"/>
+<text text-anchor="start" x="736" y="-1618.67" font-family="Times Roman,serif" font-size="10.00">TAAGC</text>
+</g>
+<!-- 36,1->35,3 -->
+<g id="edge438" class="edge"><title>36,1->35,3</title>
+<path fill="none" stroke="#06a2cb" d="M854.4,-1101.09C841.697,-1111.97 830,-1122 830,-1122 830,-1122 818,-1321 818,-1321 818,-1321 808,-1588 808,-1588 808,-1588 800.717,-1594.24 791.404,-1602.22"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="788.915,-1599.75 783.6,-1608.91 793.471,-1605.06 788.915,-1599.75"/>
+</g>
+<!-- 33,3 -->
+<g id="node191" class="node"><title>33,3</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-1540" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-1551.17" font-family="Times Roman,serif" font-size="10.00">33,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-1532 727,-1546 778,-1546 778,-1532 727,-1532"/>
+<text text-anchor="start" x="737" y="-1536.67" font-family="Times Roman,serif" font-size="10.00">GCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-1518 727,-1532 778,-1532 778,-1518 727,-1518"/>
+<text text-anchor="start" x="736" y="-1522.67" font-family="Times Roman,serif" font-size="10.00">TAAGC</text>
+</g>
+<!-- 36,1->33,3 -->
+<g id="edge436" class="edge"><title>36,1->33,3</title>
+<path fill="none" stroke="#06a2cb" d="M854.4,-1101.09C841.697,-1111.97 830,-1122 830,-1122 830,-1122 780.859,-1385.34 760.587,-1493.98"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="757.112,-1493.53 758.718,-1504 763.993,-1494.81 757.112,-1493.53"/>
+</g>
+<!-- 36,2->37,4 -->
+<g id="edge442" class="edge"><title>36,2->37,4</title>
+<path fill="none" stroke="#ebb035" d="M1048.27,-1044.89C1119.77,-971.25 1307.74,-777.671 1386.49,-696.569"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1389.31,-698.692 1393.76,-689.08 1384.29,-693.816 1389.31,-698.692"/>
+</g>
+<!-- 36,2->36,1 -->
+<g id="edge444" class="edge"><title>36,2->36,1</title>
+<path fill="none" stroke="#218559" d="M972.933,-1080.48C963.29,-1080.75 953.041,-1080.82 943.091,-1080.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-1077.18 932.867,-1080.47 942.792,-1084.18 942.937,-1077.18"/>
+</g>
+<!-- 36,3 -->
+<g id="node176" class="node"><title>36,3</title>
+<ellipse fill="none" stroke="black" cx="1154" cy="-1074" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="1131.5" y="-1085.17" font-family="Times Roman,serif" font-size="10.00">36,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1129,-1066 1129,-1080 1180,-1080 1180,-1066 1129,-1066"/>
+<text text-anchor="start" x="1137" y="-1070.67" font-family="Times Roman,serif" font-size="10.00">GCGTG</text>
+<polygon fill="#218559" stroke="#218559" points="1129,-1052 1129,-1066 1180,-1066 1180,-1052 1129,-1052"/>
+<text text-anchor="start" x="1137" y="-1056.67" font-family="Times Roman,serif" font-size="10.00">CACGC</text>
+</g>
+<!-- 36,2->36,3 -->
+<g id="edge440" class="edge"><title>36,2->36,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1066.87,-1067.53C1076.5,-1067.25 1086.75,-1067.18 1096.7,-1067.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1096.86,-1070.82 1106.93,-1067.52 1097.01,-1063.82 1096.86,-1070.82"/>
+</g>
+<!-- 36,3->36,2 -->
+<g id="edge448" class="edge"><title>36,3->36,2</title>
+<path fill="none" stroke="#218559" d="M1106.93,-1080.48C1097.29,-1080.75 1087.04,-1080.82 1077.09,-1080.68"/>
+<polygon fill="#218559" stroke="#218559" points="1076.94,-1077.18 1066.87,-1080.47 1076.79,-1084.18 1076.94,-1077.18"/>
+</g>
+<!-- 36,3->36,4 -->
+<g id="edge446" class="edge"><title>36,3->36,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1200.87,-1067.53C1210.5,-1067.25 1220.75,-1067.18 1230.7,-1067.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1230.86,-1070.82 1240.93,-1067.52 1231.01,-1063.82 1230.86,-1070.82"/>
+</g>
+<!-- 36,4->37,2 -->
+<g id="edge450" class="edge"><title>36,4->37,2</title>
+<path fill="none" stroke="#ebb035" d="M1274.73,-1039.06C1254.94,-986.97 1220,-895 1220,-895 1220,-895 1185.83,-773.346 1166.67,-705.097"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1170.03,-704.117 1163.95,-695.436 1163.29,-706.01 1170.03,-704.117"/>
+</g>
+<!-- 36,4->36,3 -->
+<g id="edge452" class="edge"><title>36,4->36,3</title>
+<path fill="none" stroke="#218559" d="M1240.93,-1080.48C1231.29,-1080.75 1221.04,-1080.82 1211.09,-1080.68"/>
+<polygon fill="#218559" stroke="#218559" points="1210.94,-1077.18 1200.87,-1080.47 1210.79,-1084.18 1210.94,-1077.18"/>
+</g>
+<!-- 35,1 -->
+<g id="node179" class="node"><title>35,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-1636" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-1647.17" font-family="Times Roman,serif" font-size="10.00">35,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-1628 459,-1642 510,-1642 510,-1628 459,-1628"/>
+<text text-anchor="start" x="469" y="-1632.67" font-family="Times Roman,serif" font-size="10.00">TCGCT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-1614 459,-1628 510,-1628 510,-1614 459,-1614"/>
+<text text-anchor="start" x="466.5" y="-1618.67" font-family="Times Roman,serif" font-size="10.00">AGCGA</text>
+</g>
+<!-- 35,2 -->
+<g id="node180" class="node"><title>35,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1636" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1647.17" font-family="Times Roman,serif" font-size="10.00">35,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1628 593,-1642 644,-1642 644,-1628 593,-1628"/>
+<text text-anchor="start" x="602.5" y="-1632.67" font-family="Times Roman,serif" font-size="10.00">CGCTT</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1614 593,-1628 644,-1628 644,-1614 593,-1614"/>
+<text text-anchor="start" x="600.5" y="-1618.67" font-family="Times Roman,serif" font-size="10.00">AAGCG</text>
+</g>
+<!-- 35,1->35,2 -->
+<g id="edge836" class="edge"><title>35,1->35,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-1629.53C540.501,-1629.25 550.748,-1629.18 560.703,-1629.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-1632.82 570.933,-1629.52 561.007,-1625.82 560.864,-1632.82"/>
+</g>
+<!-- 35,2->35,1 -->
+<g id="edge844" class="edge"><title>35,2->35,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-1642.48C561.29,-1642.75 551.041,-1642.82 541.091,-1642.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-1639.18 530.867,-1642.47 540.792,-1646.18 540.937,-1639.18"/>
+</g>
+<!-- 35,2->35,3 -->
+<g id="edge840" class="edge"><title>35,2->35,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1629.53C674.501,-1629.25 684.748,-1629.18 694.703,-1629.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1632.82 704.933,-1629.52 695.007,-1625.82 694.864,-1632.82"/>
+</g>
+<!-- 34,1 -->
+<g id="node184" class="node"><title>34,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-756" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-767.167" font-family="Times Roman,serif" font-size="10.00">34,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-748 593,-762 644,-762 644,-748 593,-748"/>
+<text text-anchor="start" x="603" y="-752.667" font-family="Times Roman,serif" font-size="10.00">GCTTA</text>
+<polygon fill="#218559" stroke="#218559" points="593,-734 593,-748 644,-748 644,-734 593,-734"/>
+<text text-anchor="start" x="602" y="-738.667" font-family="Times Roman,serif" font-size="10.00">TAAGC</text>
+</g>
+<!-- 35,2->34,1 -->
+<g id="edge838" class="edge"><title>35,2->34,1</title>
+<path fill="none" stroke="#dd1e2f" d="M586.07,-1608.84C568.813,-1594.15 551,-1579 551,-1579 551,-1579 551,-1131 551,-1131 551,-1131 591.863,-902.29 609.764,-802.095"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="613.262,-802.416 611.576,-791.957 606.371,-801.185 613.262,-802.416"/>
+</g>
+<!-- 34,4 -->
+<g id="node187" class="node"><title>34,4</title>
+<ellipse fill="none" stroke="black" cx="1020" cy="-756" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="997.5" y="-767.167" font-family="Times Roman,serif" font-size="10.00">34,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="995,-748 995,-762 1046,-762 1046,-748 995,-748"/>
+<text text-anchor="start" x="1004" y="-752.667" font-family="Times Roman,serif" font-size="10.00">TAAGC</text>
+<polygon fill="#218559" stroke="#218559" points="995,-734 995,-748 1046,-748 1046,-734 995,-734"/>
+<text text-anchor="start" x="1005" y="-738.667" font-family="Times Roman,serif" font-size="10.00">GCTTA</text>
+</g>
+<!-- 35,2->34,4 -->
+<g id="edge842" class="edge"><title>35,2->34,4</title>
+<path fill="none" stroke="#ebb035" d="M649.6,-1608.91C662.303,-1598.03 674,-1588 674,-1588 674,-1588 696,-1122 696,-1122 696,-1122 808,-1060 808,-1060 808,-1060 830,-992 830,-992 830,-992 942,-911 942,-911 942,-911 975.191,-845.043 998.271,-799.18"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="1001.51,-800.521 1002.88,-790.015 995.261,-797.375 1001.51,-800.521"/>
+</g>
+<!-- 35,3->36,1 -->
+<g id="edge848" class="edge"><title>35,3->36,1</title>
+<path fill="none" stroke="#06a2cb" d="M783.6,-1608.91C796.303,-1598.03 808,-1588 808,-1588 808,-1588 830,-1122 830,-1122 830,-1122 837.283,-1115.76 846.596,-1107.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="849.085,-1110.25 854.4,-1101.09 844.529,-1104.94 849.085,-1110.25"/>
+</g>
+<!-- 35,3->35,2 -->
+<g id="edge852" class="edge"><title>35,3->35,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-1642.48C695.29,-1642.75 685.041,-1642.82 675.091,-1642.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1639.18 664.867,-1642.47 674.792,-1646.18 674.937,-1639.18"/>
+</g>
+<!-- 35,4 -->
+<g id="node182" class="node"><title>35,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1636" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1647.17" font-family="Times Roman,serif" font-size="10.00">35,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1628 861,-1642 912,-1642 912,-1628 861,-1628"/>
+<text text-anchor="start" x="871" y="-1632.67" font-family="Times Roman,serif" font-size="10.00">CTTAA</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1614 861,-1628 912,-1628 912,-1614 861,-1614"/>
+<text text-anchor="start" x="871" y="-1618.67" font-family="Times Roman,serif" font-size="10.00">TTAAG</text>
+</g>
+<!-- 35,3->35,4 -->
+<g id="edge846" class="edge"><title>35,3->35,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1629.53C808.501,-1629.25 818.748,-1629.18 828.703,-1629.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1632.82 838.933,-1629.52 829.007,-1625.82 828.864,-1632.82"/>
+</g>
+<!-- 32,1 -->
+<g id="node194" class="node"><title>32,1</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1974" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1985.17" font-family="Times Roman,serif" font-size="10.00">32,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1966 593,-1980 644,-1980 644,-1966 593,-1966"/>
+<text text-anchor="start" x="600.5" y="-1970.67" font-family="Times Roman,serif" font-size="10.00">AAGCG</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1952 593,-1966 644,-1966 644,-1952 593,-1952"/>
+<text text-anchor="start" x="602.5" y="-1956.67" font-family="Times Roman,serif" font-size="10.00">CGCTT</text>
+</g>
+<!-- 35,3->32,1 -->
+<g id="edge850" class="edge"><title>35,3->32,1</title>
+<path fill="none" stroke="#06a2cb" d="M720.4,-1663.09C707.697,-1673.97 696,-1684 696,-1684 696,-1684 686,-1878 686,-1878 686,-1878 665.176,-1907.4 646.575,-1933.66"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="643.567,-1931.85 640.643,-1942.03 649.279,-1935.9 643.567,-1931.85"/>
+</g>
+<!-- 35,4->35,3 -->
+<g id="edge858" class="edge"><title>35,4->35,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-1642.48C829.29,-1642.75 819.041,-1642.82 809.091,-1642.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1639.18 798.867,-1642.47 808.792,-1646.18 808.937,-1639.18"/>
+</g>
+<!-- 34,2 -->
+<g id="node185" class="node"><title>34,2</title>
+<ellipse fill="none" stroke="black" cx="752" cy="-756" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="729.5" y="-767.167" font-family="Times Roman,serif" font-size="10.00">34,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="727,-748 727,-762 778,-762 778,-748 727,-748"/>
+<text text-anchor="start" x="737" y="-752.667" font-family="Times Roman,serif" font-size="10.00">CTTAA</text>
+<polygon fill="#218559" stroke="#218559" points="727,-734 727,-748 778,-748 778,-734 727,-734"/>
+<text text-anchor="start" x="737" y="-738.667" font-family="Times Roman,serif" font-size="10.00">TTAAG</text>
+</g>
+<!-- 35,4->34,2 -->
+<g id="edge856" class="edge"><title>35,4->34,2</title>
+<path fill="none" stroke="#ebb035" d="M854.4,-1608.91C841.697,-1598.03 830,-1588 830,-1588 830,-1588 820,-1343 820,-1343 820,-1343 808,-1122 808,-1122 808,-1122 774.093,-900.394 759.047,-802.057"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="762.495,-801.451 757.523,-792.095 755.576,-802.509 762.495,-801.451"/>
+</g>
+<!-- 34,3 -->
+<g id="node186" class="node"><title>34,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-756" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-767.167" font-family="Times Roman,serif" font-size="10.00">34,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-748 861,-762 912,-762 912,-748 861,-748"/>
+<text text-anchor="start" x="871" y="-752.667" font-family="Times Roman,serif" font-size="10.00">TTAAG</text>
+<polygon fill="#218559" stroke="#218559" points="861,-734 861,-748 912,-748 912,-734 861,-734"/>
+<text text-anchor="start" x="871" y="-738.667" font-family="Times Roman,serif" font-size="10.00">CTTAA</text>
+</g>
+<!-- 35,4->34,3 -->
+<g id="edge854" class="edge"><title>35,4->34,3</title>
+<path fill="none" stroke="#dd1e2f" d="M854.07,-1608.84C836.813,-1594.15 819,-1579 819,-1579 819,-1579 819,-1035 819,-1035 819,-1035 855.988,-880.975 874.999,-801.809"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="878.514,-802.16 877.446,-791.619 871.708,-800.525 878.514,-802.16"/>
+</g>
+<!-- 34,1->35,2 -->
+<g id="edge410" class="edge"><title>34,1->35,2</title>
+<path fill="none" stroke="#218559" d="M611.576,-791.957C594.806,-885.816 551,-1131 551,-1131 551,-1131 551,-1579 551,-1579 551,-1579 563.917,-1589.99 578.409,-1602.32"/>
+<polygon fill="#218559" stroke="#218559" points="576.185,-1605.02 586.07,-1608.84 580.721,-1599.69 576.185,-1605.02"/>
+</g>
+<!-- 34,1->34,2 -->
+<g id="edge406" class="edge"><title>34,1->34,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-749.529C674.501,-749.254 684.748,-749.183 694.703,-749.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-752.817 704.933,-749.523 695.007,-745.819 694.864,-752.817"/>
+</g>
+<!-- 33,2 -->
+<g id="node190" class="node"><title>33,2</title>
+<ellipse fill="none" stroke="black" cx="618" cy="-1540" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="595.5" y="-1551.17" font-family="Times Roman,serif" font-size="10.00">33,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="593,-1532 593,-1546 644,-1546 644,-1532 593,-1532"/>
+<text text-anchor="start" x="602.5" y="-1536.67" font-family="Times Roman,serif" font-size="10.00">CGCTT</text>
+<polygon fill="#218559" stroke="#218559" points="593,-1518 593,-1532 644,-1532 644,-1518 593,-1518"/>
+<text text-anchor="start" x="600.5" y="-1522.67" font-family="Times Roman,serif" font-size="10.00">AAGCG</text>
+</g>
+<!-- 34,1->33,2 -->
+<g id="edge408" class="edge"><title>34,1->33,2</title>
+<path fill="none" stroke="#218559" d="M611.576,-791.957C594.806,-885.816 551,-1131 551,-1131 551,-1131 551,-1209 551,-1209 551,-1209 590.35,-1403.4 608.737,-1494.24"/>
+<polygon fill="#218559" stroke="#218559" points="605.352,-1495.16 610.766,-1504.26 612.213,-1493.77 605.352,-1495.16"/>
+</g>
+<!-- 34,2->35,4 -->
+<g id="edge414" class="edge"><title>34,2->35,4</title>
+<path fill="none" stroke="#ebb035" d="M759.934,-791.701C777.871,-872.42 820,-1062 820,-1062 820,-1062 830,-1588 830,-1588 830,-1588 837.283,-1594.24 846.596,-1602.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="844.529,-1605.06 854.4,-1608.91 849.085,-1599.75 844.529,-1605.06"/>
+</g>
+<!-- 34,2->34,1 -->
+<g id="edge418" class="edge"><title>34,2->34,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-762.477C695.29,-762.749 685.041,-762.817 675.091,-762.684"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-759.18 664.867,-762.471 674.792,-766.179 674.937,-759.18"/>
+</g>
+<!-- 34,2->34,3 -->
+<g id="edge412" class="edge"><title>34,2->34,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-749.529C808.501,-749.254 818.748,-749.183 828.703,-749.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-752.817 838.933,-749.523 829.007,-745.819 828.864,-752.817"/>
+</g>
+<!-- 33,4 -->
+<g id="node192" class="node"><title>33,4</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1540" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1551.17" font-family="Times Roman,serif" font-size="10.00">33,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1532 861,-1546 912,-1546 912,-1532 861,-1532"/>
+<text text-anchor="start" x="871" y="-1536.67" font-family="Times Roman,serif" font-size="10.00">CTTAA</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1518 861,-1532 912,-1532 912,-1518 861,-1518"/>
+<text text-anchor="start" x="871" y="-1522.67" font-family="Times Roman,serif" font-size="10.00">TTAAG</text>
+</g>
+<!-- 34,2->33,4 -->
+<g id="edge416" class="edge"><title>34,2->33,4</title>
+<path fill="none" stroke="#ebb035" d="M762.034,-791.413C780.949,-858.173 820,-996 820,-996 820,-996 830,-1492 830,-1492 830,-1492 837.283,-1498.24 846.596,-1506.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="844.529,-1509.06 854.4,-1512.91 849.085,-1503.75 844.529,-1509.06"/>
+</g>
+<!-- 34,3->35,4 -->
+<g id="edge422" class="edge"><title>34,3->35,4</title>
+<path fill="none" stroke="#218559" d="M877.446,-791.619C859.384,-866.834 819,-1035 819,-1035 819,-1035 819,-1579 819,-1579 819,-1579 831.917,-1589.99 846.409,-1602.32"/>
+<polygon fill="#218559" stroke="#218559" points="844.185,-1605.02 854.07,-1608.84 848.721,-1599.69 844.185,-1605.02"/>
+</g>
+<!-- 34,3->34,2 -->
+<g id="edge426" class="edge"><title>34,3->34,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-762.477C829.29,-762.749 819.041,-762.817 809.091,-762.684"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-759.18 798.867,-762.471 808.792,-766.179 808.937,-759.18"/>
+</g>
+<!-- 34,3->34,4 -->
+<g id="edge420" class="edge"><title>34,3->34,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-749.529C942.501,-749.254 952.748,-749.183 962.703,-749.313"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-752.817 972.933,-749.523 963.007,-745.819 962.864,-752.817"/>
+</g>
+<!-- 34,3->33,4 -->
+<g id="edge424" class="edge"><title>34,3->33,4</title>
+<path fill="none" stroke="#218559" d="M877.446,-791.619C859.384,-866.834 819,-1035 819,-1035 819,-1035 819,-1483 819,-1483 819,-1483 831.917,-1493.99 846.409,-1506.32"/>
+<polygon fill="#218559" stroke="#218559" points="844.185,-1509.02 854.07,-1512.84 848.721,-1503.69 844.185,-1509.02"/>
+</g>
+<!-- 34,4->35,2 -->
+<g id="edge430" class="edge"><title>34,4->35,2</title>
+<path fill="none" stroke="#ebb035" d="M998.48,-788.28C975.392,-822.912 942,-873 942,-873 942,-873 830,-920 830,-920 830,-920 808,-1000 808,-1000 808,-1000 696,-1091 696,-1091 696,-1091 686,-1262 686,-1262 686,-1262 684,-1296 684,-1296 684,-1296 674,-1588 674,-1588 674,-1588 666.717,-1594.24 657.404,-1602.22"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="654.915,-1599.75 649.6,-1608.91 659.471,-1605.06 654.915,-1599.75"/>
+</g>
+<!-- 34,4->34,3 -->
+<g id="edge432" class="edge"><title>34,4->34,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-762.477C963.29,-762.749 953.041,-762.817 943.091,-762.684"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-759.18 932.867,-762.471 942.792,-766.179 942.937,-759.18"/>
+</g>
+<!-- 34,4->33,2 -->
+<g id="edge428" class="edge"><title>34,4->33,2</title>
+<path fill="none" stroke="#ebb035" d="M994.294,-786.38C975.762,-808.281 954,-834 954,-834 954,-834 818,-883 818,-883 818,-883 808,-929 808,-929 808,-929 696,-1042 696,-1042 696,-1042 686,-1243 686,-1243 686,-1243 647.466,-1411.3 628.413,-1494.52"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="624.955,-1493.94 626.135,-1504.47 631.778,-1495.5 624.955,-1493.94"/>
+</g>
+<!-- 33,1 -->
+<g id="node189" class="node"><title>33,1</title>
+<ellipse fill="none" stroke="black" cx="484" cy="-1540" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="461.5" y="-1551.17" font-family="Times Roman,serif" font-size="10.00">33,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="459,-1532 459,-1546 510,-1546 510,-1532 459,-1532"/>
+<text text-anchor="start" x="469" y="-1536.67" font-family="Times Roman,serif" font-size="10.00">TCGCT</text>
+<polygon fill="#218559" stroke="#218559" points="459,-1518 459,-1532 510,-1532 510,-1518 459,-1518"/>
+<text text-anchor="start" x="466.5" y="-1522.67" font-family="Times Roman,serif" font-size="10.00">AGCGA</text>
+</g>
+<!-- 33,1->33,2 -->
+<g id="edge812" class="edge"><title>33,1->33,2</title>
+<path fill="none" stroke="#dd1e2f" d="M530.867,-1533.53C540.501,-1533.25 550.748,-1533.18 560.703,-1533.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="560.864,-1536.82 570.933,-1533.52 561.007,-1529.82 560.864,-1536.82"/>
+</g>
+<!-- 33,2->34,1 -->
+<g id="edge814" class="edge"><title>33,2->34,1</title>
+<path fill="none" stroke="#dd1e2f" d="M610.766,-1504.26C593.441,-1418.67 551,-1209 551,-1209 551,-1209 551,-1131 551,-1131 551,-1131 591.863,-902.29 609.764,-802.095"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="613.262,-802.416 611.576,-791.957 606.371,-801.185 613.262,-802.416"/>
+</g>
+<!-- 33,2->34,4 -->
+<g id="edge818" class="edge"><title>33,2->34,4</title>
+<path fill="none" stroke="#ebb035" d="M624.261,-1504C638.874,-1419.98 674,-1218 674,-1218 674,-1218 696,-929 696,-929 696,-929 830,-835 830,-835 830,-835 942,-801 942,-801 942,-801 956.586,-792.585 973.143,-783.033"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="975.001,-786.002 981.914,-777.973 971.503,-779.938 975.001,-786.002"/>
+</g>
+<!-- 33,2->33,1 -->
+<g id="edge820" class="edge"><title>33,2->33,1</title>
+<path fill="none" stroke="#218559" d="M570.933,-1546.48C561.29,-1546.75 551.041,-1546.82 541.091,-1546.68"/>
+<polygon fill="#218559" stroke="#218559" points="540.937,-1543.18 530.867,-1546.47 540.792,-1550.18 540.937,-1543.18"/>
+</g>
+<!-- 33,2->33,3 -->
+<g id="edge816" class="edge"><title>33,2->33,3</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1533.53C674.501,-1533.25 684.748,-1533.18 694.703,-1533.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1536.82 704.933,-1533.52 695.007,-1529.82 694.864,-1536.82"/>
+</g>
+<!-- 33,3->36,1 -->
+<g id="edge824" class="edge"><title>33,3->36,1</title>
+<path fill="none" stroke="#06a2cb" d="M759.085,-1504.26C776.501,-1416.41 820,-1197 820,-1197 820,-1197 830,-1122 830,-1122 830,-1122 837.283,-1115.76 846.596,-1107.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="849.085,-1110.25 854.4,-1101.09 844.529,-1104.94 849.085,-1110.25"/>
+</g>
+<!-- 33,3->33,2 -->
+<g id="edge828" class="edge"><title>33,3->33,2</title>
+<path fill="none" stroke="#218559" d="M704.933,-1546.48C695.29,-1546.75 685.041,-1546.82 675.091,-1546.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1543.18 664.867,-1546.47 674.792,-1550.18 674.937,-1543.18"/>
+</g>
+<!-- 33,3->33,4 -->
+<g id="edge822" class="edge"><title>33,3->33,4</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1533.53C808.501,-1533.25 818.748,-1533.18 828.703,-1533.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1536.82 838.933,-1533.52 829.007,-1529.82 828.864,-1536.82"/>
+</g>
+<!-- 33,3->32,1 -->
+<g id="edge826" class="edge"><title>33,3->32,1</title>
+<path fill="none" stroke="#06a2cb" d="M720.4,-1567.09C707.697,-1577.97 696,-1588 696,-1588 696,-1588 686,-1698 686,-1698 686,-1698 674,-1780 674,-1780 674,-1780 647.692,-1871.14 631.139,-1928.48"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="627.682,-1927.84 628.271,-1938.42 634.407,-1929.78 627.682,-1927.84"/>
+</g>
+<!-- 33,4->34,2 -->
+<g id="edge832" class="edge"><title>33,4->34,2</title>
+<path fill="none" stroke="#ebb035" d="M854.4,-1512.91C841.697,-1502.03 830,-1492 830,-1492 830,-1492 820,-1032 820,-1032 820,-1032 782.554,-880.014 763.238,-801.612"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="766.541,-800.389 760.751,-791.517 759.745,-802.064 766.541,-800.389"/>
+</g>
+<!-- 33,4->34,3 -->
+<g id="edge830" class="edge"><title>33,4->34,3</title>
+<path fill="none" stroke="#dd1e2f" d="M854.07,-1512.84C836.813,-1498.15 819,-1483 819,-1483 819,-1483 819,-1035 819,-1035 819,-1035 855.988,-880.975 874.999,-801.809"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="878.514,-802.16 877.446,-791.619 871.708,-800.525 878.514,-802.16"/>
+</g>
+<!-- 33,4->33,3 -->
+<g id="edge834" class="edge"><title>33,4->33,3</title>
+<path fill="none" stroke="#218559" d="M838.933,-1546.48C829.29,-1546.75 819.041,-1546.82 809.091,-1546.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1543.18 798.867,-1546.47 808.792,-1550.18 808.937,-1543.18"/>
+</g>
+<!-- 32,1->35,3 -->
+<g id="edge388" class="edge"><title>32,1->35,3</title>
+<path fill="none" stroke="#06a2cb" d="M638.034,-1941C658.093,-1907.96 686,-1862 686,-1862 686,-1862 696,-1684 696,-1684 696,-1684 703.283,-1677.76 712.596,-1669.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="715.085,-1672.25 720.4,-1663.09 710.529,-1666.94 715.085,-1672.25"/>
+</g>
+<!-- 32,1->33,3 -->
+<g id="edge386" class="edge"><title>32,1->33,3</title>
+<path fill="none" stroke="#06a2cb" d="M628.271,-1938.42C644.438,-1882.41 674,-1780 674,-1780 674,-1780 696,-1588 696,-1588 696,-1588 703.283,-1581.76 712.596,-1573.78"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="715.085,-1576.25 720.4,-1567.09 710.529,-1570.94 715.085,-1576.25"/>
+</g>
+<!-- 32,1->32,2 -->
+<g id="edge384" class="edge"><title>32,1->32,2</title>
+<path fill="none" stroke="#dd1e2f" d="M664.867,-1967.53C674.501,-1967.25 684.748,-1967.18 694.703,-1967.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="694.864,-1970.82 704.933,-1967.52 695.007,-1963.82 694.864,-1970.82"/>
+</g>
+<!-- 32,2->31,1 -->
+<g id="edge390" class="edge"><title>32,2->31,1</title>
+<path fill="none" stroke="#dd1e2f" d="M719.991,-1947.17C702.354,-1932.39 684,-1917 684,-1917 684,-1917 653.327,-1831.02 633.801,-1776.29"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="637.071,-1775.04 630.414,-1766.8 630.478,-1777.39 637.071,-1775.04"/>
+</g>
+<!-- 32,2->32,1 -->
+<g id="edge394" class="edge"><title>32,2->32,1</title>
+<path fill="none" stroke="#218559" d="M704.933,-1980.48C695.29,-1980.75 685.041,-1980.82 675.091,-1980.68"/>
+<polygon fill="#218559" stroke="#218559" points="674.937,-1977.18 664.867,-1980.47 674.792,-1984.18 674.937,-1977.18"/>
+</g>
+<!-- 32,3 -->
+<g id="node196" class="node"><title>32,3</title>
+<ellipse fill="none" stroke="black" cx="886" cy="-1974" rx="46.8775" ry="36.0624"/>
+<text text-anchor="start" x="863.5" y="-1985.17" font-family="Times Roman,serif" font-size="10.00">32,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="861,-1966 861,-1980 912,-1980 912,-1966 861,-1966"/>
+<text text-anchor="start" x="870" y="-1970.67" font-family="Times Roman,serif" font-size="10.00">GCGTC</text>
+<polygon fill="#218559" stroke="#218559" points="861,-1952 861,-1966 912,-1966 912,-1952 861,-1952"/>
+<text text-anchor="start" x="868.5" y="-1956.67" font-family="Times Roman,serif" font-size="10.00">GACGC</text>
+</g>
+<!-- 32,2->32,3 -->
+<g id="edge392" class="edge"><title>32,2->32,3</title>
+<path fill="none" stroke="#dd1e2f" d="M798.867,-1967.53C808.501,-1967.25 818.748,-1967.18 828.703,-1967.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="828.864,-1970.82 838.933,-1967.52 829.007,-1963.82 828.864,-1970.82"/>
+</g>
+<!-- 32,3->32,2 -->
+<g id="edge398" class="edge"><title>32,3->32,2</title>
+<path fill="none" stroke="#218559" d="M838.933,-1980.48C829.29,-1980.75 819.041,-1980.82 809.091,-1980.68"/>
+<polygon fill="#218559" stroke="#218559" points="808.937,-1977.18 798.867,-1980.47 808.792,-1984.18 808.937,-1977.18"/>
+</g>
+<!-- 32,3->32,4 -->
+<g id="edge396" class="edge"><title>32,3->32,4</title>
+<path fill="none" stroke="#dd1e2f" d="M932.867,-1967.53C942.501,-1967.25 952.748,-1967.18 962.703,-1967.31"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="962.864,-1970.82 972.933,-1967.52 963.007,-1963.82 962.864,-1970.82"/>
+</g>
+<!-- 32,4->29,2 -->
+<g id="edge402" class="edge"><title>32,4->29,2</title>
+<path fill="none" stroke="#ebb035" d="M1003.8,-2008.13C987.264,-2042.98 964,-2092 964,-2092 964,-2092 942,-2188 942,-2188 942,-2188 922.563,-2228.96 906.591,-2262.61"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="903.323,-2261.33 902.198,-2271.87 909.647,-2264.34 903.323,-2261.33"/>
+</g>
+<!-- 32,4->31,3 -->
+<g id="edge400" class="edge"><title>32,4->31,3</title>
+<path fill="none" stroke="#dd1e2f" d="M1009.73,-1938.42C993.562,-1882.41 964,-1780 964,-1780 964,-1780 954,-1246 954,-1246 954,-1246 952,-1246 952,-1246 952,-1246 942,-1684 942,-1684 942,-1684 934.717,-1690.24 925.404,-1698.22"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="922.915,-1695.75 917.6,-1704.91 927.471,-1701.06 922.915,-1695.75"/>
+</g>
+<!-- 32,4->32,3 -->
+<g id="edge404" class="edge"><title>32,4->32,3</title>
+<path fill="none" stroke="#218559" d="M972.933,-1980.48C963.29,-1980.75 953.041,-1980.82 943.091,-1980.68"/>
+<polygon fill="#218559" stroke="#218559" points="942.937,-1977.18 932.867,-1980.47 942.792,-1984.18 942.937,-1977.18"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/.part-0.crc
new file mode 100644
index 0000000..32c39ff
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/.part-1.crc
new file mode 100644
index 0000000..72c5a6b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/part-0 b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/part-0
new file mode 100755
index 0000000..7db79d9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/part-1 b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/part-1
new file mode 100755
index 0000000..54cde64
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq1/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2.txt b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2.txt
new file mode 100644
index 0000000..474c862
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2.txt
@@ -0,0 +1,24 @@
+((2,1) [(2,2)] [] [(3,3)] [] CTAGC) (null)
+((2,2) [(6,1),(2,3)] [(1,4)] [] [(2,1)] TAGCG) (null)
+((2,3) [(2,4)] [] [(3,1)] [(2,2)] AGCGC) (null)
+((2,4) [(6,3)] [(1,2)] [] [(2,3)] GCGCA) (null)
+((4,1) [(4,2)] [] [] [(3,2)] CTAGG) (null)
+((4,2) [(5,1),(4,3)] [] [] [(4,1)] TAGGA) (null)
+((4,3) [(4,4)] [] [] [(3,4),(4,2)] AGGAG) (null)
+((4,4) [(5,3)] [] [] [(4,3)] GGAGT) (null)
+((6,1) [(6,2)] [] [] [(2,2)] AGCGC) (null)
+((6,2) [(6,3)] [] [] [(6,1)] GCGCA) (null)
+((6,3) [(6,4)] [] [] [(2,4),(6,2)] CGCAT) (null)
+((6,4) [] [] [] [(6,3)] GCATT) (null)
+((1,1) [(1,2)] [] [] [] AATGC) (null)
+((1,2) [(1,3)] [(2,4)] [] [(1,1)] ATGCG) (null)
+((1,3) [(1,4)] [] [] [(1,2)] TGCGC) (null)
+((1,4) [] [(2,2)] [] [(1,3)] GCGCT) (null)
+((3,1) [(3,2)] [] [(2,3)] [] CGCTA) (null)
+((3,2) [(4,1),(3,3)] [] [] [(3,1)] GCTAG) (null)
+((3,3) [(3,4)] [] [(2,1)] [(3,2)] CTAGG) (null)
+((3,4) [(4,3)] [] [] [(3,3)] TAGGA) (null)
+((5,1) [(5,2)] [] [] [(4,2)] AGGAG) (null)
+((5,2) [(5,3)] [] [] [(5,1)] GGAGT) (null)
+((5,3) [(5,4)] [] [] [(4,4),(5,2)] GAGTT) (null)
+((5,4) [] [] [] [(5,3)] AGTTG) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2.txt.svg b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2.txt.svg
new file mode 100644
index 0000000..70ffb5c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2.txt.svg
@@ -0,0 +1,587 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: walk_random_seq2_txt Pages: 1 -->
+<svg width="1260pt" height="669pt"
+ viewBox="0.00 0.00 1260.00 669.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 665)">
+<title>walk_random_seq2_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-665 1257,-665 1257,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-130 49,-331 211,-331 211,-130 49,-130"/>
+<text text-anchor="middle" x="130" y="-314.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="8,-558 8,-646 500,-646 500,-558 8,-558"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_3</title>
+<polygon fill="none" stroke="black" points="274,-200 274,-288 748,-288 748,-200 274,-200"/>
+</g>
+<g id="graph5" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="150,-462 150,-550 624,-550 624,-462 150,-462"/>
+</g>
+<g id="graph6" class="cluster"><title>cluster_5</title>
+<polygon fill="none" stroke="black" points="770,-8 770,-96 1244,-96 1244,-8 770,-8"/>
+</g>
+<g id="graph7" class="cluster"><title>cluster_4</title>
+<polygon fill="none" stroke="black" points="522,-104 522,-192 996,-192 996,-104 522,-104"/>
+</g>
+<g id="graph8" class="cluster"><title>cluster_6</title>
+<polygon fill="none" stroke="black" points="398,-366 398,-454 872,-454 872,-366 398,-366"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-279" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-279" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-279C74.8673,-279 156.744,-279 188.46,-279"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-282.5 198.862,-279 188.861,-275.5 188.862,-282.5"/>
+<text text-anchor="middle" x="130" y="-284.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-238" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-238" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-238C74.8673,-238 156.744,-238 188.46,-238"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-241.5 198.862,-238 188.861,-234.5 188.862,-241.5"/>
+<text text-anchor="middle" x="130" y="-243.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-197" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-197" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-197C74.8673,-197 156.744,-197 188.46,-197"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-200.5 198.862,-197 188.861,-193.5 188.862,-200.5"/>
+<text text-anchor="middle" x="130" y="-202.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-156" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-156" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-156C74.8673,-156 156.744,-156 188.46,-156"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-159.5 198.862,-156 188.861,-152.5 188.862,-159.5"/>
+<text text-anchor="middle" x="130" y="-161.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-602" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-613.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-594 37,-608 82,-608 82,-594 37,-594"/>
+<text text-anchor="start" x="43" y="-598.667" font-family="Times Roman,serif" font-size="10.00">AATGC</text>
+<polygon fill="#218559" stroke="#218559" points="37,-580 37,-594 82,-594 82,-580 37,-580"/>
+<text text-anchor="start" x="44" y="-584.667" font-family="Times Roman,serif" font-size="10.00">GCATT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-602" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-613.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-594 179,-608 224,-608 224,-594 179,-594"/>
+<text text-anchor="start" x="185" y="-598.667" font-family="Times Roman,serif" font-size="10.00">ATGCG</text>
+<polygon fill="#218559" stroke="#218559" points="179,-580 179,-594 224,-594 224,-580 179,-580"/>
+<text text-anchor="start" x="185" y="-584.667" font-family="Times Roman,serif" font-size="10.00">CGCAT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge77" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-595.755C116.207,-595.208 132.729,-595.105 148.049,-595.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-598.957 158.425,-595.756 148.534,-591.96 148.326,-598.957"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge83" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-608.244C143.825,-608.792 127.305,-608.895 111.982,-608.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-605.043 101.605,-608.245 111.497,-612.04 111.704,-605.043"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-602" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-613.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-594 303,-608 348,-608 348,-594 303,-594"/>
+<text text-anchor="start" x="308.5" y="-598.667" font-family="Times Roman,serif" font-size="10.00">TGCGC</text>
+<polygon fill="#218559" stroke="#218559" points="303,-580 303,-594 348,-594 348,-580 303,-580"/>
+<text text-anchor="start" x="307.5" y="-584.667" font-family="Times Roman,serif" font-size="10.00">GCGCA</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge79" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-595.562C252.601,-595.258 262.531,-595.176 272.159,-595.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-598.822 282.443,-595.554 272.527,-591.823 272.364,-598.822"/>
+</g>
+<!-- 2,4 -->
+<g id="node28" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-506" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-517.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-498 551,-512 596,-512 596,-498 551,-498"/>
+<text text-anchor="start" x="555.5" y="-502.667" font-family="Times Roman,serif" font-size="10.00">GCGCA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-484 551,-498 596,-498 596,-484 551,-484"/>
+<text text-anchor="start" x="556.5" y="-488.667" font-family="Times Roman,serif" font-size="10.00">TGCGC</text>
+</g>
+<!-- 1,2->2,4 -->
+<g id="edge81" class="edge"><title>1,2->2,4</title>
+<path fill="none" stroke="#ebb035" d="M231.143,-627.695C246.511,-640.796 262,-654 262,-654 262,-654 274,-661 274,-661 274,-661 500,-661 500,-661 500,-661 512,-639 512,-639 512,-639 535.266,-588.272 553.061,-549.474"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="556.462,-550.454 557.449,-539.906 550.099,-547.536 556.462,-550.454"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge87" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M282.443,-608.446C273.158,-608.745 263.225,-608.824 253.602,-608.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-605.175 243.327,-608.438 253.242,-612.173 253.407,-605.175"/>
+</g>
+<!-- 1,4 -->
+<g id="node18" class="node"><title>1,4</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-602" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-613.167" font-family="Times Roman,serif" font-size="10.00">1,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-594 427,-608 472,-608 472,-594 427,-594"/>
+<text text-anchor="start" x="432.5" y="-598.667" font-family="Times Roman,serif" font-size="10.00">GCGCT</text>
+<polygon fill="#218559" stroke="#218559" points="427,-580 427,-594 472,-594 472,-580 427,-580"/>
+<text text-anchor="start" x="431.5" y="-584.667" font-family="Times Roman,serif" font-size="10.00">AGCGC</text>
+</g>
+<!-- 1,3->1,4 -->
+<g id="edge85" class="edge"><title>1,3->1,4</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-595.562C376.601,-595.258 386.531,-595.176 396.159,-595.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-598.822 406.443,-595.554 396.527,-591.823 396.364,-598.822"/>
+</g>
+<!-- 1,4->1,3 -->
+<g id="edge91" class="edge"><title>1,4->1,3</title>
+<path fill="none" stroke="#218559" d="M406.443,-608.446C397.158,-608.745 387.225,-608.824 377.602,-608.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-605.175 367.327,-608.438 377.242,-612.173 377.407,-605.175"/>
+</g>
+<!-- 2,2 -->
+<g id="node26" class="node"><title>2,2</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-506" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-517.167" font-family="Times Roman,serif" font-size="10.00">2,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-498 303,-512 348,-512 348,-498 303,-498"/>
+<text text-anchor="start" x="309" y="-502.667" font-family="Times Roman,serif" font-size="10.00">TAGCG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-484 303,-498 348,-498 348,-484 303,-484"/>
+<text text-anchor="start" x="309" y="-488.667" font-family="Times Roman,serif" font-size="10.00">CGCTA</text>
+</g>
+<!-- 1,4->2,2 -->
+<g id="edge89" class="edge"><title>1,4->2,2</title>
+<path fill="none" stroke="#ebb035" d="M414.551,-580.127C399.843,-570.789 386,-562 386,-562 386,-562 374.667,-551.596 361.771,-539.757"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="363.804,-536.872 354.071,-532.688 359.07,-542.029 363.804,-536.872"/>
+</g>
+<!-- 3,1 -->
+<g id="node20" class="node"><title>3,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-244" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-255.167" font-family="Times Roman,serif" font-size="10.00">3,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-236 303,-250 348,-250 348,-236 303,-236"/>
+<text text-anchor="start" x="309" y="-240.667" font-family="Times Roman,serif" font-size="10.00">CGCTA</text>
+<polygon fill="#218559" stroke="#218559" points="303,-222 303,-236 348,-236 348,-222 303,-222"/>
+<text text-anchor="start" x="309" y="-226.667" font-family="Times Roman,serif" font-size="10.00">TAGCG</text>
+</g>
+<!-- 3,2 -->
+<g id="node21" class="node"><title>3,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-244" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-255.167" font-family="Times Roman,serif" font-size="10.00">3,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-236 427,-250 472,-250 472,-236 427,-236"/>
+<text text-anchor="start" x="433" y="-240.667" font-family="Times Roman,serif" font-size="10.00">GCTAG</text>
+<polygon fill="#218559" stroke="#218559" points="427,-222 427,-236 472,-236 472,-222 427,-222"/>
+<text text-anchor="start" x="433" y="-226.667" font-family="Times Roman,serif" font-size="10.00">CTAGC</text>
+</g>
+<!-- 3,1->3,2 -->
+<g id="edge93" class="edge"><title>3,1->3,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-237.562C376.601,-237.258 386.531,-237.176 396.159,-237.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-240.822 406.443,-237.554 396.527,-233.823 396.364,-240.822"/>
+</g>
+<!-- 2,3 -->
+<g id="node27" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-506" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-517.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-498 427,-512 472,-512 472,-498 427,-498"/>
+<text text-anchor="start" x="431.5" y="-502.667" font-family="Times Roman,serif" font-size="10.00">AGCGC</text>
+<polygon fill="#218559" stroke="#218559" points="427,-484 427,-498 472,-498 472,-484 427,-484"/>
+<text text-anchor="start" x="432.5" y="-488.667" font-family="Times Roman,serif" font-size="10.00">GCGCT</text>
+</g>
+<!-- 3,1->2,3 -->
+<g id="edge95" class="edge"><title>3,1->2,3</title>
+<path fill="none" stroke="#06a2cb" d="M336.891,-278.859C357.577,-339.499 398,-458 398,-458 398,-458 404.502,-464.119 412.863,-471.988"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="410.54,-474.609 420.221,-478.914 415.338,-469.511 410.54,-474.609"/>
+</g>
+<!-- 3,2->3,1 -->
+<g id="edge101" class="edge"><title>3,2->3,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-250.446C397.158,-250.745 387.225,-250.824 377.602,-250.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-247.175 367.327,-250.438 377.242,-254.173 377.407,-247.175"/>
+</g>
+<!-- 3,3 -->
+<g id="node22" class="node"><title>3,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-244" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-255.167" font-family="Times Roman,serif" font-size="10.00">3,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-236 551,-250 596,-250 596,-236 551,-236"/>
+<text text-anchor="start" x="557" y="-240.667" font-family="Times Roman,serif" font-size="10.00">CTAGG</text>
+<polygon fill="#218559" stroke="#218559" points="551,-222 551,-236 596,-236 596,-222 551,-222"/>
+<text text-anchor="start" x="557" y="-226.667" font-family="Times Roman,serif" font-size="10.00">CCTAG</text>
+</g>
+<!-- 3,2->3,3 -->
+<g id="edge99" class="edge"><title>3,2->3,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-237.562C500.601,-237.258 510.531,-237.176 520.159,-237.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-240.822 530.443,-237.554 520.527,-233.823 520.364,-240.822"/>
+</g>
+<!-- 4,1 -->
+<g id="node35" class="node"><title>4,1</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-148" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">4,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-140 551,-154 596,-154 596,-140 551,-140"/>
+<text text-anchor="start" x="557" y="-144.667" font-family="Times Roman,serif" font-size="10.00">CTAGG</text>
+<polygon fill="#218559" stroke="#218559" points="551,-126 551,-140 596,-140 596,-126 551,-126"/>
+<text text-anchor="start" x="557" y="-130.667" font-family="Times Roman,serif" font-size="10.00">CCTAG</text>
+</g>
+<!-- 3,2->4,1 -->
+<g id="edge97" class="edge"><title>3,2->4,1</title>
+<path fill="none" stroke="#dd1e2f" d="M479.143,-218.305C494.511,-205.204 510,-192 510,-192 510,-192 519.601,-185.295 531.307,-177.119"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="533.461,-179.884 539.655,-171.288 529.453,-174.145 533.461,-179.884"/>
+</g>
+<!-- 3,3->3,2 -->
+<g id="edge107" class="edge"><title>3,3->3,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-250.446C521.158,-250.745 511.225,-250.824 501.602,-250.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-247.175 491.327,-250.438 501.242,-254.173 501.407,-247.175"/>
+</g>
+<!-- 3,4 -->
+<g id="node23" class="node"><title>3,4</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-244" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-255.167" font-family="Times Roman,serif" font-size="10.00">3,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-236 675,-250 720,-250 720,-236 675,-236"/>
+<text text-anchor="start" x="681" y="-240.667" font-family="Times Roman,serif" font-size="10.00">TAGGA</text>
+<polygon fill="#218559" stroke="#218559" points="675,-222 675,-236 720,-236 720,-222 675,-222"/>
+<text text-anchor="start" x="682.5" y="-226.667" font-family="Times Roman,serif" font-size="10.00">TCCTA</text>
+</g>
+<!-- 3,3->3,4 -->
+<g id="edge103" class="edge"><title>3,3->3,4</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-237.562C624.601,-237.258 634.531,-237.176 644.159,-237.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-240.822 654.443,-237.554 644.527,-233.823 644.364,-240.822"/>
+</g>
+<!-- 2,1 -->
+<g id="node25" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-506" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-517.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-498 179,-512 224,-512 224,-498 179,-498"/>
+<text text-anchor="start" x="185" y="-502.667" font-family="Times Roman,serif" font-size="10.00">CTAGC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-484 179,-498 224,-498 224,-484 179,-484"/>
+<text text-anchor="start" x="185" y="-488.667" font-family="Times Roman,serif" font-size="10.00">GCTAG</text>
+</g>
+<!-- 3,3->2,1 -->
+<g id="edge105" class="edge"><title>3,3->2,1</title>
+<path fill="none" stroke="#06a2cb" d="M544.148,-271.271C523.744,-290.557 500,-313 500,-313 500,-313 398,-362 398,-362 398,-362 299.419,-434.059 241.729,-476.229"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="239.538,-473.494 233.531,-482.221 243.669,-479.146 239.538,-473.494"/>
+</g>
+<!-- 3,4->3,3 -->
+<g id="edge111" class="edge"><title>3,4->3,3</title>
+<path fill="none" stroke="#218559" d="M654.443,-250.446C645.158,-250.745 635.225,-250.824 625.602,-250.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-247.175 615.327,-250.438 625.242,-254.173 625.407,-247.175"/>
+</g>
+<!-- 4,3 -->
+<g id="node37" class="node"><title>4,3</title>
+<ellipse fill="none" stroke="black" cx="821" cy="-148" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="801.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">4,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="799,-140 799,-154 844,-154 844,-140 799,-140"/>
+<text text-anchor="start" x="803.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">AGGAG</text>
+<polygon fill="#218559" stroke="#218559" points="799,-126 799,-140 844,-140 844,-126 799,-126"/>
+<text text-anchor="start" x="806" y="-130.667" font-family="Times Roman,serif" font-size="10.00">CTCCT</text>
+</g>
+<!-- 3,4->4,3 -->
+<g id="edge109" class="edge"><title>3,4->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M733.282,-224.419C747.287,-216.861 760,-210 760,-210 760,-210 772.484,-197.311 786.157,-183.414"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="788.837,-185.681 793.356,-176.098 783.847,-180.771 788.837,-185.681"/>
+</g>
+<!-- 2,1->3,3 -->
+<g id="edge19" class="edge"><title>2,1->3,3</title>
+<path fill="none" stroke="#06a2cb" d="M213.198,-471.207C230.999,-420.429 262,-332 262,-332 262,-332 500,-289 500,-289 500,-289 513.817,-280.483 529.429,-270.859"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="531.534,-273.673 538.21,-265.446 527.861,-267.714 531.534,-273.673"/>
+</g>
+<!-- 2,1->2,2 -->
+<g id="edge17" class="edge"><title>2,1->2,2</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-499.562C252.601,-499.258 262.531,-499.176 272.159,-499.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-502.822 282.443,-499.554 272.527,-495.823 272.364,-502.822"/>
+</g>
+<!-- 2,2->1,4 -->
+<g id="edge25" class="edge"><title>2,2->1,4</title>
+<path fill="none" stroke="#ebb035" d="M356.611,-530.473C372.521,-542.79 391.976,-557.853 408.924,-570.973"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="406.965,-573.883 417.015,-577.238 411.251,-568.348 406.965,-573.883"/>
+</g>
+<!-- 2,2->2,1 -->
+<g id="edge27" class="edge"><title>2,2->2,1</title>
+<path fill="none" stroke="#218559" d="M282.443,-512.446C273.158,-512.745 263.225,-512.824 253.602,-512.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-509.175 243.327,-512.438 253.242,-516.173 253.407,-509.175"/>
+</g>
+<!-- 2,2->2,3 -->
+<g id="edge23" class="edge"><title>2,2->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-499.562C376.601,-499.258 386.531,-499.176 396.159,-499.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-502.822 406.443,-499.554 396.527,-495.823 396.364,-502.822"/>
+</g>
+<!-- 6,1 -->
+<g id="node40" class="node"><title>6,1</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-410" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-421.167" font-family="Times Roman,serif" font-size="10.00">6,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-402 427,-416 472,-416 472,-402 427,-402"/>
+<text text-anchor="start" x="431.5" y="-406.667" font-family="Times Roman,serif" font-size="10.00">AGCGC</text>
+<polygon fill="#218559" stroke="#218559" points="427,-388 427,-402 472,-402 472,-388 427,-388"/>
+<text text-anchor="start" x="432.5" y="-392.667" font-family="Times Roman,serif" font-size="10.00">GCGCT</text>
+</g>
+<!-- 2,2->6,1 -->
+<g id="edge21" class="edge"><title>2,2->6,1</title>
+<path fill="none" stroke="#dd1e2f" d="M356.611,-481.527C372.521,-469.21 391.976,-454.147 408.924,-441.027"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="411.251,-443.652 417.015,-434.762 406.965,-438.117 411.251,-443.652"/>
+</g>
+<!-- 2,3->3,1 -->
+<g id="edge31" class="edge"><title>2,3->3,1</title>
+<path fill="none" stroke="#06a2cb" d="M419.713,-479.502C403.261,-464.617 386,-449 386,-449 386,-449 356.323,-349.267 338.369,-288.928"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="341.693,-287.827 335.486,-279.241 334.984,-289.824 341.693,-287.827"/>
+</g>
+<!-- 2,3->2,2 -->
+<g id="edge33" class="edge"><title>2,3->2,2</title>
+<path fill="none" stroke="#218559" d="M406.443,-512.446C397.158,-512.745 387.225,-512.824 377.602,-512.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-509.175 367.327,-512.438 377.242,-516.173 377.407,-509.175"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge29" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-499.562C500.601,-499.258 510.531,-499.176 520.159,-499.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-502.822 530.443,-499.554 520.527,-495.823 520.364,-502.822"/>
+</g>
+<!-- 2,4->1,2 -->
+<g id="edge37" class="edge"><title>2,4->1,2</title>
+<path fill="none" stroke="#ebb035" d="M555.885,-539.058C534.308,-580.734 500,-647 500,-647 500,-647 274,-647 274,-647 274,-647 260.183,-638.483 244.571,-628.859"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="246.139,-625.714 235.79,-623.446 242.466,-631.673 246.139,-625.714"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge39" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M530.443,-512.446C521.158,-512.745 511.225,-512.824 501.602,-512.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-509.175 491.327,-512.438 501.242,-516.173 501.407,-509.175"/>
+</g>
+<!-- 6,3 -->
+<g id="node42" class="node"><title>6,3</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-410" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-421.167" font-family="Times Roman,serif" font-size="10.00">6,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-402 675,-416 720,-416 720,-402 675,-402"/>
+<text text-anchor="start" x="681" y="-406.667" font-family="Times Roman,serif" font-size="10.00">CGCAT</text>
+<polygon fill="#218559" stroke="#218559" points="675,-388 675,-402 720,-402 720,-388 675,-388"/>
+<text text-anchor="start" x="681" y="-392.667" font-family="Times Roman,serif" font-size="10.00">ATGCG</text>
+</g>
+<!-- 2,4->6,3 -->
+<g id="edge35" class="edge"><title>2,4->6,3</title>
+<path fill="none" stroke="#dd1e2f" d="M607.817,-484.447C622.387,-475.427 636,-467 636,-467 636,-467 647.721,-456.047 660.888,-443.744"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="663.369,-446.216 668.286,-436.831 658.59,-441.101 663.369,-446.216"/>
+</g>
+<!-- 5,1 -->
+<g id="node30" class="node"><title>5,1</title>
+<ellipse fill="none" stroke="black" cx="821" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="801.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">5,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="799,-44 799,-58 844,-58 844,-44 799,-44"/>
+<text text-anchor="start" x="803.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">AGGAG</text>
+<polygon fill="#218559" stroke="#218559" points="799,-30 799,-44 844,-44 844,-30 799,-30"/>
+<text text-anchor="start" x="806" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">CTCCT</text>
+</g>
+<!-- 5,2 -->
+<g id="node31" class="node"><title>5,2</title>
+<ellipse fill="none" stroke="black" cx="945" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="925.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">5,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="923,-44 923,-58 968,-58 968,-44 923,-44"/>
+<text text-anchor="start" x="928.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">GGAGT</text>
+<polygon fill="#218559" stroke="#218559" points="923,-30 923,-44 968,-44 968,-30 923,-30"/>
+<text text-anchor="start" x="929.5" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">ACTCC</text>
+</g>
+<!-- 5,1->5,2 -->
+<g id="edge113" class="edge"><title>5,1->5,2</title>
+<path fill="none" stroke="#dd1e2f" d="M863.327,-45.5616C872.601,-45.2583 882.531,-45.1764 892.159,-45.3159"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="892.364,-48.8215 902.443,-45.5541 892.527,-41.8234 892.364,-48.8215"/>
+</g>
+<!-- 4,2 -->
+<g id="node36" class="node"><title>4,2</title>
+<ellipse fill="none" stroke="black" cx="697" cy="-148" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="677.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">4,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="675,-140 675,-154 720,-154 720,-140 675,-140"/>
+<text text-anchor="start" x="681" y="-144.667" font-family="Times Roman,serif" font-size="10.00">TAGGA</text>
+<polygon fill="#218559" stroke="#218559" points="675,-126 675,-140 720,-140 720,-126 675,-126"/>
+<text text-anchor="start" x="682.5" y="-130.667" font-family="Times Roman,serif" font-size="10.00">TCCTA</text>
+</g>
+<!-- 5,1->4,2 -->
+<g id="edge115" class="edge"><title>5,1->4,2</title>
+<path fill="none" stroke="#218559" d="M790.857,-77.6953C775.489,-90.7961 760,-104 760,-104 760,-104 750.399,-110.705 738.693,-118.881"/>
+<polygon fill="#218559" stroke="#218559" points="736.539,-116.116 730.345,-124.712 740.547,-121.855 736.539,-116.116"/>
+</g>
+<!-- 5,2->5,1 -->
+<g id="edge119" class="edge"><title>5,2->5,1</title>
+<path fill="none" stroke="#218559" d="M902.443,-58.4459C893.158,-58.7455 883.225,-58.8237 873.602,-58.6806"/>
+<polygon fill="#218559" stroke="#218559" points="873.407,-55.1751 863.327,-58.4384 873.242,-62.1732 873.407,-55.1751"/>
+</g>
+<!-- 5,3 -->
+<g id="node32" class="node"><title>5,3</title>
+<ellipse fill="none" stroke="black" cx="1069" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1049.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">5,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1047,-44 1047,-58 1092,-58 1092,-44 1047,-44"/>
+<text text-anchor="start" x="1053.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">GAGTT</text>
+<polygon fill="#218559" stroke="#218559" points="1047,-30 1047,-44 1092,-44 1092,-30 1047,-30"/>
+<text text-anchor="start" x="1053.5" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">AACTC</text>
+</g>
+<!-- 5,2->5,3 -->
+<g id="edge117" class="edge"><title>5,2->5,3</title>
+<path fill="none" stroke="#dd1e2f" d="M987.327,-45.5616C996.601,-45.2583 1006.53,-45.1764 1016.16,-45.3159"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1016.36,-48.8215 1026.44,-45.5541 1016.53,-41.8234 1016.36,-48.8215"/>
+</g>
+<!-- 5,3->5,2 -->
+<g id="edge125" class="edge"><title>5,3->5,2</title>
+<path fill="none" stroke="#218559" d="M1026.44,-58.4459C1017.16,-58.7455 1007.23,-58.8237 997.602,-58.6806"/>
+<polygon fill="#218559" stroke="#218559" points="997.407,-55.1751 987.327,-58.4384 997.242,-62.1732 997.407,-55.1751"/>
+</g>
+<!-- 5,4 -->
+<g id="node33" class="node"><title>5,4</title>
+<ellipse fill="none" stroke="black" cx="1193" cy="-52" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="1173.5" y="-63.1667" font-family="Times Roman,serif" font-size="10.00">5,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1171,-44 1171,-58 1216,-58 1216,-44 1171,-44"/>
+<text text-anchor="start" x="1177.5" y="-48.6667" font-family="Times Roman,serif" font-size="10.00">AGTTG</text>
+<polygon fill="#218559" stroke="#218559" points="1171,-30 1171,-44 1216,-44 1216,-30 1171,-30"/>
+<text text-anchor="start" x="1177" y="-34.6667" font-family="Times Roman,serif" font-size="10.00">CAACT</text>
+</g>
+<!-- 5,3->5,4 -->
+<g id="edge121" class="edge"><title>5,3->5,4</title>
+<path fill="none" stroke="#dd1e2f" d="M1111.33,-45.5616C1120.6,-45.2583 1130.53,-45.1764 1140.16,-45.3159"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1140.36,-48.8215 1150.44,-45.5541 1140.53,-41.8234 1140.36,-48.8215"/>
+</g>
+<!-- 4,4 -->
+<g id="node38" class="node"><title>4,4</title>
+<ellipse fill="none" stroke="black" cx="945" cy="-148" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="925.5" y="-159.167" font-family="Times Roman,serif" font-size="10.00">4,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="923,-140 923,-154 968,-154 968,-140 923,-140"/>
+<text text-anchor="start" x="928.5" y="-144.667" font-family="Times Roman,serif" font-size="10.00">GGAGT</text>
+<polygon fill="#218559" stroke="#218559" points="923,-126 923,-140 968,-140 968,-126 923,-126"/>
+<text text-anchor="start" x="929.5" y="-130.667" font-family="Times Roman,serif" font-size="10.00">ACTCC</text>
+</g>
+<!-- 5,3->4,4 -->
+<g id="edge123" class="edge"><title>5,3->4,4</title>
+<path fill="none" stroke="#218559" d="M1041.36,-80.0975C1025.22,-96.502 1008,-114 1008,-114 1008,-114 1000.24,-118.188 990.168,-123.624"/>
+<polygon fill="#218559" stroke="#218559" points="988.42,-120.59 981.282,-128.419 991.745,-126.75 988.42,-120.59"/>
+</g>
+<!-- 5,4->5,3 -->
+<g id="edge127" class="edge"><title>5,4->5,3</title>
+<path fill="none" stroke="#218559" d="M1150.44,-58.4459C1141.16,-58.7455 1131.23,-58.8237 1121.6,-58.6806"/>
+<polygon fill="#218559" stroke="#218559" points="1121.41,-55.1751 1111.33,-58.4384 1121.24,-62.1732 1121.41,-55.1751"/>
+</g>
+<!-- 4,1->3,2 -->
+<g id="edge43" class="edge"><title>4,1->3,2</title>
+<path fill="none" stroke="#218559" d="M541.015,-172.762C525.051,-185.122 505.587,-200.19 488.68,-213.28"/>
+<polygon fill="#218559" stroke="#218559" points="486.376,-210.637 480.611,-219.527 490.661,-216.173 486.376,-210.637"/>
+</g>
+<!-- 4,1->4,2 -->
+<g id="edge41" class="edge"><title>4,1->4,2</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-141.562C624.601,-141.258 634.531,-141.176 644.159,-141.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-144.822 654.443,-141.554 644.527,-137.823 644.364,-144.822"/>
+</g>
+<!-- 4,2->5,1 -->
+<g id="edge45" class="edge"><title>4,2->5,1</title>
+<path fill="none" stroke="#dd1e2f" d="M728.611,-123.527C744.521,-111.21 763.976,-96.1473 780.924,-83.0268"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="783.251,-85.6517 789.015,-76.7624 778.965,-80.1166 783.251,-85.6517"/>
+</g>
+<!-- 4,2->4,1 -->
+<g id="edge49" class="edge"><title>4,2->4,1</title>
+<path fill="none" stroke="#218559" d="M654.443,-154.446C645.158,-154.745 635.225,-154.824 625.602,-154.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-151.175 615.327,-154.438 625.242,-158.173 625.407,-151.175"/>
+</g>
+<!-- 4,2->4,3 -->
+<g id="edge47" class="edge"><title>4,2->4,3</title>
+<path fill="none" stroke="#dd1e2f" d="M739.327,-141.562C748.601,-141.258 758.531,-141.176 768.159,-141.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="768.364,-144.822 778.443,-141.554 768.527,-137.823 768.364,-144.822"/>
+</g>
+<!-- 4,3->3,4 -->
+<g id="edge53" class="edge"><title>4,3->3,4</title>
+<path fill="none" stroke="#218559" d="M789.015,-172.762C773.051,-185.122 753.587,-200.19 736.68,-213.28"/>
+<polygon fill="#218559" stroke="#218559" points="734.376,-210.637 728.611,-219.527 738.661,-216.173 734.376,-210.637"/>
+</g>
+<!-- 4,3->4,2 -->
+<g id="edge55" class="edge"><title>4,3->4,2</title>
+<path fill="none" stroke="#218559" d="M778.443,-154.446C769.158,-154.745 759.225,-154.824 749.602,-154.681"/>
+<polygon fill="#218559" stroke="#218559" points="749.407,-151.175 739.327,-154.438 749.242,-158.173 749.407,-151.175"/>
+</g>
+<!-- 4,3->4,4 -->
+<g id="edge51" class="edge"><title>4,3->4,4</title>
+<path fill="none" stroke="#dd1e2f" d="M863.327,-141.562C872.601,-141.258 882.531,-141.176 892.159,-141.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="892.364,-144.822 902.443,-141.554 892.527,-137.823 892.364,-144.822"/>
+</g>
+<!-- 4,4->5,3 -->
+<g id="edge57" class="edge"><title>4,4->5,3</title>
+<path fill="none" stroke="#dd1e2f" d="M976.611,-123.527C992.521,-111.21 1011.98,-96.1473 1028.92,-83.0268"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="1031.25,-85.6517 1037.02,-76.7624 1026.97,-80.1166 1031.25,-85.6517"/>
+</g>
+<!-- 4,4->4,3 -->
+<g id="edge59" class="edge"><title>4,4->4,3</title>
+<path fill="none" stroke="#218559" d="M902.443,-154.446C893.158,-154.745 883.225,-154.824 873.602,-154.681"/>
+<polygon fill="#218559" stroke="#218559" points="873.407,-151.175 863.327,-154.438 873.242,-158.173 873.407,-151.175"/>
+</g>
+<!-- 6,1->2,2 -->
+<g id="edge63" class="edge"><title>6,1->2,2</title>
+<path fill="none" stroke="#218559" d="M415.655,-433.288C400.544,-443.843 386,-454 386,-454 386,-454 375.378,-463.055 362.998,-473.608"/>
+<polygon fill="#218559" stroke="#218559" points="360.482,-471.154 355.143,-480.305 365.023,-476.481 360.482,-471.154"/>
+</g>
+<!-- 6,2 -->
+<g id="node41" class="node"><title>6,2</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-410" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-421.167" font-family="Times Roman,serif" font-size="10.00">6,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-402 551,-416 596,-416 596,-402 551,-402"/>
+<text text-anchor="start" x="555.5" y="-406.667" font-family="Times Roman,serif" font-size="10.00">GCGCA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-388 551,-402 596,-402 596,-388 551,-388"/>
+<text text-anchor="start" x="556.5" y="-392.667" font-family="Times Roman,serif" font-size="10.00">TGCGC</text>
+</g>
+<!-- 6,1->6,2 -->
+<g id="edge61" class="edge"><title>6,1->6,2</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-403.562C500.601,-403.258 510.531,-403.176 520.159,-403.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-406.822 530.443,-403.554 520.527,-399.823 520.364,-406.822"/>
+</g>
+<!-- 6,2->6,1 -->
+<g id="edge67" class="edge"><title>6,2->6,1</title>
+<path fill="none" stroke="#218559" d="M530.443,-416.446C521.158,-416.745 511.225,-416.824 501.602,-416.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-413.175 491.327,-416.438 501.242,-420.173 501.407,-413.175"/>
+</g>
+<!-- 6,2->6,3 -->
+<g id="edge65" class="edge"><title>6,2->6,3</title>
+<path fill="none" stroke="#dd1e2f" d="M615.327,-403.562C624.601,-403.258 634.531,-403.176 644.159,-403.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="644.364,-406.822 654.443,-403.554 644.527,-399.823 644.364,-406.822"/>
+</g>
+<!-- 6,3->2,4 -->
+<g id="edge71" class="edge"><title>6,3->2,4</title>
+<path fill="none" stroke="#218559" d="M665.015,-434.762C649.051,-447.122 629.587,-462.19 612.68,-475.28"/>
+<polygon fill="#218559" stroke="#218559" points="610.376,-472.637 604.611,-481.527 614.661,-478.173 610.376,-472.637"/>
+</g>
+<!-- 6,3->6,2 -->
+<g id="edge73" class="edge"><title>6,3->6,2</title>
+<path fill="none" stroke="#218559" d="M654.443,-416.446C645.158,-416.745 635.225,-416.824 625.602,-416.681"/>
+<polygon fill="#218559" stroke="#218559" points="625.407,-413.175 615.327,-416.438 625.242,-420.173 625.407,-413.175"/>
+</g>
+<!-- 6,4 -->
+<g id="node43" class="node"><title>6,4</title>
+<ellipse fill="none" stroke="black" cx="821" cy="-410" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="801.5" y="-421.167" font-family="Times Roman,serif" font-size="10.00">6,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="799,-402 799,-416 844,-416 844,-402 799,-402"/>
+<text text-anchor="start" x="806" y="-406.667" font-family="Times Roman,serif" font-size="10.00">GCATT</text>
+<polygon fill="#218559" stroke="#218559" points="799,-388 799,-402 844,-402 844,-388 799,-388"/>
+<text text-anchor="start" x="805" y="-392.667" font-family="Times Roman,serif" font-size="10.00">AATGC</text>
+</g>
+<!-- 6,3->6,4 -->
+<g id="edge69" class="edge"><title>6,3->6,4</title>
+<path fill="none" stroke="#dd1e2f" d="M739.327,-403.562C748.601,-403.258 758.531,-403.176 768.159,-403.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="768.364,-406.822 778.443,-403.554 768.527,-399.823 768.364,-406.822"/>
+</g>
+<!-- 6,4->6,3 -->
+<g id="edge75" class="edge"><title>6,4->6,3</title>
+<path fill="none" stroke="#218559" d="M778.443,-416.446C769.158,-416.745 759.225,-416.824 749.602,-416.681"/>
+<polygon fill="#218559" stroke="#218559" points="749.407,-413.175 739.327,-416.438 749.242,-420.173 749.407,-413.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/.part-0.crc
new file mode 100644
index 0000000..2372965
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/.part-1.crc
new file mode 100644
index 0000000..dc540d5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/part-0 b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/part-0
new file mode 100755
index 0000000..f05a165
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/part-1 b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/part-1
new file mode 100755
index 0000000..54201ec
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/synthetic/walk_random_seq2/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip.txt b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip.txt
new file mode 100644
index 0000000..84f6828
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip.txt
@@ -0,0 +1,6 @@
+((2,1) [(2,3)] [] [] [] GGAATA) (null)
+((2,3) [(2,4)] [] [] [(2,1)] AATAC) (null)
+((2,4) [] [(1,2)] [] [(2,3)] ATACG) (null)
+((1,1) [(1,2)] [] [] [] AACGT) (null)
+((1,2) [(1,3)] [(2,4)] [] [(1,1)] ACGTA) (null)
+((1,3) [] [] [] [(1,2)] CGTATA) (null)
diff --git a/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip.txt.svg b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip.txt.svg
new file mode 100644
index 0000000..9f13c3f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip.txt.svg
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.26.3 (20100126.1600)
+ -->
+<!-- Title: fr_with_tip_txt Pages: 1 -->
+<svg width="640pt" height="417pt"
+ viewBox="0.00 0.00 640.00 417.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph1" class="graph" transform="scale(1 1) rotate(0) translate(4 413)">
+<title>fr_with_tip_txt</title>
+<polygon fill="white" stroke="white" points="-4,5 -4,-413 637,-413 637,5 -4,5"/>
+<g id="graph2" class="cluster"><title>cluster_legend</title>
+<polygon fill="none" stroke="black" points="49,-8 49,-209 211,-209 211,-8 49,-8"/>
+<text text-anchor="middle" x="130" y="-192.4" font-family="Times Roman,serif" font-size="14.00">legend</text>
+</g>
+<g id="graph3" class="cluster"><title>cluster_1</title>
+<polygon fill="none" stroke="black" points="274,-313 274,-401 624,-401 624,-313 274,-313"/>
+</g>
+<g id="graph4" class="cluster"><title>cluster_2</title>
+<polygon fill="none" stroke="black" points="8,-217 8,-305 376,-305 376,-217 8,-217"/>
+</g>
+<!-- legend_0_0 -->
+<g id="node2" class="node"><title>legend_0_0</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_0 -->
+<g id="node3" class="node"><title>legend_1_0</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-157" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_0->legend_1_0 -->
+<g id="edge3" class="edge"><title>legend_0_0->legend_1_0</title>
+<path fill="none" stroke="#dd1e2f" d="M61.0074,-157C74.8673,-157 156.744,-157 188.46,-157"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="188.862,-160.5 198.862,-157 188.861,-153.5 188.862,-160.5"/>
+<text text-anchor="middle" x="130" y="-162.4" font-family="Times Roman,serif" font-size="14.00">FF</text>
+</g>
+<!-- legend_0_1 -->
+<g id="node5" class="node"><title>legend_0_1</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_1 -->
+<g id="node6" class="node"><title>legend_1_1</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-116" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_1->legend_1_1 -->
+<g id="edge5" class="edge"><title>legend_0_1->legend_1_1</title>
+<path fill="none" stroke="#ebb035" d="M61.0074,-116C74.8673,-116 156.744,-116 188.46,-116"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="188.862,-119.5 198.862,-116 188.861,-112.5 188.862,-119.5"/>
+<text text-anchor="middle" x="130" y="-121.4" font-family="Times Roman,serif" font-size="14.00">FR</text>
+</g>
+<!-- legend_0_2 -->
+<g id="node8" class="node"><title>legend_0_2</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_2 -->
+<g id="node9" class="node"><title>legend_1_2</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-75" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_2->legend_1_2 -->
+<g id="edge7" class="edge"><title>legend_0_2->legend_1_2</title>
+<path fill="none" stroke="#06a2cb" d="M61.0074,-75C74.8673,-75 156.744,-75 188.46,-75"/>
+<polygon fill="#06a2cb" stroke="#06a2cb" points="188.862,-78.5001 198.862,-75 188.861,-71.5001 188.862,-78.5001"/>
+<text text-anchor="middle" x="130" y="-80.4" font-family="Times Roman,serif" font-size="14.00">RF</text>
+</g>
+<!-- legend_0_3 -->
+<g id="node11" class="node"><title>legend_0_3</title>
+<ellipse fill="black" stroke="black" cx="59" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_1_3 -->
+<g id="node12" class="node"><title>legend_1_3</title>
+<ellipse fill="black" stroke="black" cx="201" cy="-34" rx="1.8" ry="1.8"/>
+</g>
+<!-- legend_0_3->legend_1_3 -->
+<g id="edge9" class="edge"><title>legend_0_3->legend_1_3</title>
+<path fill="none" stroke="#218559" d="M61.0074,-34C74.8673,-34 156.744,-34 188.46,-34"/>
+<polygon fill="#218559" stroke="#218559" points="188.862,-37.5001 198.862,-34 188.861,-30.5001 188.862,-37.5001"/>
+<text text-anchor="middle" x="130" y="-39.4" font-family="Times Roman,serif" font-size="14.00">RR</text>
+</g>
+<!-- 1,1 -->
+<g id="node15" class="node"><title>1,1</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-349 303,-363 348,-363 348,-349 303,-349"/>
+<text text-anchor="start" x="309" y="-353.667" font-family="Times Roman,serif" font-size="10.00">AACGT</text>
+<polygon fill="#218559" stroke="#218559" points="303,-335 303,-349 348,-349 348,-335 303,-335"/>
+<text text-anchor="start" x="310" y="-339.667" font-family="Times Roman,serif" font-size="10.00">ACGTT</text>
+</g>
+<!-- 1,2 -->
+<g id="node16" class="node"><title>1,2</title>
+<ellipse fill="none" stroke="black" cx="449" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="429.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,2--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="427,-349 427,-363 472,-363 472,-349 427,-349"/>
+<text text-anchor="start" x="433.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">ACGTA</text>
+<polygon fill="#218559" stroke="#218559" points="427,-335 427,-349 472,-349 472,-335 427,-335"/>
+<text text-anchor="start" x="434" y="-339.667" font-family="Times Roman,serif" font-size="10.00">TACGT</text>
+</g>
+<!-- 1,1->1,2 -->
+<g id="edge23" class="edge"><title>1,1->1,2</title>
+<path fill="none" stroke="#dd1e2f" d="M367.327,-350.562C376.601,-350.258 386.531,-350.176 396.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="396.364,-353.822 406.443,-350.554 396.527,-346.823 396.364,-353.822"/>
+</g>
+<!-- 1,2->1,1 -->
+<g id="edge29" class="edge"><title>1,2->1,1</title>
+<path fill="none" stroke="#218559" d="M406.443,-363.446C397.158,-363.745 387.225,-363.824 377.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="377.407,-360.175 367.327,-363.438 377.242,-367.173 377.407,-360.175"/>
+</g>
+<!-- 1,3 -->
+<g id="node17" class="node"><title>1,3</title>
+<ellipse fill="none" stroke="black" cx="573" cy="-357" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="553.5" y="-368.167" font-family="Times Roman,serif" font-size="10.00">1,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="551,-349 551,-363 596,-363 596,-349 551,-349"/>
+<text text-anchor="start" x="555.5" y="-353.667" font-family="Times Roman,serif" font-size="10.00">CGTATA</text>
+<polygon fill="#218559" stroke="#218559" points="551,-335 551,-349 596,-349 596,-335 551,-335"/>
+<text text-anchor="start" x="555.5" y="-339.667" font-family="Times Roman,serif" font-size="10.00">TATACG</text>
+</g>
+<!-- 1,2->1,3 -->
+<g id="edge25" class="edge"><title>1,2->1,3</title>
+<path fill="none" stroke="#dd1e2f" d="M491.327,-350.562C500.601,-350.258 510.531,-350.176 520.159,-350.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="520.364,-353.822 530.443,-350.554 520.527,-346.823 520.364,-353.822"/>
+</g>
+<!-- 2,4 -->
+<g id="node21" class="node"><title>2,4</title>
+<ellipse fill="none" stroke="black" cx="325" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="305.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,4--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="303,-253 303,-267 348,-267 348,-253 303,-253"/>
+<text text-anchor="start" x="309.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">ATACG</text>
+<polygon fill="#218559" stroke="#218559" points="303,-239 303,-253 348,-253 348,-239 303,-239"/>
+<text text-anchor="start" x="310.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">CGTAT</text>
+</g>
+<!-- 1,2->2,4 -->
+<g id="edge27" class="edge"><title>1,2->2,4</title>
+<path fill="none" stroke="#ebb035" d="M415.655,-333.712C400.544,-323.157 386,-313 386,-313 386,-313 375.378,-303.945 362.998,-293.392"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="365.023,-290.519 355.143,-286.695 360.482,-295.846 365.023,-290.519"/>
+</g>
+<!-- 1,3->1,2 -->
+<g id="edge31" class="edge"><title>1,3->1,2</title>
+<path fill="none" stroke="#218559" d="M530.443,-363.446C521.158,-363.745 511.225,-363.824 501.602,-363.681"/>
+<polygon fill="#218559" stroke="#218559" points="501.407,-360.175 491.327,-363.438 501.242,-367.173 501.407,-360.175"/>
+</g>
+<!-- 2,1 -->
+<g id="node19" class="node"><title>2,1</title>
+<ellipse fill="none" stroke="black" cx="59" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="39.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,1--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="37,-253 37,-267 82,-267 82,-253 37,-253"/>
+<text text-anchor="start" x="39.5" y="-257.667" font-family="Times Roman,serif" font-size="10.00">GGAATA</text>
+<polygon fill="#218559" stroke="#218559" points="37,-239 37,-253 82,-253 82,-239 37,-239"/>
+<text text-anchor="start" x="42.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">TATTCC</text>
+</g>
+<!-- 2,3 -->
+<g id="node20" class="node"><title>2,3</title>
+<ellipse fill="none" stroke="black" cx="201" cy="-261" rx="43.1335" ry="36.0624"/>
+<text text-anchor="start" x="181.5" y="-272.167" font-family="Times Roman,serif" font-size="10.00">2,3--null</text>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="179,-253 179,-267 224,-267 224,-253 179,-253"/>
+<text text-anchor="start" x="186" y="-257.667" font-family="Times Roman,serif" font-size="10.00">AATAC</text>
+<polygon fill="#218559" stroke="#218559" points="179,-239 179,-253 224,-253 224,-239 179,-239"/>
+<text text-anchor="start" x="187.5" y="-243.667" font-family="Times Roman,serif" font-size="10.00">GTATT</text>
+</g>
+<!-- 2,1->2,3 -->
+<g id="edge13" class="edge"><title>2,1->2,3</title>
+<path fill="none" stroke="#dd1e2f" d="M101.605,-254.755C116.207,-254.208 132.729,-254.105 148.049,-254.448"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="148.326,-257.957 158.425,-254.756 148.534,-250.96 148.326,-257.957"/>
+</g>
+<!-- 2,3->2,1 -->
+<g id="edge17" class="edge"><title>2,3->2,1</title>
+<path fill="none" stroke="#218559" d="M158.425,-267.244C143.825,-267.792 127.305,-267.895 111.982,-267.553"/>
+<polygon fill="#218559" stroke="#218559" points="111.704,-264.043 101.605,-267.245 111.497,-271.04 111.704,-264.043"/>
+</g>
+<!-- 2,3->2,4 -->
+<g id="edge15" class="edge"><title>2,3->2,4</title>
+<path fill="none" stroke="#dd1e2f" d="M243.327,-254.562C252.601,-254.258 262.531,-254.176 272.159,-254.316"/>
+<polygon fill="#dd1e2f" stroke="#dd1e2f" points="272.364,-257.822 282.443,-254.554 272.527,-250.823 272.364,-257.822"/>
+</g>
+<!-- 2,4->1,2 -->
+<g id="edge19" class="edge"><title>2,4->1,2</title>
+<path fill="none" stroke="#ebb035" d="M356.611,-285.473C372.521,-297.79 391.976,-312.853 408.924,-325.973"/>
+<polygon fill="#ebb035" stroke="#ebb035" points="406.965,-328.883 417.015,-332.238 411.251,-323.348 406.965,-328.883"/>
+</g>
+<!-- 2,4->2,3 -->
+<g id="edge21" class="edge"><title>2,4->2,3</title>
+<path fill="none" stroke="#218559" d="M282.443,-267.446C273.158,-267.745 263.225,-267.824 253.602,-267.681"/>
+<polygon fill="#218559" stroke="#218559" points="253.407,-264.175 243.327,-267.438 253.242,-271.173 253.407,-264.175"/>
+</g>
+</g>
+</svg>
diff --git a/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/.part-0.crc b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/.part-0.crc
new file mode 100644
index 0000000..35486b9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/.part-1.crc b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/.part-1.crc
new file mode 100644
index 0000000..53a0483
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/part-0 b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/part-0
new file mode 100755
index 0000000..6077d6e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/part-1 b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/part-1
new file mode 100755
index 0000000..5e8d3f9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/graphs/tipremove/fr_with_tip/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/input/reads/bubblemerge/five_ff_bubbles.txt b/genomix/genomix-pregelix/data/input/reads/bubblemerge/five_ff_bubbles.txt
new file mode 100644
index 0000000..63a8e55
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/bubblemerge/five_ff_bubbles.txt
@@ -0,0 +1,4 @@
+1 ACGTCCTT
+2 CGTCCTTA
+3 GTCCTTAG
+4 GTCCTTAG
diff --git a/genomix/genomix-pregelix/data/input/reads/bubblemerge/five_length1_bubbles.txt b/genomix/genomix-pregelix/data/input/reads/bubblemerge/five_length1_bubbles.txt
new file mode 100644
index 0000000..13190dd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/bubblemerge/five_length1_bubbles.txt
@@ -0,0 +1,6 @@
+1 AATAGAAG
+2 AATAGAAG
+3 AATAGAAG
+4 AATAGAAG
+5 AATAGAAG
+6 AGAAGAAG
diff --git a/genomix/genomix-pregelix/data/input/reads/bubblemerge/fr_bubble.txt b/genomix/genomix-pregelix/data/input/reads/bubblemerge/fr_bubble.txt
new file mode 100644
index 0000000..4026c2c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/bubblemerge/fr_bubble.txt
@@ -0,0 +1,2 @@
+1 AAACGTAT
+2 GGAATACG
diff --git a/genomix/genomix-pregelix/data/input/reads/bubblemerge/fr_bubble_and_ff_bubble.txt b/genomix/genomix-pregelix/data/input/reads/bubblemerge/fr_bubble_and_ff_bubble.txt
new file mode 100644
index 0000000..e166418
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/bubblemerge/fr_bubble_and_ff_bubble.txt
@@ -0,0 +1,3 @@
+1 AAACGTAT
+2 CGTATTCC
+3 GGAATACG
diff --git a/genomix/genomix-pregelix/data/input/reads/bubblemerge/rf_bubble.txt b/genomix/genomix-pregelix/data/input/reads/bubblemerge/rf_bubble.txt
new file mode 100644
index 0000000..154dc8c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/bubblemerge/rf_bubble.txt
@@ -0,0 +1,3 @@
+1 ACGGTGTA
+2 ACCGTGGT
+
diff --git a/genomix/genomix-pregelix/data/input/reads/bubblemerge/small_bubble.txt b/genomix/genomix-pregelix/data/input/reads/bubblemerge/small_bubble.txt
new file mode 100644
index 0000000..3e3bf7b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/bubblemerge/small_bubble.txt
@@ -0,0 +1,2 @@
+1 AATAGAAG
+2 AGAAGCCC
diff --git a/genomix/genomix-pregelix/data/input/reads/bubblemerge/tip_and_bubble.txt b/genomix/genomix-pregelix/data/input/reads/bubblemerge/tip_and_bubble.txt
new file mode 100644
index 0000000..958ccff
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/bubblemerge/tip_and_bubble.txt
@@ -0,0 +1,3 @@
+1 AATAGAAG
+2 ATAGACTA
+3 TAGACTAC
diff --git a/genomix/genomix-pregelix/data/input/reads/pathmerge/singleread.txt b/genomix/genomix-pregelix/data/input/reads/pathmerge/singleread.txt
new file mode 100644
index 0000000..63a95ad
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/pathmerge/singleread.txt
@@ -0,0 +1 @@
+1 AATAGAAG
diff --git a/genomix/genomix-pregelix/data/input/reads/synthetic/walk_random_seq1.txt b/genomix/genomix-pregelix/data/input/reads/synthetic/walk_random_seq1.txt
new file mode 100644
index 0000000..35f1c49
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/synthetic/walk_random_seq1.txt
@@ -0,0 +1,37 @@
+1 TAGTGCGA
+2 CCTCGCAC
+3 GCTAGGGT
+4 GAGGGTTG
+5 AGCAACCC
+6 GTTGCTGA
+7 TTTCAGCA
+8 CTGAAATC
+9 CAGATTTC
+10 GGCAGATT
+11 CTGGCAGA
+12 CTCTGGCA
+13 ATCTCTGG
+14 GCATCTCT
+15 CGGCATCT
+16 AACGGCAT
+17 GAAACGGC
+18 CGTTTCAA
+19 TATTGAAA
+20 TCAATACG
+21 AATACGTG
+22 TACGTGAA
+23 GTTTCACG
+24 TGAAACTA
+25 AAACTATT
+26 GTAATAGT
+27 TATTACGT
+28 TTACGTCA
+29 CATGACGT
+30 GTCATGAC
+31 GCGTCATG
+32 AAGCGTCA
+33 TCGCTTAA
+34 GCTTAAGC
+35 TCGCTTAA
+36 AAGCGTGT
+37 CCACACGC
diff --git a/genomix/genomix-pregelix/data/input/reads/synthetic/walk_random_seq2.txt b/genomix/genomix-pregelix/data/input/reads/synthetic/walk_random_seq2.txt
new file mode 100644
index 0000000..d65f7c0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/synthetic/walk_random_seq2.txt
@@ -0,0 +1,6 @@
+1 AATGCGCT
+2 CTAGCGCA
+3 CGCTAGGA
+4 CTAGGAGT
+5 AGGAGTTG
+6 AGCGCATT
diff --git a/genomix/genomix-pregelix/data/input/reads/tipremove/fr_with_tip.txt b/genomix/genomix-pregelix/data/input/reads/tipremove/fr_with_tip.txt
new file mode 100644
index 0000000..b6e1640
--- /dev/null
+++ b/genomix/genomix-pregelix/data/input/reads/tipremove/fr_with_tip.txt
@@ -0,0 +1,2 @@
+1 AACGTATA
+2 GGAATACG
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-0.crc
new file mode 100644
index 0000000..4aec5a5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-1.crc
new file mode 100644
index 0000000..dcc964b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-2.crc
new file mode 100644
index 0000000..9f78be0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-3.crc
new file mode 100644
index 0000000..6954a42
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-4.crc
new file mode 100644
index 0000000..50f81b3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-5.crc
new file mode 100644
index 0000000..120633c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-6.crc
new file mode 100644
index 0000000..d917bae
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-7.crc
new file mode 100644
index 0000000..dc5ee75
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-0
new file mode 100755
index 0000000..093c9aa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-1
new file mode 100755
index 0000000..5e1677c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-2
new file mode 100755
index 0000000..b458583
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-3
new file mode 100755
index 0000000..13077e1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-4
new file mode 100755
index 0000000..6f722db
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-5
new file mode 100755
index 0000000..9a768b2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-6
new file mode 100755
index 0000000..43bd272
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-7
new file mode 100755
index 0000000..1888f05
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/graphviz/result.ps
new file mode 100644
index 0000000..b879c2a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 100 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 64 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 104 moveto
+56 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9 9.4 moveto 38 (AATA) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 100 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/txt
new file mode 100755
index 0000000..f1c88a0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/2/txt
@@ -0,0 +1 @@
+AAT {[] [] [] [] {5':[(1-0_0)], ~5':[]}AATA 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-0.crc
new file mode 100644
index 0000000..2fa0504
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-1.crc
new file mode 100644
index 0000000..1d44f7d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-2.crc
new file mode 100644
index 0000000..aa3a41f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-3.crc
new file mode 100644
index 0000000..5b52f34
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-4.crc
new file mode 100644
index 0000000..06cdc16
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-5.crc
new file mode 100644
index 0000000..28b0087
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-6.crc
new file mode 100644
index 0000000..22561c7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-7.crc
new file mode 100644
index 0000000..a8cd817
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-0
new file mode 100755
index 0000000..c7cf51e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-1
new file mode 100755
index 0000000..9a4cdac
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-2
new file mode 100755
index 0000000..322013d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-3
new file mode 100755
index 0000000..6aec6dc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-4
new file mode 100755
index 0000000..c419823
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-5
new file mode 100755
index 0000000..2c5183a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-6
new file mode 100755
index 0000000..ce49dcb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-7
new file mode 100755
index 0000000..3d01dbd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/graphviz/result.ps
new file mode 100644
index 0000000..7c7224b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 110 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 74 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+65.5 130 lineto
+65.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+65.5 130 lineto
+65.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+18.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 104 moveto
+65.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 78 moveto
+65.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 52 moveto
+65.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+21.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 26 moveto
+65.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 9.4 moveto 49 (AATAG) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 110 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/txt
new file mode 100755
index 0000000..f599ba7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/3/txt
@@ -0,0 +1 @@
+AAT {[] [] [] [] {5':[(1-0_0)], ~5':[]}AATAG 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-0.crc
new file mode 100644
index 0000000..381353f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-1.crc
new file mode 100644
index 0000000..2932e18
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-2.crc
new file mode 100644
index 0000000..fe542d2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-3.crc
new file mode 100644
index 0000000..56da0b8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-4.crc
new file mode 100644
index 0000000..2e38723
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-5.crc
new file mode 100644
index 0000000..4f54198
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-6.crc
new file mode 100644
index 0000000..6b4f4f0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-7.crc
new file mode 100644
index 0000000..6b890c8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-0
new file mode 100755
index 0000000..4fb8294
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-1
new file mode 100755
index 0000000..5e0f1cc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-2
new file mode 100755
index 0000000..c683640
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-3
new file mode 100755
index 0000000..edd523e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-4
new file mode 100755
index 0000000..a49e1f3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-5
new file mode 100755
index 0000000..8c347f5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-6
new file mode 100755
index 0000000..24b04cc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-7
new file mode 100755
index 0000000..6c5d040
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/graphviz/result.ps
new file mode 100644
index 0000000..b2f7bde
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 120 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 84 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+75.5 130 lineto
+75.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+75.5 130 lineto
+75.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+23.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 104 moveto
+75.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+19.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 78 moveto
+75.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+18 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 52 moveto
+75.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+26.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 26 moveto
+75.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 9.4 moveto 59 (AATAGA) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 120 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/txt
new file mode 100755
index 0000000..0a87b60
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/4/txt
@@ -0,0 +1 @@
+AAT {[] [] [] [] {5':[(1-0_0)], ~5':[]}AATAGA 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-0.crc
new file mode 100644
index 0000000..ee4174d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-1.crc
new file mode 100644
index 0000000..e1e631e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-2.crc
new file mode 100644
index 0000000..8d74a03
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-3.crc
new file mode 100644
index 0000000..22b4818
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-4.crc
new file mode 100644
index 0000000..002cab8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-5.crc
new file mode 100644
index 0000000..76815b2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-6.crc
new file mode 100644
index 0000000..5f6d7a1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-7.crc
new file mode 100644
index 0000000..3620a56
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-0
new file mode 100755
index 0000000..6f1de55
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-1
new file mode 100755
index 0000000..7afbfa7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-2
new file mode 100755
index 0000000..396aca3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-3
new file mode 100755
index 0000000..d2698e2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-4
new file mode 100755
index 0000000..17f8c17
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-5
new file mode 100755
index 0000000..17e2f3e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-6
new file mode 100755
index 0000000..eaf5e11
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-7
new file mode 100755
index 0000000..0c04d0d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/graphviz/result.ps
new file mode 100644
index 0000000..327c998
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 130 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 94 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+86 130 lineto
+86 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+86 130 lineto
+86 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+28.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 104 moveto
+86 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+24.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+86 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+23 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+86 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+31.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+86 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 9.4 moveto 70 (AATAGAA) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 130 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/txt
new file mode 100755
index 0000000..6fda51a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/5/txt
@@ -0,0 +1 @@
+AAT {[] [] [] [] {5':[(1-0_0)], ~5':[]}AATAGAA 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-0.crc
new file mode 100644
index 0000000..c0c1fb3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-1.crc
new file mode 100644
index 0000000..ea38207
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-2.crc
new file mode 100644
index 0000000..82a9846
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-3.crc
new file mode 100644
index 0000000..61f870a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-4.crc
new file mode 100644
index 0000000..321b381
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-5.crc
new file mode 100644
index 0000000..d41ea97
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-6.crc
new file mode 100644
index 0000000..44f19de
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-7.crc
new file mode 100644
index 0000000..3e0b704
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-0
new file mode 100755
index 0000000..6fc2cc2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-1
new file mode 100755
index 0000000..20eb511
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-2
new file mode 100755
index 0000000..bc02dc7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-3
new file mode 100755
index 0000000..d3f8644
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-4
new file mode 100755
index 0000000..ab8e601
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-5
new file mode 100755
index 0000000..d7cc2b9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-6
new file mode 100755
index 0000000..1e8fcdd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-7
new file mode 100755
index 0000000..6cd8e6b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/graphviz/result.ps
new file mode 100644
index 0000000..2751ff2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 140 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 104 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+95.5 130 lineto
+95.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+95.5 130 lineto
+95.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+33.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 104 moveto
+95.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+29.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 78 moveto
+95.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+28 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 52 moveto
+95.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+36.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 26 moveto
+95.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 9.4 moveto 79 (AATAGAAC) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 140 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/txt
new file mode 100755
index 0000000..646542c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/6/txt
@@ -0,0 +1 @@
+AAT {[] [] [] [] {5':[(1-0_0)], ~5':[]}AATAGAAC 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-0.crc
new file mode 100644
index 0000000..d612d09
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-1.crc
new file mode 100644
index 0000000..7b2e99e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-2.crc
new file mode 100644
index 0000000..4780850
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-3.crc
new file mode 100644
index 0000000..57ba3f3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-4.crc
new file mode 100644
index 0000000..fc9b927
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-5.crc
new file mode 100644
index 0000000..0130a6a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-6.crc
new file mode 100644
index 0000000..1c36199
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-7.crc
new file mode 100644
index 0000000..9691904
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-0
new file mode 100755
index 0000000..98c891c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-1
new file mode 100755
index 0000000..5807b93
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-2
new file mode 100755
index 0000000..6fe769c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-3
new file mode 100755
index 0000000..f4974d5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-4
new file mode 100755
index 0000000..78f2adb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-5
new file mode 100755
index 0000000..cca5ab4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-6
new file mode 100755
index 0000000..b6667e8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-7
new file mode 100755
index 0000000..a1c57d0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/graphviz/result.ps
new file mode 100644
index 0000000..e0879d4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 148 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 112 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+104 130 lineto
+104 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+104 130 lineto
+104 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+37.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 104 moveto
+104 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+33.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+104 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+32 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+104 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+40.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+104 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 9.4 moveto 88 (AATAGAACT) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 148 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/txt
new file mode 100755
index 0000000..4beb393
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/7/txt
@@ -0,0 +1 @@
+AAT {[] [] [] [] {5':[(1-0_0)], ~5':[]}AATAGAACT 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-0.crc
new file mode 100644
index 0000000..27087a8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-1.crc
new file mode 100644
index 0000000..24b91b9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-2.crc
new file mode 100644
index 0000000..a28732c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-3.crc
new file mode 100644
index 0000000..775ec65
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-4.crc
new file mode 100644
index 0000000..902eb48
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-5.crc
new file mode 100644
index 0000000..c8dd9c9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-6.crc
new file mode 100644
index 0000000..eb16191
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-7.crc
new file mode 100644
index 0000000..035bb4a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-0
new file mode 100755
index 0000000..e37bd11
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-1
new file mode 100755
index 0000000..44a1b44
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-2
new file mode 100755
index 0000000..50efc02
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-3
new file mode 100755
index 0000000..529fd33
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-4
new file mode 100755
index 0000000..22dd043
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-5
new file mode 100755
index 0000000..d3d849a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-6
new file mode 100755
index 0000000..3aaf6b3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-7
new file mode 100755
index 0000000..feb3c0e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/graphviz/result.ps
new file mode 100644
index 0000000..9d92eee
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 158 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 122 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+113.5 130 lineto
+113.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+113.5 130 lineto
+113.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+42.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 104 moveto
+113.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+38.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 78 moveto
+113.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+37 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 52 moveto
+113.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+45.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 26 moveto
+113.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 9.4 moveto 97 (AATAGAACTT) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 158 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/txt
new file mode 100755
index 0000000..5c51705
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/8/txt
@@ -0,0 +1 @@
+AAT {[] [] [] [] {5':[(1-0_0)], ~5':[]}AATAGAACTT 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-0.crc
new file mode 100644
index 0000000..ed4f3b7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-1.crc
new file mode 100644
index 0000000..0a0dbb7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-2.crc
new file mode 100644
index 0000000..77fbb7b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-3.crc
new file mode 100644
index 0000000..eacc3c1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-4.crc
new file mode 100644
index 0000000..146446d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-5.crc
new file mode 100644
index 0000000..5818399
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-6.crc
new file mode 100644
index 0000000..220f264
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-7.crc
new file mode 100644
index 0000000..fa29d5a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-0
new file mode 100755
index 0000000..8ca483f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-1
new file mode 100755
index 0000000..b9498b4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-2
new file mode 100755
index 0000000..b0fba24
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-3
new file mode 100755
index 0000000..d80dbee
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-4
new file mode 100755
index 0000000..d31595c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-5
new file mode 100755
index 0000000..3d17b4f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-6
new file mode 100755
index 0000000..475da0e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-7
new file mode 100755
index 0000000..aec6f1e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/graphviz/result.ps
new file mode 100644
index 0000000..1858e16
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 166 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 130 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+122 130 lineto
+122 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+122 130 lineto
+122 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+46.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 104 moveto
+122 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+42.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+122 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+41 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+122 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+49.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+122 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 9.4 moveto 106 (AATAGAACTTA) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 166 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/txt
new file mode 100755
index 0000000..1f95ad3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/9/txt
@@ -0,0 +1 @@
+AAT {[] [] [] [] {5':[(1-0_0)], ~5':[]}AATAGAACTTA 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-0.crc
new file mode 100644
index 0000000..dbf5c97
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-1.crc
new file mode 100644
index 0000000..eb0757c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-2.crc
new file mode 100644
index 0000000..68b5b50
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-3.crc
new file mode 100644
index 0000000..5060e60
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-4.crc
new file mode 100644
index 0000000..a068daa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-5.crc
new file mode 100644
index 0000000..d55ba1e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-6.crc
new file mode 100644
index 0000000..93ad41b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-7.crc
new file mode 100644
index 0000000..a46c7f0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-0
new file mode 100755
index 0000000..7ac99ef
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-1
new file mode 100755
index 0000000..fbedc1d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-2
new file mode 100755
index 0000000..3059cac
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-3
new file mode 100755
index 0000000..20fed8b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-4
new file mode 100755
index 0000000..a5a9dd4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-5
new file mode 100755
index 0000000..9026752
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-6
new file mode 100755
index 0000000..9b18a7a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-7
new file mode 100755
index 0000000..4b1949a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/graphviz/result.ps
new file mode 100644
index 0000000..9f94081
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/graphviz/result.ps
@@ -0,0 +1,699 @@
+%!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 702 272
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 666 236 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 8 moveto
+0 138 lineto
+56 138 lineto
+56 8 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 121.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 112 moveto
+56 112 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 95.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 86 moveto
+56 86 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 69.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 60 moveto
+56 60 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 43.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 34 moveto
+56 34 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 17.4 moveto 32 (GAA) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 82 moveto
+140 212 lineto
+196 212 lineto
+196 82 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 195.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 186 moveto
+196 186 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 169.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 160 moveto
+196 160 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 143.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 134 moveto
+196 134 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 117.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 108 moveto
+196 108 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 91.4 moveto 31 (AAC) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.1 101.09 moveto
+61.73 105.82 67.83 110.36 74 114 curveto
+91.19 124.13 111.97 131.84 129.62 137.24 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.02 140.71 moveto
+139.6 140.16 lineto
+130.98 133.99 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.02 140.71 moveto
+139.6 140.16 lineto
+130.98 133.99 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 139.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 602 10 moveto
+602 140 lineto
+658 140 lineto
+658 10 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+614.5 123.4 moveto 31 (CGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 602 114 moveto
+658 114 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+616 97.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 602 88 moveto
+658 88 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+610 71.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 602 62 moveto
+658 62 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+618.5 45.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 602 36 moveto
+658 36 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+614.5 19.4 moveto 31 (CGA) alignedtext
+grestore
+% GAA->CGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56 66.94 moveto
+84.16 61.38 128.88 54 168 54 curveto
+168 54 168 54 473 54 curveto
+513.77 54 559.97 61.04 591.63 66.97 curveto
+stroke
+0 1 1 edgecolor
+newpath 591.31 70.47 moveto
+601.79 68.93 lineto
+592.63 63.6 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 591.31 70.47 moveto
+601.79 68.93 lineto
+592.63 63.6 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+287 59.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.95 106.64 moveto
+134.55 101.04 128.53 95.88 122 92 curveto
+105.26 82.03 84.18 77.21 66.22 74.91 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.39 71.41 moveto
+56.07 73.82 lineto
+65.64 78.37 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.39 71.41 moveto
+56.07 73.82 lineto
+65.64 78.37 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 97.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278.5 98 moveto
+278.5 228 lineto
+343.5 228 lineto
+343.5 98 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+295.5 211.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278.5 202 moveto
+343.5 202 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+297 185.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278.5 176 moveto
+343.5 176 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+291 159.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278.5 150 moveto
+343.5 150 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+299.5 133.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 278.5 124 moveto
+343.5 124 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286.5 107.4 moveto 49 (TTAGA) alignedtext
+grestore
+% AAC->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 196.1 153.82 moveto
+201.98 155.05 208.17 156.19 214 157 curveto
+231.58 159.44 251.08 160.89 267.97 161.75 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 267.95 165.25 moveto
+278.1 162.21 lineto
+268.27 158.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 267.95 165.25 moveto
+278.1 162.21 lineto
+268.27 158.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 166.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% CGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 601.84 52.09 moveto
+571.81 30.03 521.94 0 473 0 curveto
+168 0 168 0 168 0 curveto
+129.54 0 91.18 21.93 64.37 41.75 curveto
+stroke
+0 0 0 edgecolor
+newpath 61.9 39.23 moveto
+56.08 48.08 lineto
+66.15 44.79 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 61.9 39.23 moveto
+56.08 48.08 lineto
+66.15 44.79 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+288.5 5.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CGA->CGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 616.82 140.07 moveto
+618.7 150.7 623.1 158 630 158 curveto
+634.53 158 637.98 154.86 640.35 149.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 643.71 150.65 moveto
+643.18 140.07 lineto
+637 148.67 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 643.71 150.65 moveto
+643.18 140.07 lineto
+637 148.67 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+607 163.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 440 82 moveto
+440 212 lineto
+506 212 lineto
+506 82 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 440 82 moveto
+440 212 lineto
+506 212 lineto
+506 82 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+458.5 195.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 440 186 moveto
+506 186 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+448 169.4 moveto 50 (5':[2,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 440 160 moveto
+506 160 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+453 143.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 440 134 moveto
+506 134 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+461.5 117.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 440 108 moveto
+506 108 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+448.5 91.4 moveto 49 (AAATC) alignedtext
+grestore
+% CGA->AAT
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 601.68 78.5 moveto
+579.54 82.08 548.51 89.04 524 102 curveto
+520.73 103.73 517.49 105.71 514.33 107.85 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 512.16 105.11 moveto
+506.18 113.85 lineto
+516.31 110.75 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 512.16 105.11 moveto
+506.18 113.85 lineto
+516.31 110.75 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+524 107.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% AAT->CGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 506.26 143.62 moveto
+529.24 140.18 559.89 133.37 584 120 curveto
+587.47 118.07 590.87 115.81 594.14 113.35 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 596.5 115.94 moveto
+602 106.89 lineto
+592.05 110.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 596.5 115.94 moveto
+602 106.89 lineto
+592.05 110.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+531 145.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT->AGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 439.96 135.06 moveto
+417.62 128.72 387.63 123.62 362 131 curveto
+358.89 131.9 355.78 133.04 352.72 134.37 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 351.16 131.24 moveto
+343.74 138.81 lineto
+354.26 137.51 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 351.16 131.24 moveto
+343.74 138.81 lineto
+354.26 137.51 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+369 136.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% AGA->AAC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 278.28 145.06 moveto
+272.36 142.55 266.11 140.37 260 139 curveto
+242.51 135.09 222.75 136.12 206.04 138.52 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 205.37 135.08 moveto
+196.07 140.16 lineto
+206.51 141.99 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 205.37 135.08 moveto
+196.07 140.16 lineto
+206.51 141.99 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 144.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AGA->AAT
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 343.56 160.3 moveto
+365.7 158.41 395.63 155.74 422 153 curveto
+424.52 152.74 427.11 152.46 429.73 152.17 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 430.27 155.63 moveto
+439.82 151.04 lineto
+429.49 148.68 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 430.27 155.63 moveto
+439.82 151.04 lineto
+429.49 148.68 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+362 163.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 702 272
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/txt
new file mode 100755
index 0000000..371a9f3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/BridgePathWithTandemRepeat/txt
@@ -0,0 +1,5 @@
+GAA {[{AAC:[1]}] [] [] [{CGA:[1]}] {5':[], ~5':[]}GAA 1.0x}
+CGA {[{GAA:[1]}] [{AAT:[1,2]}] [{CGA:[1]}] [] {5':[], ~5':[]}CGA 2.0x}
+AGA {[] [{AAT:[1,2]}] [{AAC:[2]}] [] {5':[], ~5':[]}TTAGA 1.0x}
+AAC {[] [] [{AGA:[2]}] [{GAA:[1]}] {5':[], ~5':[]}AAC 2.0x}
+AAT {[] [{CGA:[1]}, {AGA:[2]}] [] [] {5':[(2-0_0),(1-0_0)], ~5':[]}AAATC 2.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-0.crc
new file mode 100644
index 0000000..56d5cf0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-1.crc
new file mode 100644
index 0000000..3c640fd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-2.crc
new file mode 100644
index 0000000..f32c0bf
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-3.crc
new file mode 100644
index 0000000..57a18d2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-4.crc
new file mode 100644
index 0000000..b55c7bd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-5.crc
new file mode 100644
index 0000000..32548d3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-6.crc
new file mode 100644
index 0000000..83e5239
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-7.crc
new file mode 100644
index 0000000..a70bc81
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-0
new file mode 100755
index 0000000..7faa148
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-1
new file mode 100755
index 0000000..625bb2d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-2
new file mode 100755
index 0000000..9653a36
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-3
new file mode 100755
index 0000000..b8aa42e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-4
new file mode 100755
index 0000000..e1c1b90
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-5
new file mode 100755
index 0000000..1262a97
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-6
new file mode 100755
index 0000000..60efd63
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-7
new file mode 100755
index 0000000..22c7f09
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/graphviz/result.ps
new file mode 100644
index 0000000..b07d252
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/graphviz/result.ps
@@ -0,0 +1,660 @@
+%!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 672 210
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 636 174 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% TCA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 113.4 moveto 28 (TCA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 104 moveto
+56 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 9.4 moveto 28 (TCA) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 140 0 moveto
+140 130 lineto
+206 130 lineto
+206 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 130 lineto
+206 130 lineto
+206 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 104 moveto
+206 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 87.4 moveto 50 (5':[1,2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 78 moveto
+206 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 52 moveto
+206 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+161.5 35.4 moveto 23 (1.5) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 26 moveto
+206 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 9.4 moveto 38 (AATC) alignedtext
+grestore
+% TCA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.3 65 moveto
+77.19 65 106 65 129.77 65 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.95 68.5 moveto
+139.95 65 lineto
+129.95 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.95 68.5 moveto
+139.95 65 lineto
+129.95 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 70.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT->TCA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.89 48.44 moveto
+134.06 46.18 127.95 44.23 122 43 curveto
+101.11 38.69 94.8 38.28 74 43 curveto
+71.34 43.6 68.65 44.38 65.99 45.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 42.09 moveto
+56.49 48.99 lineto
+67.08 48.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 42.09 moveto
+56.49 48.99 lineto
+67.08 48.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 48.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 288 0 moveto
+288 130 lineto
+344 130 lineto
+344 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+300.5 113.4 moveto 31 (CGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 288 104 moveto
+344 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+302 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 288 78 moveto
+344 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 288 52 moveto
+344 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304.5 35.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 288 26 moveto
+344 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+300.5 9.4 moveto 31 (CGA) alignedtext
+grestore
+% AAT->CGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 206.17 65 moveto
+227.53 65 255.39 65 277.7 65 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 277.83 68.5 moveto
+287.83 65 lineto
+277.83 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 277.83 68.5 moveto
+287.83 65 lineto
+277.83 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+224 70.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428.5 0 moveto
+428.5 130 lineto
+487.5 130 lineto
+487.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+442 113.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428.5 104 moveto
+487.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+444 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428.5 78 moveto
+487.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+438 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428.5 52 moveto
+487.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+446.5 35.4 moveto 23 (1.5) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 428.5 26 moveto
+487.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+436.5 9.4 moveto 43 (GAAA) alignedtext
+grestore
+% GGA
+gsave
+0 0 0.75294 nodecolor
+newpath 572 0 moveto
+572 130 lineto
+628 130 lineto
+628 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572 0 moveto
+572 130 lineto
+628 130 lineto
+628 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+583.5 113.4 moveto 33 (GGA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572 104 moveto
+628 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+581.5 87.4 moveto 37 (5':[3]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572 78 moveto
+628 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+580 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572 52 moveto
+628 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+588.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572 26 moveto
+628 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+583.5 9.4 moveto 33 (GGA) alignedtext
+grestore
+% GAA->GGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 487.77 65 moveto
+509.21 65 538.32 65 561.53 65 curveto
+stroke
+0 1 1 edgecolor
+newpath 561.72 68.5 moveto
+571.72 65 lineto
+561.72 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 561.72 68.5 moveto
+571.72 65 lineto
+561.72 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+506 70.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% GAA->CGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 428.31 51.25 moveto
+422.36 49.07 416.07 47.16 410 46 curveto
+389.04 42 382.93 41.85 362 46 curveto
+359.31 46.53 356.58 47.23 353.87 48.03 curveto
+stroke
+0 1 1 edgecolor
+newpath 352.5 44.8 moveto
+344.17 51.35 lineto
+354.76 51.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 352.5 44.8 moveto
+344.17 51.35 lineto
+354.76 51.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+362 51.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 571.51 48.99 moveto
+565.87 46.51 559.87 44.33 554 43 curveto
+533.2 38.28 526.84 38.45 506 43 curveto
+503.01 43.65 499.98 44.51 496.97 45.51 curveto
+stroke
+0 0 0 edgecolor
+newpath 495.63 42.27 moveto
+487.53 49.09 lineto
+498.12 48.82 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 495.63 42.27 moveto
+487.53 49.09 lineto
+498.12 48.82 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+507.5 48.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% CGA->AAT
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 287.83 51.35 moveto
+282.06 49.13 275.93 47.18 270 46 curveto
+249.95 42.02 244.12 42.37 224 46 curveto
+221.35 46.48 218.65 47.09 215.95 47.79 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 214.84 44.47 moveto
+206.27 50.69 lineto
+216.85 51.17 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 214.84 44.47 moveto
+206.27 50.69 lineto
+216.85 51.17 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+224 51.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 344.05 65 moveto
+365.18 65 394.42 65 417.99 65 curveto
+stroke
+0 0 0 edgecolor
+newpath 418.04 68.5 moveto
+428.04 65 lineto
+418.04 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 418.04 68.5 moveto
+428.04 65 lineto
+418.04 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+363.5 70.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% CGA->CGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 304.2 130.07 moveto
+305.89 140.7 309.82 148 316 148 curveto
+319.96 148 322.99 145 325.11 140.06 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 328.57 140.64 moveto
+327.8 130.07 lineto
+321.82 138.82 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 328.57 140.64 moveto
+327.8 130.07 lineto
+321.82 138.82 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+293 153.4 moveto 46 (RF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 672 210
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/txt
new file mode 100755
index 0000000..6b3a9ba
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTandemRepeat/txt
@@ -0,0 +1,5 @@
+TCA {[] [] [] [{AAT:[1]}] {5':[], ~5':[]}TCA 1.0x}
+GAA {[] [] [] [{GGA:[3]}, {CGA:[1]}] {5':[], ~5':[]}GAAA 1.5x}
+GGA {[{GAA:[3]}] [] [] [] {5':[(3-0_0)], ~5':[]}GGA 1.0x}
+CGA {[{GAA:[1]}] [{AAT:[1]}] [{CGA:[1]}] [] {5':[], ~5':[]}CGA 2.0x}
+AAT {[{TCA:[2]}] [{CGA:[1]}] [] [] {5':[(1-0_0),(2-1_0)], ~5':[]}AATC 1.5x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-0.crc
new file mode 100644
index 0000000..870dcf4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-1.crc
new file mode 100644
index 0000000..509025e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-2.crc
new file mode 100644
index 0000000..acf3cbb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-3.crc
new file mode 100644
index 0000000..798e9cd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-4.crc
new file mode 100644
index 0000000..4faba43
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-5.crc
new file mode 100644
index 0000000..749f9ee
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-6.crc
new file mode 100644
index 0000000..0bcf341
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-7.crc
new file mode 100644
index 0000000..afbba2d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-0
new file mode 100755
index 0000000..e58bb49
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-1
new file mode 100755
index 0000000..329ed8e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-2
new file mode 100755
index 0000000..26b9bb2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-3
new file mode 100755
index 0000000..fc861c7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-4
new file mode 100755
index 0000000..3d02ab4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-5
new file mode 100755
index 0000000..831d6f4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-6
new file mode 100755
index 0000000..b4d913b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-7
new file mode 100755
index 0000000..6432972
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/graphviz/result.ps
new file mode 100644
index 0000000..3f7c33a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/graphviz/result.ps
@@ -0,0 +1,1423 @@
+%!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 1064 632
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 1028 596 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 139 moveto
+0 269 lineto
+56 269 lineto
+56 139 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 252.4 moveto 31 (GAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 243 moveto
+56 243 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 226.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 217 moveto
+56 217 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 200.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 191 moveto
+56 191 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 174.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 165 moveto
+56 165 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 148.4 moveto 40 (TGAC) alignedtext
+grestore
+% CAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 139 moveto
+138 269 lineto
+194 269 lineto
+194 139 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+151 252.4 moveto 30 (CAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 243 moveto
+194 243 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152 226.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 217 moveto
+194 217 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+146 200.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 191 moveto
+194 191 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154.5 174.4 moveto 23 (3.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 138 165 moveto
+194 165 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+151 148.4 moveto 30 (CAC) alignedtext
+grestore
+% GAC->CAC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.26 204 moveto
+76.82 204 104.89 204 127.5 204 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 127.78 207.5 moveto
+137.78 204 lineto
+127.78 200.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 127.78 207.5 moveto
+137.78 204 lineto
+127.78 200.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 209.4 moveto 46 (RF: [3]) alignedtext
+grestore
+% CAC->GAC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 137.51 187.99 moveto
+131.87 185.51 125.87 183.33 120 182 curveto
+100.06 177.48 93.94 177.48 74 182 curveto
+71.34 182.6 68.65 183.38 65.99 184.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 64.53 181.09 moveto
+56.49 187.99 lineto
+67.08 187.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 64.53 181.09 moveto
+56.49 187.99 lineto
+67.08 187.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 187.4 moveto 46 (RF: [3]) alignedtext
+grestore
+% AGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 811 26 moveto
+811 156 lineto
+879 156 lineto
+879 26 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+829.5 139.4 moveto 31 (AGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 811 130 moveto
+879 130 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+831 113.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 811 104 moveto
+879 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+825 87.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 811 78 moveto
+879 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+833.5 61.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 811 52 moveto
+879 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+819 35.4 moveto 52 (AAGCA) alignedtext
+grestore
+% CAC->AGC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 194.25 147.72 moveto
+220.05 105.16 262.57 54 318 54 curveto
+318 54 318 54 676 54 curveto
+719.33 54 767.49 65.75 801.28 76.01 curveto
+stroke
+0 1 1 edgecolor
+newpath 800.26 79.35 moveto
+810.85 78.99 lineto
+802.34 72.67 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 800.26 79.35 moveto
+810.85 78.99 lineto
+802.34 72.67 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+468.5 59.4 moveto 61 (RR: [2,3]) alignedtext
+grestore
+% ACT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 318 moveto
+290 448 lineto
+346 448 lineto
+346 318 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+303.5 431.4 moveto 29 (ACT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 422 moveto
+346 422 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304 405.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 396 moveto
+346 396 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 379.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 370 moveto
+346 370 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 353.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 344 moveto
+346 344 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+303.5 327.4 moveto 29 (ACT) alignedtext
+grestore
+% CAC->ACT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 179.19 269.21 moveto
+186.11 290.81 196.5 313.72 212 331 curveto
+230 351.07 257.49 364.24 279.96 372.31 curveto
+stroke
+0 0 0 edgecolor
+newpath 278.97 375.67 moveto
+289.56 375.56 lineto
+281.21 369.04 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 278.97 375.67 moveto
+289.56 375.56 lineto
+281.21 369.04 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+213.5 368.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% CCG
+gsave
+0 0 0.75294 nodecolor
+newpath 278 152 moveto
+278 282 lineto
+358 282 lineto
+358 152 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 152 moveto
+278 282 lineto
+358 282 lineto
+358 152 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+302.5 265.4 moveto 31 (CCG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 256 moveto
+358 256 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+286 239.4 moveto 64 (5':[2,3,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 230 moveto
+358 230 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 213.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 204 moveto
+358 204 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 187.4 moveto 23 (2.5) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 178 moveto
+358 178 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 161.4 moveto 40 (CCGT) alignedtext
+grestore
+% CAC->CCG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 194.23 206.41 moveto
+214.82 208.18 243.26 210.61 267.69 212.7 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 267.62 216.2 moveto
+277.88 213.57 lineto
+268.22 209.23 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 267.62 216.2 moveto
+277.88 213.57 lineto
+268.22 209.23 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+213 217.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% TAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 648 230 moveto
+648 360 lineto
+704 360 lineto
+704 230 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+661.5 343.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 648 334 moveto
+704 334 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+662 317.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 648 308 moveto
+704 308 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+656 291.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 648 282 moveto
+704 282 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+664.5 265.4 moveto 23 (5.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 648 256 moveto
+704 256 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+661.5 239.4 moveto 29 (TAA) alignedtext
+grestore
+% TAA->TAA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 661.77 360.07 moveto
+663.81 370.7 668.55 378 676 378 curveto
+680.89 378 684.61 374.86 687.17 369.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 690.53 370.66 moveto
+690.23 360.07 lineto
+683.86 368.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 690.53 370.66 moveto
+690.23 360.07 lineto
+683.86 368.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+646 383.4 moveto 60 (RF: [2,3]) alignedtext
+grestore
+% TAA->AGC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 704.05 235 moveto
+706.11 230.28 708.11 225.57 710 221 curveto
+718.85 199.55 713.8 190.35 728 172 curveto
+747.66 146.6 777.54 126.1 802.17 112.08 curveto
+stroke
+0 0 0 edgecolor
+newpath 803.93 115.11 moveto
+810.99 107.21 lineto
+800.54 108.99 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 803.93 115.11 moveto
+810.99 107.21 lineto
+800.54 108.99 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+730 177.4 moveto 58 (FF: [2,3]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 274 moveto
+471 404 lineto
+527 404 lineto
+527 274 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+483.5 387.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 378 moveto
+527 378 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+485 361.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 352 moveto
+527 352 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+479 335.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 326 moveto
+527 326 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+487.5 309.4 moveto 23 (3.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 300 moveto
+527 300 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+483.5 283.4 moveto 31 (AAC) alignedtext
+grestore
+% TAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 647.78 290.45 moveto
+621.14 287.35 580.56 285.74 548 298 curveto
+543.74 299.6 539.58 301.75 535.61 304.22 curveto
+stroke
+0 0 0 edgecolor
+newpath 533.44 301.47 moveto
+527.24 310.06 lineto
+537.44 307.21 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 533.44 301.47 moveto
+527.24 310.06 lineto
+537.44 307.21 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+550 303.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 808 229 moveto
+808 359 lineto
+882 359 lineto
+882 229 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+830 342.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 808 333 moveto
+882 333 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+831 316.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 808 307 moveto
+882 307 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+825 290.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 808 281 moveto
+882 281 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+829 264.4 moveto 32 (1.25) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 808 255 moveto
+882 255 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+816 238.4 moveto 58 (TACCCA) alignedtext
+grestore
+% TAA->CCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 704.29 294.83 moveto
+729.67 294.68 767.44 294.46 797.46 294.28 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 797.75 297.78 moveto
+807.72 294.22 lineto
+797.7 290.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 797.75 297.78 moveto
+807.72 294.22 lineto
+797.7 290.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+736 299.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% AGC->CAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 810.96 59.68 moveto
+778.71 33.36 727.65 0 676 0 curveto
+318 0 318 0 318 0 curveto
+261.05 0 246.68 26.83 212 72 curveto
+199.17 88.71 189.76 109.26 182.91 129.13 curveto
+stroke
+0 0 0 edgecolor
+newpath 179.53 128.22 moveto
+179.75 138.81 lineto
+186.18 130.39 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 179.53 128.22 moveto
+179.75 138.81 lineto
+186.18 130.39 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+470 5.4 moveto 58 (FF: [2,3]) alignedtext
+grestore
+% AGC->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 812.89 156.08 moveto
+805.99 167.82 798.26 179.61 790 190 curveto
+766.89 219.07 755.29 220.82 728 246 curveto
+722.67 250.92 717.07 256.14 711.59 261.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 709.12 258.79 moveto
+704.24 268.19 lineto
+713.92 263.89 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 709.12 258.79 moveto
+704.24 268.19 lineto
+713.92 263.89 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+728.5 251.4 moveto 61 (RR: [2,3]) alignedtext
+grestore
+% AAC->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 527.18 335.47 moveto
+552.76 331.88 591.37 325.49 624 316 curveto
+628.66 314.64 633.48 313.02 638.22 311.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 639.68 314.47 moveto
+647.76 307.61 lineto
+637.17 307.94 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 639.68 314.47 moveto
+647.76 307.61 lineto
+637.17 307.94 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+548.5 336.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% AAC->CCG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 470.76 294.93 moveto
+464.55 287.31 457.55 279.94 450 274 curveto
+425.73 254.92 394.09 240.97 367.88 231.65 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 368.72 228.23 moveto
+358.12 228.3 lineto
+366.44 234.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 368.72 228.23 moveto
+358.12 228.3 lineto
+366.44 234.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+390 279.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% CCC->TAA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 807.7 276.9 moveto
+801.88 274.87 795.86 273.13 790 272 curveto
+762.94 266.79 754.96 266.3 728 272 curveto
+723.24 273.01 718.39 274.48 713.65 276.2 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 712.14 273.03 moveto
+704.16 280.01 lineto
+714.75 279.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 712.14 273.03 moveto
+704.16 280.01 lineto
+714.75 279.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+736 277.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ATG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 964 228 moveto
+964 358 lineto
+1020 358 lineto
+1020 228 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+977 341.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 964 332 moveto
+1020 332 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+978 315.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 964 306 moveto
+1020 306 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+972 289.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 964 280 moveto
+1020 280 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+980.5 263.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 964 254 moveto
+1020 254 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+977 237.4 moveto 30 (ATG) alignedtext
+grestore
+% CCC->ATG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 882.09 293.75 moveto
+903.98 293.6 931.61 293.41 953.7 293.26 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 953.76 296.76 moveto
+963.73 293.19 lineto
+953.71 289.76 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 953.76 296.76 moveto
+963.73 293.19 lineto
+953.71 289.76 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+900 298.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATG->CCC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 963.83 279.35 moveto
+958.06 277.13 951.93 275.18 946 274 curveto
+925.95 270.02 920.13 270.45 900 274 curveto
+897.32 274.47 894.61 275.06 891.89 275.74 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 890.75 272.43 moveto
+882.09 278.55 lineto
+892.67 279.16 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 890.75 272.43 moveto
+882.09 278.55 lineto
+892.67 279.16 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+900 279.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% ATG->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 980.2 358.07 moveto
+981.89 368.7 985.82 376 992 376 curveto
+995.96 376 998.99 373 1001.11 368.06 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 1004.57 368.64 moveto
+1003.8 358.07 lineto
+997.82 366.82 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 1004.57 368.64 moveto
+1003.8 358.07 lineto
+997.82 366.82 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+969 381.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% ACT->CAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 289.92 349.93 moveto
+264.8 320.35 227.88 276.87 200.87 245.07 curveto
+stroke
+0 1 1 edgecolor
+newpath 203.37 242.61 moveto
+194.23 237.25 lineto
+198.04 247.14 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 203.37 242.61 moveto
+194.23 237.25 lineto
+198.04 247.14 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+212 314.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% CTA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 422 moveto
+471 552 lineto
+527 552 lineto
+527 422 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+485 535.4 moveto 28 (CTA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 526 moveto
+527 526 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+485 509.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 500 moveto
+527 500 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+479 483.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 474 moveto
+527 474 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+487.5 457.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 448 moveto
+527 448 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+485 431.4 moveto 28 (CTA) alignedtext
+grestore
+% ACT->CTA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 346.28 399.25 moveto
+377.5 417.19 427.85 446.12 462.14 465.82 curveto
+stroke
+0 0 0 edgecolor
+newpath 460.5 468.92 moveto
+470.92 470.86 lineto
+463.99 462.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 460.5 468.92 moveto
+470.92 470.86 lineto
+463.99 462.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+390.5 461.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% CTA->ACT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 470.77 422.71 moveto
+463.69 409.42 456.32 398.18 450 394 curveto
+422.54 375.83 384.49 374.55 356.3 376.94 curveto
+stroke
+0 1 1 edgecolor
+newpath 355.6 373.5 moveto
+346.02 378.01 lineto
+356.33 380.46 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 355.6 373.5 moveto
+346.02 378.01 lineto
+356.33 380.46 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+389 399.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% CTA->CTA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 484.08 552.07 moveto
+486.22 562.7 491.19 570 499 570 curveto
+504.13 570 508.03 566.86 510.71 561.69 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 514.08 562.67 moveto
+513.92 552.07 lineto
+507.43 560.45 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 514.08 562.67 moveto
+513.92 552.07 lineto
+507.43 560.45 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+476 575.4 moveto 46 (FR: [3]) alignedtext
+grestore
+% GCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 90 moveto
+471 220 lineto
+527 220 lineto
+527 90 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+483.5 203.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 194 moveto
+527 194 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+485 177.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 168 moveto
+527 168 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+479 151.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 142 moveto
+527 142 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+487.5 125.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 471 116 moveto
+527 116 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+483.5 99.4 moveto 31 (GCC) alignedtext
+grestore
+% GCC->GCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 484.08 220.07 moveto
+486.22 230.7 491.19 238 499 238 curveto
+504.13 238 508.03 234.86 510.71 229.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 514.08 230.67 moveto
+513.92 220.07 lineto
+507.43 228.45 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 514.08 230.67 moveto
+513.92 220.07 lineto
+507.43 228.45 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+476 243.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% GCC->CCG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 470.95 153.02 moveto
+445.22 152.28 406.57 153.92 376 167 curveto
+372.79 168.38 369.62 170 366.53 171.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 364.52 168.93 moveto
+358.02 177.29 lineto
+368.32 174.81 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 364.52 168.93 moveto
+358.02 177.29 lineto
+368.32 174.81 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+390.5 172.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 642 82 moveto
+642 212 lineto
+710 212 lineto
+710 82 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+659.5 195.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 642 186 moveto
+710 186 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+662 169.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 642 160 moveto
+710 160 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+656 143.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 642 134 moveto
+710 134 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+664.5 117.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 642 108 moveto
+710 108 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+650 91.4 moveto 52 (ACAGG) alignedtext
+grestore
+% GCC->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 527.05 153.73 moveto
+555.11 152.46 598.69 150.49 631.48 149.01 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 631.88 152.5 moveto
+641.72 148.55 lineto
+631.57 145.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 631.88 152.5 moveto
+641.72 148.55 lineto
+631.57 145.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+563 158.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% CCG->CAC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 277.89 191.56 moveto
+272.07 188.87 266.01 186.55 260 185 curveto
+239.34 179.68 232.93 180.85 212 185 curveto
+209.31 185.53 206.58 186.23 203.87 187.03 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 202.5 183.8 moveto
+194.17 190.35 lineto
+204.76 190.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 202.5 183.8 moveto
+194.17 190.35 lineto
+204.76 190.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+213 190.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% CCG->AAC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 358.35 279.87 moveto
+363.8 285.81 369.71 291.35 376 296 curveto
+401.21 314.65 435.17 325.71 461.03 331.93 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 460.33 335.36 moveto
+470.85 334.16 lineto
+461.87 328.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 460.33 335.36 moveto
+470.85 334.16 lineto
+461.87 328.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+376.5 333.4 moveto 73 (FR: [1,2,3]) alignedtext
+grestore
+% CCG->GCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 358 210.66 moveto
+384.72 205.62 420.27 197.34 450 185 curveto
+453.94 183.36 457.93 181.44 461.84 179.37 curveto
+stroke
+0 1 1 edgecolor
+newpath 463.78 182.29 moveto
+470.78 174.33 lineto
+460.35 176.19 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 463.78 182.29 moveto
+470.78 174.33 lineto
+460.35 176.19 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+389 213.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AGG->GCC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 641.78 132.59 moveto
+635.94 130.69 629.87 129.04 624 128 curveto
+590.74 122.11 580.71 119.58 548 128 curveto
+544.09 129.01 540.16 130.4 536.32 132.02 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 534.53 128.99 moveto
+527.01 136.45 lineto
+537.54 135.32 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 534.53 128.99 moveto
+527.01 136.45 lineto
+537.54 135.32 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+563 133.4 moveto 46 (FR: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 1064 632
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/txt
new file mode 100755
index 0000000..43afa19
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ComplexTreePath/txt
@@ -0,0 +1,12 @@
+GAC {[] [] [{CAC:[3]}] [] {5':[], ~5':[]}TGAC 1.0x}
+TAA {[{AGC:[2,3]}, {AAC:[1,2,3]}] [] [{TAA:[2,3]}, {CCC:[1]}] [] {5':[], ~5':[]}TAA 5.0x}
+ATG {[] [{CCC:[1]}] [{ATG:[1]}] [] {5':[], ~5':[]}ATG 2.0x}
+ACT {[{CTA:[3]}] [] [] [{CAC:[3]}] {5':[], ~5':[]}ACT 2.0x}
+GCC {[{CCG:[2]}] [{AGG:[2]}] [{GCC:[2]}] [] {5':[], ~5':[]}GCC 2.0x}
+CTA {[] [{CTA:[3]}] [] [{ACT:[3]}] {5':[], ~5':[]}CTA 2.0x}
+CCC {[] [{ATG:[1]}] [{TAA:[1]}] [] {5':[], ~5':[]}TACCCA 1.25x}
+CCG {[] [{CAC:[2]}, {AAC:[1,2,3]}] [] [{GCC:[2]}] {5':[(2-1_0),(3-1_0),(1-1_0)], ~5':[]}CCGT 2.5x}
+CAC {[{ACT:[3]}] [{CCG:[2]}] [{GAC:[3]}] [{AGC:[2,3]}] {5':[], ~5':[]}CAC 3.0x}
+AAC {[] [{CCG:[2]}] [] [{TAA:[1,2,3]}] {5':[], ~5':[]}AAC 3.0x}
+AGC {[{CAC:[2,3]}] [] [] [{TAA:[2,3]}] {5':[], ~5':[]}AAGCA 2.0x}
+AGG {[] [{GCC:[2]}] [] [] {5':[], ~5':[]}ACAGG 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-0.crc
new file mode 100644
index 0000000..b9c5fbb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-1.crc
new file mode 100644
index 0000000..da279f4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-2.crc
new file mode 100644
index 0000000..2be97c7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-3.crc
new file mode 100644
index 0000000..8c6a7b6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-4.crc
new file mode 100644
index 0000000..1dfdf35
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-5.crc
new file mode 100644
index 0000000..ae1b707
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-6.crc
new file mode 100644
index 0000000..50461f2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-7.crc
new file mode 100644
index 0000000..aeda977
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-0
new file mode 100755
index 0000000..0062ca5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-1
new file mode 100755
index 0000000..bdb4b8c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-2
new file mode 100755
index 0000000..6cdd1c3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-3
new file mode 100755
index 0000000..890fb1d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-4
new file mode 100755
index 0000000..0a0ba27
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-5
new file mode 100755
index 0000000..3ef198b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-6
new file mode 100755
index 0000000..94fd7a1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-7
new file mode 100755
index 0000000..68b45aa
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/graphviz/result.ps
new file mode 100644
index 0000000..00a4cd6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 152 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 116 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% CCC
+gsave
+0 0 0.75294 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+107.5 130 lineto
+107.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+107.5 130 lineto
+107.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+39 113.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 104 moveto
+107.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+40 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 78 moveto
+107.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+29.5 61.4 moveto 49 (~5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 52 moveto
+107.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+15.5 35.4 moveto 77 (1.2857143) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 26 moveto
+107.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 9.4 moveto 91 (CCAGAGCCC) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 152 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/txt
new file mode 100755
index 0000000..a966542
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/CyclePath/txt
@@ -0,0 +1 @@
+CCC {[] [] [] [] {5':[], ~5':[(1-2_0)]}CCAGAGCCC 1.2857143x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-0.crc
new file mode 100644
index 0000000..5c32bd8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-1.crc
new file mode 100644
index 0000000..363a2f6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-2.crc
new file mode 100644
index 0000000..a0694bd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-3.crc
new file mode 100644
index 0000000..ddfbe69
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-4.crc
new file mode 100644
index 0000000..0a409d3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-5.crc
new file mode 100644
index 0000000..45d8e49
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-6.crc
new file mode 100644
index 0000000..3f65256
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-7.crc
new file mode 100644
index 0000000..05000c8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-0
new file mode 100755
index 0000000..52db2a0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-1
new file mode 100755
index 0000000..9ddd5d4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-2
new file mode 100755
index 0000000..6d23d57
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-3
new file mode 100755
index 0000000..4f0499b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-4
new file mode 100755
index 0000000..e3b2062
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-5
new file mode 100755
index 0000000..d12df8a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-6
new file mode 100755
index 0000000..22a60bb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-7
new file mode 100755
index 0000000..c0a74ac
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/graphviz/result.ps
new file mode 100644
index 0000000..c375a43
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 100 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 64 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 113.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 104 moveto
+56 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 9.4 moveto 39 (ATAG) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 100 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/txt
new file mode 100755
index 0000000..d846ee4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/FR/txt
@@ -0,0 +1 @@
+ATA {[] [] [] [] {5':[(1-0_0)], ~5':[]}ATAG 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-0.crc
new file mode 100644
index 0000000..cfdb7b6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-1.crc
new file mode 100644
index 0000000..f3a1b00
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-2.crc
new file mode 100644
index 0000000..bf87cfe
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-3.crc
new file mode 100644
index 0000000..ef222b9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-4.crc
new file mode 100644
index 0000000..d21cfe9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-5.crc
new file mode 100644
index 0000000..4b9a005
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-6.crc
new file mode 100644
index 0000000..3675a8c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-7.crc
new file mode 100644
index 0000000..54ab2c6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-0
new file mode 100755
index 0000000..5675be7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-1
new file mode 100755
index 0000000..fdf73ad
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-2
new file mode 100755
index 0000000..7498d4c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-3
new file mode 100755
index 0000000..872345b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-4
new file mode 100755
index 0000000..14993ea
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-5
new file mode 100755
index 0000000..8d56bda
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-6
new file mode 100755
index 0000000..fce7c64
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-7
new file mode 100755
index 0000000..7fb71ba
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/graphviz/result.ps
new file mode 100644
index 0000000..87d3025
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/graphviz/result.ps
@@ -0,0 +1,647 @@
+%!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 568 322
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 532 286 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 75 moveto
+0 205 lineto
+56 205 lineto
+56 75 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 75 moveto
+0 205 lineto
+56 205 lineto
+56 75 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 188.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 179 moveto
+56 179 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 162.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 153 moveto
+56 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 136.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 127 moveto
+56 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 110.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 101 moveto
+56 101 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 84.4 moveto 32 (GAA) alignedtext
+grestore
+% AAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 75 moveto
+140 205 lineto
+196 205 lineto
+196 75 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 188.4 moveto 31 (AAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 179 moveto
+196 179 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 162.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 153 moveto
+196 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 136.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 127 moveto
+196 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 110.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 101 moveto
+196 101 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 84.4 moveto 31 (AAA) alignedtext
+grestore
+% GAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.33 140 moveto
+77.39 140 106.37 140 129.53 140 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.71 143.5 moveto
+139.71 140 lineto
+129.71 136.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.71 143.5 moveto
+139.71 140 lineto
+129.71 136.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 145.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAA->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.51 123.99 moveto
+133.87 121.51 127.87 119.33 122 118 curveto
+101.2 113.28 94.8 113.28 74 118 curveto
+71.34 118.6 68.65 119.38 65.99 120.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 64.53 117.09 moveto
+56.49 123.99 lineto
+67.08 123.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 64.53 117.09 moveto
+56.49 123.99 lineto
+67.08 123.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 123.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% ACC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 304 148 moveto
+304 278 lineto
+360 278 lineto
+360 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+317 261.4 moveto 30 (ACC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 304 252 moveto
+360 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+318 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 304 226 moveto
+360 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+312 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 304 200 moveto
+360 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+320.5 183.4 moveto 23 (3.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 304 174 moveto
+360 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+312 157.4 moveto 40 (AACC) alignedtext
+grestore
+% AAA->ACC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 196.07 175.45 moveto
+201.53 180.63 207.58 185.42 214 189 curveto
+238.33 202.57 269.31 208.52 293.42 211.1 curveto
+stroke
+0 0 0 edgecolor
+newpath 293.35 214.61 moveto
+303.63 212.04 lineto
+293.99 207.64 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 293.35 214.61 moveto
+303.63 212.04 lineto
+293.99 207.64 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 216.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% CAA
+gsave
+0 0 0.75294 nodecolor
+newpath 304 0 moveto
+304 130 lineto
+360 130 lineto
+360 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 304 0 moveto
+304 130 lineto
+360 130 lineto
+360 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+316.5 113.4 moveto 31 (CAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 304 104 moveto
+360 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+313.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 304 78 moveto
+360 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+312 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 304 52 moveto
+360 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+320.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 304 26 moveto
+360 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+316.5 9.4 moveto 31 (CAA) alignedtext
+grestore
+% AAA->CAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 196.23 130.42 moveto
+228.46 119.4 277.81 102.29 286 98 curveto
+289.05 96.4 292.13 94.62 295.18 92.74 curveto
+stroke
+0 1 1 edgecolor
+newpath 297.14 95.64 moveto
+303.59 87.24 lineto
+293.31 89.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 297.14 95.64 moveto
+303.59 87.24 lineto
+293.31 89.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+226 129.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% TAA
+gsave
+0 0 0.75294 nodecolor
+newpath 468 147 moveto
+468 277 lineto
+524 277 lineto
+524 147 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 147 moveto
+468 277 lineto
+524 277 lineto
+524 147 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+481.5 260.4 moveto 29 (TAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 251 moveto
+524 251 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+477.5 234.4 moveto 37 (5':[3]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 225 moveto
+524 225 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+476 208.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 199 moveto
+524 199 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+484.5 182.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 173 moveto
+524 173 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+481.5 156.4 moveto 29 (TAA) alignedtext
+grestore
+% TAA->ACC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 467.83 198.35 moveto
+462.06 196.13 455.93 194.18 450 193 curveto
+418.61 186.77 409.33 186.48 378 193 curveto
+375.2 193.58 372.37 194.34 369.55 195.23 curveto
+stroke
+0 0 0 edgecolor
+newpath 368.33 191.95 moveto
+360.11 198.63 lineto
+370.71 198.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 368.33 191.95 moveto
+360.11 198.63 lineto
+370.71 198.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+378 198.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% ACC->AAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 303.96 183.57 moveto
+298.36 178.86 292.27 174.41 286 171 curveto
+261.2 157.5 230.24 149.66 206.26 145.24 curveto
+stroke
+0 1 1 edgecolor
+newpath 206.56 141.74 moveto
+196.11 143.49 lineto
+205.37 148.64 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 206.56 141.74 moveto
+196.11 143.49 lineto
+205.37 148.64 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+219.5 176.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% ACC->TAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 360.19 212.83 moveto
+387.15 212.66 427.98 212.41 457.84 212.23 curveto
+stroke
+0 1 1 edgecolor
+newpath 457.92 215.73 moveto
+467.9 212.17 lineto
+457.88 208.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 457.92 215.73 moveto
+467.9 212.17 lineto
+457.88 208.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+390 218.4 moveto 48 (RR: [3]) alignedtext
+grestore
+% CAA->AAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 303.86 62.7 moveto
+278.67 61.94 241.57 64.15 214 80 curveto
+210.29 82.13 206.77 84.7 203.47 87.55 curveto
+stroke
+0 0 0 edgecolor
+newpath 200.89 85.18 moveto
+196.14 94.65 lineto
+205.76 90.2 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 200.89 85.18 moveto
+196.14 94.65 lineto
+205.76 90.2 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+227.5 85.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 568 322
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/txt
new file mode 100755
index 0000000..805a20c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/LeftAdj/txt
@@ -0,0 +1,5 @@
+GAA {[{AAA:[2]}] [] [] [] {5':[(2-0_0)], ~5':[]}GAA 1.0x}
+TAA {[{ACC:[1,2,3]}] [] [] [] {5':[(3-0_0)], ~5':[]}TAA 1.0x}
+ACC {[] [] [] [{TAA:[3]}, {AAA:[1,2]}] {5':[], ~5':[]}AACC 3.0x}
+CAA {[{AAA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]}CAA 1.0x}
+AAA {[{ACC:[1,2,3]}] [] [] [{GAA:[2]}, {CAA:[1]}] {5':[], ~5':[]}AAA 2.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-0.crc
new file mode 100644
index 0000000..78bb7ba
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-1.crc
new file mode 100644
index 0000000..18177c7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-2.crc
new file mode 100644
index 0000000..efa2455
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-3.crc
new file mode 100644
index 0000000..02a7062
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-4.crc
new file mode 100644
index 0000000..c1b5f14
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-5.crc
new file mode 100644
index 0000000..c20f513
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-6.crc
new file mode 100644
index 0000000..ddec270
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-7.crc
new file mode 100644
index 0000000..4f571ed
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-0
new file mode 100755
index 0000000..19a570c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-1
new file mode 100755
index 0000000..f17cbea
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-2
new file mode 100755
index 0000000..ae1e439
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-3
new file mode 100755
index 0000000..05bb6bb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-4
new file mode 100755
index 0000000..2606d39
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-5
new file mode 100755
index 0000000..397f53c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-6
new file mode 100755
index 0000000..f81b605
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-7
new file mode 100755
index 0000000..b3fd608
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/graphviz/result.ps
new file mode 100644
index 0000000..3dd4115
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/graphviz/result.ps
@@ -0,0 +1,253 @@
+%!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 100 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 64 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AGA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 113.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 104 moveto
+56 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 9.4 moveto 40 (TAGA) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 100 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/txt
new file mode 100755
index 0000000..7bcbfb3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RF/txt
@@ -0,0 +1 @@
+AGA {[] [] [] [] {5':[(1-0_0)], ~5':[]}TAGA 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-0.crc
new file mode 100644
index 0000000..b4ca108
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-1.crc
new file mode 100644
index 0000000..35e0460
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-2.crc
new file mode 100644
index 0000000..fe14f75
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-3.crc
new file mode 100644
index 0000000..2ddeced
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-4.crc
new file mode 100644
index 0000000..5b3ba2d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-5.crc
new file mode 100644
index 0000000..c5612e9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-6.crc
new file mode 100644
index 0000000..3456072
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-7.crc
new file mode 100644
index 0000000..995b9cb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-0
new file mode 100755
index 0000000..572aef2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-1
new file mode 100755
index 0000000..63948a3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-2
new file mode 100755
index 0000000..62f6266
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-3
new file mode 100755
index 0000000..cd42876
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-4
new file mode 100755
index 0000000..180723e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-5
new file mode 100755
index 0000000..233efa8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-6
new file mode 100755
index 0000000..7ae58d4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-7
new file mode 100755
index 0000000..85fe684
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/graphviz/result.ps
new file mode 100644
index 0000000..1d60a89
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/graphviz/result.ps
@@ -0,0 +1,626 @@
+%!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 432 397
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 396 361 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 156 moveto
+0 286 lineto
+80 286 lineto
+80 156 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 156 moveto
+0 286 lineto
+80 286 lineto
+80 156 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+24 269.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 260 moveto
+80 260 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 243.4 moveto 64 (5':[2,3,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 234 moveto
+80 234 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+20 217.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 208 moveto
+80 208 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+28.5 191.4 moveto 23 (3.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 182 moveto
+80 182 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+18.5 165.4 moveto 43 (GAAA) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 223 moveto
+192 353 lineto
+248 353 lineto
+248 223 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+205.5 336.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 327 moveto
+248 327 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+206 310.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 301 moveto
+248 301 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+200 284.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 275 moveto
+248 275 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+208.5 258.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 249 moveto
+248 249 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+205.5 232.4 moveto 29 (AAT) alignedtext
+grestore
+% GAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 80.11 254.17 moveto
+85.88 257.9 91.92 261.31 98 264 curveto
+124.61 275.76 157 281.79 181.73 284.86 curveto
+stroke
+0 0 0 edgecolor
+newpath 181.48 288.36 moveto
+191.81 286.01 lineto
+182.27 281.4 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 181.48 288.36 moveto
+191.81 286.01 lineto
+182.27 281.4 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+113.5 288.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 75 moveto
+192 205 lineto
+248 205 lineto
+248 75 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+204.5 188.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 179 moveto
+248 179 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+206 162.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 153 moveto
+248 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+200 136.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 127 moveto
+248 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+208.5 110.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 101 moveto
+248 101 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+204.5 84.4 moveto 31 (AAC) alignedtext
+grestore
+% GAA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 80.22 206.33 moveto
+86.17 204.19 92.24 202.03 98 200 curveto
+131.67 188.14 142.39 190.58 174 174 curveto
+177.08 172.38 180.19 170.57 183.24 168.65 curveto
+stroke
+0 0 0 edgecolor
+newpath 185.32 171.47 moveto
+191.69 163 lineto
+181.43 165.65 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 185.32 171.47 moveto
+191.69 163 lineto
+181.43 165.65 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+107 205.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% AAT->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 191.8 254.49 moveto
+186.35 249.65 180.34 245.23 174 242 curveto
+148.24 228.9 116.39 223.54 90.2 221.5 curveto
+stroke
+0 1 1 edgecolor
+newpath 90.3 218 moveto
+80.1 220.85 lineto
+89.86 224.98 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 90.3 218 moveto
+80.1 220.85 lineto
+89.86 224.98 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+98.5 247.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% AAC->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 191.89 136.96 moveto
+166 135.46 127.28 136.57 98 152 curveto
+94.62 153.78 91.35 155.85 88.21 158.14 curveto
+stroke
+0 1 1 edgecolor
+newpath 85.75 155.63 moveto
+80.2 164.66 lineto
+90.17 161.06 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 85.75 155.63 moveto
+80.2 164.66 lineto
+90.17 161.06 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+98.5 157.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% ACC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 148 moveto
+332 278 lineto
+388 278 lineto
+388 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+345 261.4 moveto 30 (ACC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 252 moveto
+388 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+346 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 226 moveto
+388 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+340 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 200 moveto
+388 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+348.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 174 moveto
+388 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+345 157.4 moveto 30 (ACC) alignedtext
+grestore
+% AAC->ACC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 248.22 175.18 moveto
+253.67 180.4 259.67 185.26 266 189 curveto
+282.85 198.95 303.77 204.81 321.59 208.25 curveto
+stroke
+0 0 0 edgecolor
+newpath 321.22 211.74 moveto
+331.68 210 lineto
+322.42 204.84 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 321.22 211.74 moveto
+331.68 210 lineto
+322.42 204.84 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+267.5 211.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% ACG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 0 moveto
+332 130 lineto
+388 130 lineto
+388 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+344.5 113.4 moveto 31 (ACG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 104 moveto
+388 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+346 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 78 moveto
+388 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+340 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 52 moveto
+388 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+348.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 332 26 moveto
+388 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+344.5 9.4 moveto 31 (ACG) alignedtext
+grestore
+% AAC->ACG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 248.29 129.12 moveto
+267.34 121.37 292.76 110.19 314 98 curveto
+317.17 96.18 320.39 94.19 323.58 92.12 curveto
+stroke
+0 0 0 edgecolor
+newpath 325.55 95.01 moveto
+331.89 86.52 lineto
+321.64 89.21 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 325.55 95.01 moveto
+331.89 86.52 lineto
+321.64 89.21 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+267.5 127.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ACC->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 331.78 183.89 moveto
+326.2 179.14 320.16 174.6 314 171 curveto
+296.76 160.92 275.81 153.6 258.06 148.62 curveto
+stroke
+0 1 1 edgecolor
+newpath 258.6 145.14 moveto
+248.04 145.95 lineto
+256.8 151.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 258.6 145.14 moveto
+248.04 145.95 lineto
+256.8 151.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+266 176.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% ACG->AAC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 331.83 64.15 moveto
+312.12 64.78 285.87 68.15 266 80 curveto
+262.32 82.19 258.83 84.8 255.55 87.68 curveto
+stroke
+0 1 1 edgecolor
+newpath 252.94 85.34 moveto
+248.25 94.84 lineto
+257.84 90.34 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 252.94 85.34 moveto
+248.25 94.84 lineto
+257.84 90.34 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+266 85.4 moveto 48 (RR: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 432 397
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/txt
new file mode 100755
index 0000000..c382fe3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RightAdj/txt
@@ -0,0 +1,5 @@
+GAA {[{AAT:[3]}, {AAC:[1,2]}] [] [] [] {5':[(2-0_0),(3-0_0),(1-0_0)], ~5':[]}GAAA 3.0x}
+ACC {[] [] [] [{AAC:[2]}] {5':[], ~5':[]}ACC 1.0x}
+ACG {[] [] [] [{AAC:[1]}] {5':[], ~5':[]}ACG 1.0x}
+AAC {[{ACG:[1]}, {ACC:[2]}] [] [] [{GAA:[1,2,3]}] {5':[], ~5':[]}AAC 2.0x}
+AAT {[] [] [] [{GAA:[1,2,3]}] {5':[], ~5':[]}AAT 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-0.crc
new file mode 100644
index 0000000..9280a05
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-1.crc
new file mode 100644
index 0000000..63a354d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-2.crc
new file mode 100644
index 0000000..4db14b1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-3.crc
new file mode 100644
index 0000000..851ac40
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-4.crc
new file mode 100644
index 0000000..57e3168
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-5.crc
new file mode 100644
index 0000000..be06d7e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-6.crc
new file mode 100644
index 0000000..ddc53b1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-7.crc
new file mode 100644
index 0000000..12ed867
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-0
new file mode 100755
index 0000000..9cb33a6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-1
new file mode 100755
index 0000000..0ad8798
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-2
new file mode 100755
index 0000000..f39c95c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-3
new file mode 100755
index 0000000..4c2ad41
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-4
new file mode 100755
index 0000000..2d9a6d9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-5
new file mode 100755
index 0000000..0560d64
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-6
new file mode 100755
index 0000000..3f97de1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-7
new file mode 100755
index 0000000..eac01d2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/graphviz/result.ps
new file mode 100644
index 0000000..80e15d2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/graphviz/result.ps
@@ -0,0 +1,321 @@
+%!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 304 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 268 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% CCC
+gsave
+0 0 0.75294 nodecolor
+newpath 150.5 0 moveto
+150.5 130 lineto
+259.5 130 lineto
+259.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 150.5 0 moveto
+150.5 130 lineto
+259.5 130 lineto
+259.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+190 113.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 150.5 104 moveto
+259.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+191 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 150.5 78 moveto
+259.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+174 61.4 moveto 62 (~5':[2,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 150.5 52 moveto
+259.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166.5 35.4 moveto 77 (2.2857144) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 150.5 26 moveto
+259.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158.5 9.4 moveto 93 (AGAGCCCAG) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 113.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 104 moveto
+56 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 9.4 moveto 32 (AAG) alignedtext
+grestore
+% AAG->CCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.05 65 moveto
+78.63 65 111.28 65 140.25 65 curveto
+stroke
+0 0 0 edgecolor
+newpath 140.33 68.5 moveto
+150.33 65 lineto
+140.33 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 140.33 68.5 moveto
+150.33 65 lineto
+140.33 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 70.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 304 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/txt
new file mode 100755
index 0000000..b57f802
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/RingPath/txt
@@ -0,0 +1,2 @@
+CCC {[] [] [] [] {5':[], ~5':[(2-6_0),(1-0_0)]}AGAGCCCAG 2.2857144x}
+AAG {[{CCC:[1,2]}] [] [] [] {5':[], ~5':[]}AAG 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-0.crc
new file mode 100644
index 0000000..0690f1f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-1.crc
new file mode 100644
index 0000000..6743335
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-2.crc
new file mode 100644
index 0000000..f21e73d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-3.crc
new file mode 100644
index 0000000..a8715a7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-4.crc
new file mode 100644
index 0000000..00db92a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-5.crc
new file mode 100644
index 0000000..7cec19a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-6.crc
new file mode 100644
index 0000000..4fa5d32
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-7.crc
new file mode 100644
index 0000000..c168448
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-0
new file mode 100755
index 0000000..3ffb7f8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-1
new file mode 100755
index 0000000..72d6634
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-2
new file mode 100755
index 0000000..0b3defc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-3
new file mode 100755
index 0000000..4b52fdc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-4
new file mode 100755
index 0000000..306c96c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-5
new file mode 100755
index 0000000..39a269b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-6
new file mode 100755
index 0000000..931535e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-7
new file mode 100755
index 0000000..5d842e4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/graphviz/result.ps
new file mode 100644
index 0000000..c98b265
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/graphviz/result.ps
@@ -0,0 +1,277 @@
+%!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 110 210
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 74 174 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GCC
+gsave
+0 0 0.75294 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+65.5 130 lineto
+65.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+65.5 130 lineto
+65.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+17.5 113.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 104 moveto
+65.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+19 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 78 moveto
+65.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 61.4 moveto 49 (~5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 52 moveto
+65.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+21.5 35.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 26 moveto
+65.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+17.5 9.4 moveto 31 (GCC) alignedtext
+grestore
+% GCC->GCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 21.9 130.07 moveto
+23.49 140.7 27.19 148 33 148 curveto
+36.72 148 39.58 145 41.57 140.06 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 45.04 140.63 moveto
+44.1 130.07 lineto
+38.25 138.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 45.04 140.63 moveto
+44.1 130.07 lineto
+38.25 138.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+10 153.4 moveto 46 (RF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 110 210
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/txt
new file mode 100755
index 0000000..54bbe17
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SelfTandemRepeat/txt
@@ -0,0 +1 @@
+GCC {[] [] [{GCC:[1]}] [] {5':[], ~5':[(1-0_0)]}GCC 2.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-0.crc
new file mode 100644
index 0000000..f31ded9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-1.crc
new file mode 100644
index 0000000..e000de0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-2.crc
new file mode 100644
index 0000000..f83a61b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-3.crc
new file mode 100644
index 0000000..d66c926
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-4.crc
new file mode 100644
index 0000000..c484a52
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-5.crc
new file mode 100644
index 0000000..d498296
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-6.crc
new file mode 100644
index 0000000..311fded
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-7.crc
new file mode 100644
index 0000000..ded29ec
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-0
new file mode 100755
index 0000000..017fa75
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-1
new file mode 100755
index 0000000..bd3531c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-2
new file mode 100755
index 0000000..2c0f1a5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-3
new file mode 100755
index 0000000..b8f66cc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-4
new file mode 100755
index 0000000..3a73eff
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-5
new file mode 100755
index 0000000..4434ece
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-6
new file mode 100755
index 0000000..e3c19bd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-7
new file mode 100755
index 0000000..ca0b561
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/graphviz/result.ps
new file mode 100644
index 0000000..55e34e3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/graphviz/result.ps
@@ -0,0 +1,583 @@
+%!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 600 248
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 564 212 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath .5 0 moveto
+.5 130 lineto
+77.5 130 lineto
+77.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+23.5 113.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath .5 104 moveto
+77.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+25 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath .5 78 moveto
+77.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+19 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath .5 52 moveto
+77.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+27.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath .5 26 moveto
+77.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 9.4 moveto 61 (AGAACT) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 160 74 moveto
+160 204 lineto
+216 204 lineto
+216 74 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172 187.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 160 178 moveto
+216 178 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+174 161.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 160 152 moveto
+216 152 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+168 135.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 160 126 moveto
+216 126 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+176.5 109.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 160 100 moveto
+216 100 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172 83.4 moveto 32 (AAG) alignedtext
+grestore
+% AGA->AAG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 77.63 94.95 moveto
+83.61 98.94 89.85 102.77 96 106 curveto
+113.08 114.98 133.13 122.49 150.15 128.07 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 149.18 131.43 moveto
+159.77 131.12 lineto
+151.3 124.76 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 149.18 131.43 moveto
+159.77 131.12 lineto
+151.3 124.76 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+96 129.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 490 2 moveto
+490 132 lineto
+556 132 lineto
+556 2 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 490 2 moveto
+490 132 lineto
+556 132 lineto
+556 2 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+508.5 115.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 490 106 moveto
+556 106 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+498 89.4 moveto 50 (5':[2,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 490 80 moveto
+556 80 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+503 63.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 490 54 moveto
+556 54 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+511.5 37.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 490 28 moveto
+556 28 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+498.5 11.4 moveto 49 (AATAG) alignedtext
+grestore
+% AGA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 77.63 64.23 moveto
+83.78 64.13 90.06 64.05 96 64 curveto
+116.44 63.82 121.56 63.96 142 64 curveto
+254 64.22 282 63.91 394 65 curveto
+422.51 65.28 454.57 65.77 479.6 66.2 curveto
+stroke
+0 1 1 edgecolor
+newpath 479.8 69.71 moveto
+489.86 66.38 lineto
+479.92 62.71 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 479.8 69.71 moveto
+489.86 66.38 lineto
+479.92 62.71 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+234.5 69.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AAG->AGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 159.74 98.27 moveto
+154.4 92.79 148.45 87.77 142 84 curveto
+125.78 74.53 105.88 69.61 87.91 67.11 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 88.22 63.62 moveto
+77.88 65.93 lineto
+87.4 70.57 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 88.22 63.62 moveto
+77.88 65.93 lineto
+87.4 70.57 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+96 89.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 314.5 74 moveto
+314.5 204 lineto
+393.5 204 lineto
+393.5 74 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+337.5 187.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 314.5 178 moveto
+393.5 178 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+340 161.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 314.5 152 moveto
+393.5 152 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+334 135.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 314.5 126 moveto
+393.5 126 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+342.5 109.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 314.5 100 moveto
+393.5 100 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+322.5 83.4 moveto 63 (AGGGCT) alignedtext
+grestore
+% AAG->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 216.16 139 moveto
+240.22 139 275.4 139 304.19 139 curveto
+stroke
+0 0 0 edgecolor
+newpath 304.48 142.5 moveto
+314.48 139 lineto
+304.48 135.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 304.48 142.5 moveto
+314.48 139 lineto
+304.48 135.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+242.5 144.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAT->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 489.81 63.05 moveto
+483.88 62.36 477.76 61.65 472 61 curveto
+366.55 49.11 339.93 35.77 234 42 curveto
+184.02 44.94 127.2 52.08 87.84 57.63 curveto
+stroke
+0 0 0 edgecolor
+newpath 87.13 54.19 moveto
+77.73 59.07 lineto
+88.12 61.12 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 87.13 54.19 moveto
+77.73 59.07 lineto
+88.12 61.12 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+242.5 47.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AAT->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 489.99 68.66 moveto
+467.12 70.88 436.5 76.04 412 88 curveto
+408.61 89.66 405.26 91.56 401.99 93.65 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 399.74 90.95 moveto
+393.52 99.53 lineto
+403.73 96.7 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 399.74 90.95 moveto
+393.52 99.53 lineto
+403.73 96.7 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+419 93.4 moveto 46 (FR: [2]) alignedtext
+grestore
+% AGG->AAG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 314.29 121.79 moveto
+308.26 119.81 302.04 118.11 296 117 curveto
+268.9 112.03 260.87 110.9 234 117 curveto
+231.34 117.6 228.65 118.38 225.99 119.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 224.53 116.09 moveto
+216.49 122.99 lineto
+227.08 122.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 224.53 116.09 moveto
+216.49 122.99 lineto
+227.08 122.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+241 122.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% AGG->AAT
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 393.58 133.93 moveto
+417.28 129.78 447.46 122.49 472 110 curveto
+475.29 108.33 478.55 106.4 481.74 104.32 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 483.84 107.11 moveto
+489.98 98.48 lineto
+479.8 101.4 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 483.84 107.11 moveto
+489.98 98.48 lineto
+479.8 101.4 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+412 135.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 600 248
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/txt
new file mode 100755
index 0000000..f01f23c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleBridgePath/txt
@@ -0,0 +1,4 @@
+AGA {[] [{AAG:[1]}] [] [{AAT:[1,2]}] {5':[], ~5':[]}AGAACT 1.0x}
+AAG {[{AGG:[2]}] [{AGA:[1]}] [] [] {5':[], ~5':[]}AAG 2.0x}
+AGG {[] [{AAT:[1,2]}] [] [{AAG:[2]}] {5':[], ~5':[]}AGGGCT 1.0x}
+AAT {[{AGA:[1]}] [{AGG:[2]}] [] [] {5':[(2-0_0),(1-0_0)], ~5':[]}AATAG 2.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-0.crc
new file mode 100644
index 0000000..d5ca429
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-1.crc
new file mode 100644
index 0000000..c26955e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-2.crc
new file mode 100644
index 0000000..3b84c28
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-3.crc
new file mode 100644
index 0000000..cdd1ca7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-4.crc
new file mode 100644
index 0000000..f70e83e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-5.crc
new file mode 100644
index 0000000..b467cd0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-6.crc
new file mode 100644
index 0000000..3c64a5d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-7.crc
new file mode 100644
index 0000000..321e352
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-0
new file mode 100755
index 0000000..4390c87
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-1
new file mode 100755
index 0000000..733ad18
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-2
new file mode 100755
index 0000000..e6844cf
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-3
new file mode 100755
index 0000000..aac1e23
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-4
new file mode 100755
index 0000000..e65084c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-5
new file mode 100755
index 0000000..6d71d6f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-6
new file mode 100755
index 0000000..45f3a9d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-7
new file mode 100755
index 0000000..2d048fc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/graphviz/result.ps
new file mode 100644
index 0000000..1ce3316
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/graphviz/result.ps
@@ -0,0 +1,764 @@
+%!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 882 210
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 846 174 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ACG
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+66 130 lineto
+66 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+66 130 lineto
+66 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+17.5 113.4 moveto 31 (ACG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 104 moveto
+66 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14.5 87.4 moveto 37 (5':[3]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+66 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+66 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+21.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+66 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 9.4 moveto 50 (TAACG) alignedtext
+grestore
+% CCG
+gsave
+0 0 0.75294 nodecolor
+newpath 148 0 moveto
+148 130 lineto
+224 130 lineto
+224 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 148 0 moveto
+148 130 lineto
+224 130 lineto
+224 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 113.4 moveto 31 (CCG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 148 104 moveto
+224 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+167.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 148 78 moveto
+224 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 148 52 moveto
+224 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170 35.4 moveto 32 (1.25) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 148 26 moveto
+224 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156 9.4 moveto 60 (GTCCCG) alignedtext
+grestore
+% ACG->CCG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 66.2 65 moveto
+87.1 65 114.43 65 137.71 65 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 137.74 68.5 moveto
+147.74 65 lineto
+137.74 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 137.74 68.5 moveto
+147.74 65 lineto
+137.74 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+84 70.4 moveto 46 (FR: [3]) alignedtext
+grestore
+% CCG->ACG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 147.7 47.79 moveto
+141.87 45.81 135.85 44.11 130 43 curveto
+109.91 39.2 104.02 38.87 84 43 curveto
+81.21 43.58 78.39 44.31 75.57 45.16 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 74.42 41.86 moveto
+66.11 48.44 lineto
+76.7 48.47 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 74.42 41.86 moveto
+66.11 48.44 lineto
+76.7 48.47 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+84 48.4 moveto 46 (FR: [3]) alignedtext
+grestore
+% CGC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 308.5 0 moveto
+308.5 130 lineto
+365.5 130 lineto
+365.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+321.5 113.4 moveto 31 (CGC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 308.5 104 moveto
+365.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+323 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 308.5 78 moveto
+365.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+317 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 308.5 52 moveto
+365.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+325.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 308.5 26 moveto
+365.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+316.5 9.4 moveto 41 (CGCA) alignedtext
+grestore
+% CCG->CGC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 224.1 65 moveto
+246.83 65 275.61 65 298.42 65 curveto
+stroke
+0 0 0 edgecolor
+newpath 298.44 68.5 moveto
+308.44 65 lineto
+298.44 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 298.44 68.5 moveto
+308.44 65 lineto
+298.44 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+243.5 70.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ATG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 448 0 moveto
+448 130 lineto
+504 130 lineto
+504 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+461 113.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 448 104 moveto
+504 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+462 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 448 78 moveto
+504 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+456 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 448 52 moveto
+504 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+464.5 35.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 448 26 moveto
+504 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+461 9.4 moveto 30 (ATG) alignedtext
+grestore
+% ATG->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 464.2 130.07 moveto
+465.89 140.7 469.82 148 476 148 curveto
+479.96 148 482.99 145 485.11 140.06 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 488.57 140.64 moveto
+487.8 130.07 lineto
+481.82 138.82 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 488.57 140.64 moveto
+487.8 130.07 lineto
+481.82 138.82 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+453 153.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% AGA
+gsave
+0 0 0.75294 nodecolor
+newpath 588.5 0 moveto
+588.5 130 lineto
+681.5 130 lineto
+681.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 588.5 0 moveto
+588.5 130 lineto
+681.5 130 lineto
+681.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+619.5 113.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 588.5 104 moveto
+681.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+621 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 588.5 78 moveto
+681.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+610.5 61.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 588.5 52 moveto
+681.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+596.5 35.4 moveto 77 (1.6666666) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 588.5 26 moveto
+681.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+609 9.4 moveto 52 (TGAGA) alignedtext
+grestore
+% ATG->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 504.06 65 moveto
+524.51 65 552.92 65 578.05 65 curveto
+stroke
+0 0 0 edgecolor
+newpath 578.22 68.5 moveto
+588.22 65 lineto
+578.22 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 578.22 68.5 moveto
+588.22 65 lineto
+578.22 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+523.5 70.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% ATG->CGC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 447.83 51.35 moveto
+442.06 49.13 435.93 47.18 430 46 curveto
+409.95 42.02 404.07 42.1 384 46 curveto
+381.12 46.56 378.2 47.29 375.29 48.15 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 373.9 44.93 moveto
+365.55 51.44 lineto
+376.14 51.56 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 373.9 44.93 moveto
+365.55 51.44 lineto
+376.14 51.56 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+384 51.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AGA->ATG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 588.24 47.17 moveto
+582.18 45.45 576 43.99 570 43 curveto
+548.95 39.53 542.8 38.28 522 43 curveto
+519.34 43.6 516.65 44.38 513.99 45.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 512.53 42.09 moveto
+504.49 48.99 lineto
+515.08 48.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 512.53 42.09 moveto
+504.49 48.99 lineto
+515.08 48.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+522 48.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 764 0 moveto
+764 130 lineto
+838 130 lineto
+838 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+786.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 764 104 moveto
+838 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+787 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 764 78 moveto
+838 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+781 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 764 52 moveto
+838 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+789.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 764 26 moveto
+838 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+772 9.4 moveto 58 (CAAATC) alignedtext
+grestore
+% AGA->AAT
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 681.68 65 moveto
+704.22 65 731.2 65 753.81 65 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 753.85 68.5 moveto
+763.85 65 lineto
+753.85 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 753.85 68.5 moveto
+763.85 65 lineto
+753.85 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+700 70.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% CGC->CCG
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 308.37 49.2 moveto
+302.46 46.63 296.16 44.37 290 43 curveto
+269.18 38.37 262.96 39.03 242 43 curveto
+239.35 43.5 236.66 44.13 233.98 44.84 curveto
+stroke
+0 1 1 edgecolor
+newpath 232.85 41.53 moveto
+224.3 47.79 lineto
+234.89 48.22 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 232.85 41.53 moveto
+224.3 47.79 lineto
+234.89 48.22 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+242 48.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CGC->ATG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 365.8 65 moveto
+386.63 65 414.98 65 437.71 65 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 437.71 68.5 moveto
+447.71 65 lineto
+437.71 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 437.71 68.5 moveto
+447.71 65 lineto
+437.71 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+384 70.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% AAT->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 763.7 47.9 moveto
+757.88 45.87 751.86 44.13 746 43 curveto
+725.92 39.13 720.17 39.68 700 43 curveto
+697.19 43.46 694.34 44.03 691.48 44.68 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 690.57 41.3 moveto
+681.76 47.17 lineto
+692.31 48.08 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 690.57 41.3 moveto
+681.76 47.17 lineto
+692.31 48.08 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+700 48.4 moveto 46 (RF: [2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 882 210
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/txt
new file mode 100755
index 0000000..d2fa547
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimplePath/txt
@@ -0,0 +1,6 @@
+ACG {[] [{CCG:[3]}] [] [] {5':[(3-0_0)], ~5':[]}TAACG 1.0x}
+ATG {[{AGA:[2]}] [{CGC:[1]}] [{ATG:[1]}] [] {5':[], ~5':[]}ATG 2.0x}
+CCG {[{CGC:[1]}] [{ACG:[3]}] [] [] {5':[(1-3_0)], ~5':[]}GTCCCG 1.25x}
+CGC {[] [{ATG:[1]}] [] [{CCG:[1]}] {5':[], ~5':[]}CGCA 1.0x}
+AGA {[] [] [{AAT:[2]}] [{ATG:[1]}] {5':[], ~5':[(2-2_0)]}TGAGA 1.6666666x}
+AAT {[] [] [{AGA:[2]}] [] {5':[], ~5':[]}CAAATC 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-0.crc
new file mode 100644
index 0000000..784dba9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-1.crc
new file mode 100644
index 0000000..c0b6555
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-2.crc
new file mode 100644
index 0000000..a404740
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-3.crc
new file mode 100644
index 0000000..cd713cb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-4.crc
new file mode 100644
index 0000000..001cff5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-5.crc
new file mode 100644
index 0000000..89cd381
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-6.crc
new file mode 100644
index 0000000..a245b47
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-7.crc
new file mode 100644
index 0000000..721d716
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-0
new file mode 100755
index 0000000..c32ce7a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-1
new file mode 100755
index 0000000..5436e97
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-2
new file mode 100755
index 0000000..60f995a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-3
new file mode 100755
index 0000000..6d11ff2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-4
new file mode 100755
index 0000000..1d9b6d2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-5
new file mode 100755
index 0000000..5120f5a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-6
new file mode 100755
index 0000000..80a2365
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-7
new file mode 100755
index 0000000..68bcb99
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/graphviz/result.ps
new file mode 100644
index 0000000..bc623c0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/graphviz/result.ps
@@ -0,0 +1,625 @@
+%!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 454 397
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 418 361 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 156 moveto
+0 286 lineto
+80 286 lineto
+80 156 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 156 moveto
+0 286 lineto
+80 286 lineto
+80 156 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+24 269.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 260 moveto
+80 260 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 243.4 moveto 64 (5':[2,3,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 234 moveto
+80 234 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+20 217.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 208 moveto
+80 208 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+28.5 191.4 moveto 23 (3.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 182 moveto
+80 182 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+18.5 165.4 moveto 43 (GAAA) alignedtext
+grestore
+% AAT
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 193.5 223 moveto
+193.5 353 lineto
+256.5 353 lineto
+256.5 223 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+210.5 336.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 193.5 327 moveto
+256.5 327 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+211 310.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 193.5 301 moveto
+256.5 301 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+205 284.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 193.5 275 moveto
+256.5 275 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+213.5 258.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 193.5 249 moveto
+256.5 249 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+201.5 232.4 moveto 47 (AATCT) alignedtext
+grestore
+% GAA->AAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 80.09 254.21 moveto
+85.86 257.93 91.91 261.34 98 264 curveto
+125.01 275.82 157.75 281.83 183.23 284.88 curveto
+stroke
+0 0 0 edgecolor
+newpath 182.99 288.37 moveto
+193.31 285.98 lineto
+183.74 281.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 182.99 288.37 moveto
+193.31 285.98 lineto
+183.74 281.41 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+113.5 288.4 moveto 45 (FF: [3]) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 75 moveto
+192 205 lineto
+258 205 lineto
+258 75 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+208.5 188.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 179 moveto
+258 179 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+211 162.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 153 moveto
+258 153 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+205 136.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 127 moveto
+258 127 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+213.5 110.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 192 101 moveto
+258 101 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+200 84.4 moveto 50 (AGGTT) alignedtext
+grestore
+% GAA->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 80.03 207.09 moveto
+118.7 193.64 171.77 175.11 174 174 curveto
+177.09 172.46 180.22 170.76 183.33 168.97 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 185.23 171.91 moveto
+191.98 163.73 lineto
+181.61 165.92 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 185.23 171.91 moveto
+191.98 163.73 lineto
+181.61 165.92 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+106 204.4 moveto 60 (FR: [1,2]) alignedtext
+grestore
+% AAT->GAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 193.31 254.5 moveto
+187.31 249.66 180.78 245.23 174 242 curveto
+148.01 229.61 116.28 224.27 90.22 222.07 curveto
+stroke
+0 1 1 edgecolor
+newpath 90.39 218.57 moveto
+80.17 221.34 lineto
+89.89 225.55 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 90.39 218.57 moveto
+80.17 221.34 lineto
+89.89 225.55 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+98.5 247.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% AGG->GAA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 191.76 136.48 moveto
+164.94 135.14 127.03 136.78 98 152 curveto
+94.61 153.78 91.34 155.84 88.2 158.13 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 85.74 155.61 moveto
+80.19 164.63 lineto
+90.16 161.05 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 85.74 155.61 moveto
+80.19 164.63 lineto
+90.16 161.05 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+99.5 157.4 moveto 73 (FR: [1,2,3]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 342.5 148 moveto
+342.5 278 lineto
+409.5 278 lineto
+409.5 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+361 261.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 342.5 252 moveto
+409.5 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+362 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 342.5 226 moveto
+409.5 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+356 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 342.5 200 moveto
+409.5 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+364.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 342.5 174 moveto
+409.5 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+350.5 157.4 moveto 51 (CCCAG) alignedtext
+grestore
+% AGG->CCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 258.12 176.46 moveto
+263.72 181.2 269.75 185.58 276 189 curveto
+293.23 198.43 314.12 204.18 332.35 207.68 curveto
+stroke
+0 1 1 edgecolor
+newpath 331.98 211.17 moveto
+342.43 209.45 lineto
+333.19 204.28 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 331.98 211.17 moveto
+342.43 209.45 lineto
+333.19 204.28 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+276 210.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% CAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 343 0 moveto
+343 130 lineto
+409 130 lineto
+409 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+360.5 113.4 moveto 31 (CAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 343 104 moveto
+409 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+362 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 343 78 moveto
+409 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+356 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 343 52 moveto
+409 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+364.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 343 26 moveto
+409 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+351 9.4 moveto 50 (TCAAG) alignedtext
+grestore
+% AGG->CAA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 258.17 127.51 moveto
+277.7 119.77 302.67 109.19 324 98 curveto
+327.32 96.26 330.71 94.37 334.08 92.42 curveto
+stroke
+0 1 1 edgecolor
+newpath 336.13 95.27 moveto
+342.91 87.13 lineto
+332.53 89.26 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 336.13 95.27 moveto
+342.91 87.13 lineto
+332.53 89.26 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+276 126.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% CCC->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 342.31 182.83 moveto
+336.46 178.47 330.24 174.34 324 171 curveto
+306.66 161.72 286.11 154.72 268.23 149.74 curveto
+stroke
+0 0 0 edgecolor
+newpath 268.9 146.29 moveto
+258.34 147.11 lineto
+267.1 153.06 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 268.9 146.29 moveto
+258.34 147.11 lineto
+267.1 153.06 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+277.5 176.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% CAA->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 342.6 64.22 moveto
+322.21 65.1 296.25 68.74 276 80 curveto
+272.47 81.96 269.08 84.27 265.84 86.82 curveto
+stroke
+0 0 0 edgecolor
+newpath 263.32 84.37 moveto
+258.1 93.59 lineto
+267.93 89.64 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 263.32 84.37 moveto
+258.1 93.59 lineto
+267.93 89.64 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+277.5 85.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 454 397
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/txt
new file mode 100755
index 0000000..fd16e48
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/SimpleTreePath/txt
@@ -0,0 +1,5 @@
+GAA {[{AAT:[3]}] [{AGG:[1,2]}] [] [] {5':[(2-0_0),(3-0_0),(1-0_0)], ~5':[]}GAAA 3.0x}
+CCC {[{AGG:[2]}] [] [] [] {5':[], ~5':[]}CCCAG 1.0x}
+CAA {[{AGG:[1]}] [] [] [] {5':[], ~5':[]}TCAAG 1.0x}
+AGG {[] [{GAA:[1,2,3]}] [] [{CAA:[1]}, {CCC:[2]}] {5':[], ~5':[]}AGGTT 2.0x}
+AAT {[] [] [] [{GAA:[1,2,3]}] {5':[], ~5':[]}AATCT 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-0.crc
new file mode 100644
index 0000000..ec92c92
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-1.crc
new file mode 100644
index 0000000..515e7fe
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-2.crc
new file mode 100644
index 0000000..fe2e1e3
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-3.crc
new file mode 100644
index 0000000..c6c8f33
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-4.crc
new file mode 100644
index 0000000..8410523
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-5.crc
new file mode 100644
index 0000000..d363a41
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-6.crc
new file mode 100644
index 0000000..d095f03
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-7.crc
new file mode 100644
index 0000000..7c790ba
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-0
new file mode 100755
index 0000000..9d42295
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-1
new file mode 100755
index 0000000..04cd710
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-2
new file mode 100755
index 0000000..d2917c1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-3
new file mode 100755
index 0000000..dbb11bf
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-4
new file mode 100755
index 0000000..9260ec5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-5
new file mode 100755
index 0000000..5a41a3d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-6
new file mode 100755
index 0000000..56baa21
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-7
new file mode 100755
index 0000000..b4a4cbd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/graphviz/result.ps
new file mode 100644
index 0000000..620f338
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/graphviz/result.ps
@@ -0,0 +1,463 @@
+%!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 244 322
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 208 286 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 81 moveto
+0 211 lineto
+56 211 lineto
+56 81 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 194.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 185 moveto
+56 185 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 168.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 159 moveto
+56 159 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 142.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 133 moveto
+56 133 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 116.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 107 moveto
+56 107 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 90.4 moveto 31 (GCC) alignedtext
+grestore
+% GCC->GCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 15.86 211.07 moveto
+17.59 221.7 21.64 229 28 229 curveto
+32.07 229 35.2 226 37.37 221.06 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 40.84 221.64 moveto
+40.14 211.07 lineto
+34.1 219.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 40.84 221.64 moveto
+40.14 211.07 lineto
+34.1 219.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+5 234.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 142 148 moveto
+142 278 lineto
+198 278 lineto
+198 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+155 261.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 142 252 moveto
+198 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 142 226 moveto
+198 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+150 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 142 200 moveto
+198 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 142 174 moveto
+198 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+150 157.4 moveto 40 (CCCA) alignedtext
+grestore
+% GCC->CCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.19 176.42 moveto
+61.72 181.16 67.76 185.6 74 189 curveto
+91.74 198.65 113.44 204.5 131.71 208.01 curveto
+stroke
+0 0 0 edgecolor
+newpath 131.29 211.48 moveto
+141.74 209.76 lineto
+132.5 204.59 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 131.29 211.48 moveto
+141.74 209.76 lineto
+132.5 204.59 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 210.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGG
+gsave
+0 0 0.75294 nodecolor
+newpath 140.5 0 moveto
+140.5 130 lineto
+199.5 130 lineto
+199.5 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 0 moveto
+140.5 130 lineto
+199.5 130 lineto
+199.5 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153.5 113.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 104 moveto
+199.5 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+151.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 78 moveto
+199.5 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+150 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 52 moveto
+199.5 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 26 moveto
+199.5 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148.5 9.4 moveto 43 (AAGG) alignedtext
+grestore
+% GCC->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 56.15 133.3 moveto
+75.15 124.41 100.56 111.85 122 99 curveto
+125.21 97.08 128.49 95.01 131.74 92.87 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 133.93 95.62 moveto
+140.26 87.12 lineto
+130.01 89.82 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 133.93 95.62 moveto
+140.26 87.12 lineto
+130.01 89.82 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 129.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CCC->GCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 141.82 181.25 moveto
+135.74 175.84 129.02 170.76 122 167 curveto
+104.87 157.82 83.93 152.65 66.16 149.74 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.52 146.25 moveto
+56.12 148.27 lineto
+65.51 153.18 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.52 146.25 moveto
+56.12 148.27 lineto
+65.51 153.18 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 172.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGG->GCC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 140.18 62.53 moveto
+120.07 62.28 93.72 64.81 74 77 curveto
+70.11 79.41 66.47 82.28 63.09 85.47 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 60.4 83.21 moveto
+56.09 92.89 lineto
+65.49 88.02 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 60.4 83.21 moveto
+56.09 92.89 lineto
+65.49 88.02 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 82.4 moveto 46 (FR: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 244 322
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/txt
new file mode 100755
index 0000000..91f439c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithMergeEdge/txt
@@ -0,0 +1,3 @@
+GCC {[{CCC:[1]}] [{AGG:[1]}] [{GCC:[1]}] [] {5':[], ~5':[]}GCC 2.0x}
+CCC {[] [] [] [{GCC:[1]}] {5':[], ~5':[]}CCCA 1.0x}
+AGG {[] [{GCC:[1]}] [] [] {5':[(1-0_0)], ~5':[]}AAGG 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-0.crc
new file mode 100644
index 0000000..685e76d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-1.crc
new file mode 100644
index 0000000..1642510
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-2.crc
new file mode 100644
index 0000000..a4558a5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-3.crc
new file mode 100644
index 0000000..6929e20
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-4.crc
new file mode 100644
index 0000000..28cd7c9
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-5.crc
new file mode 100644
index 0000000..f309839
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-6.crc
new file mode 100644
index 0000000..1a8490b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-7.crc
new file mode 100644
index 0000000..9694894
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-0
new file mode 100755
index 0000000..abdd9b2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-1
new file mode 100755
index 0000000..ec4b757
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-2
new file mode 100755
index 0000000..0de9e2a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-3
new file mode 100755
index 0000000..3e02883
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-4
new file mode 100755
index 0000000..65b143c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-5
new file mode 100755
index 0000000..1f31c39
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-6
new file mode 100755
index 0000000..bdcaa04
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-7
new file mode 100755
index 0000000..ea76e9c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/graphviz/result.ps
new file mode 100644
index 0000000..f6265db
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/graphviz/result.ps
@@ -0,0 +1,463 @@
+%!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 240 322
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 204 286 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 81 moveto
+0 211 lineto
+56 211 lineto
+56 81 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 194.4 moveto 31 (GCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 185 moveto
+56 185 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 168.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 159 moveto
+56 159 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 142.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 133 moveto
+56 133 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 116.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 107 moveto
+56 107 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12.5 90.4 moveto 31 (GCC) alignedtext
+grestore
+% GCC->GCC
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 15.86 211.07 moveto
+17.59 221.7 21.64 229 28 229 curveto
+32.07 229 35.2 226 37.37 221.06 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 40.84 221.64 moveto
+40.14 211.07 lineto
+34.1 219.77 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 40.84 221.64 moveto
+40.14 211.07 lineto
+34.1 219.77 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+5 234.4 moveto 46 (RF: [1]) alignedtext
+grestore
+% CCC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 148 moveto
+140 278 lineto
+196 278 lineto
+196 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153 261.4 moveto 30 (CCC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 252 moveto
+196 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 226 moveto
+196 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 200 moveto
+196 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 174 moveto
+196 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153 157.4 moveto 30 (CCC) alignedtext
+grestore
+% GCC->CCC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.2 176.39 moveto
+61.73 181.14 67.77 185.59 74 189 curveto
+91.17 198.4 112.12 204.21 129.88 207.75 curveto
+stroke
+0 0 0 edgecolor
+newpath 129.45 211.23 moveto
+139.91 209.59 lineto
+130.7 204.35 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 129.45 211.23 moveto
+139.91 209.59 lineto
+130.7 204.35 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 210.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AGG
+gsave
+0 0 0.75294 nodecolor
+newpath 140 0 moveto
+140 130 lineto
+196 130 lineto
+196 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 0 moveto
+140 130 lineto
+196 130 lineto
+196 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+151.5 113.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 104 moveto
+196 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+149.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 78 moveto
+196 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 52 moveto
+196 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140 26 moveto
+196 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+151.5 9.4 moveto 33 (AGG) alignedtext
+grestore
+% GCC->AGG
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 56.24 133.45 moveto
+75.27 124.61 100.69 112.07 122 99 curveto
+125.15 97.07 128.35 94.98 131.53 92.82 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 133.64 95.62 moveto
+139.82 87.01 lineto
+129.63 89.89 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 133.64 95.62 moveto
+139.82 87.01 lineto
+129.63 89.89 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 129.4 moveto 46 (FR: [1]) alignedtext
+grestore
+% CCC->GCC
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 139.88 180.06 moveto
+134.38 175.1 128.33 170.48 122 167 curveto
+104.97 157.64 84.04 152.45 66.25 149.57 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.59 146.09 moveto
+56.19 148.13 lineto
+65.6 153.02 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.59 146.09 moveto
+56.19 148.13 lineto
+65.6 153.02 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 172.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGG->GCC
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 139.65 62.68 moveto
+119.85 62.41 93.58 64.87 74 77 curveto
+70.11 79.41 66.47 82.29 63.09 85.48 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 60.41 83.22 moveto
+56.1 92.9 lineto
+65.5 88.03 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 60.41 83.22 moveto
+56.1 92.9 lineto
+65.5 88.03 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 82.4 moveto 46 (FR: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 240 322
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/txt
new file mode 100755
index 0000000..61f5ace
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/TandemRepeatWithUnmergeEdge/txt
@@ -0,0 +1,3 @@
+GCC {[{CCC:[1]}] [{AGG:[1]}] [{GCC:[1]}] [] {5':[], ~5':[]}GCC 2.0x}
+CCC {[] [] [] [{GCC:[1]}] {5':[], ~5':[]}CCC 1.0x}
+AGG {[] [{GCC:[1]}] [] [] {5':[(1-0_0)], ~5':[]}AGG 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-0.crc
new file mode 100644
index 0000000..3f1e9fe
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-1.crc
new file mode 100644
index 0000000..303fddf
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-2.crc
new file mode 100644
index 0000000..eff89d7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-3.crc
new file mode 100644
index 0000000..c4f9908
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-4.crc
new file mode 100644
index 0000000..44a5b21
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-5.crc
new file mode 100644
index 0000000..9424e90
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-6.crc
new file mode 100644
index 0000000..cde9fe1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-7.crc
new file mode 100644
index 0000000..1c4519e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-0
new file mode 100755
index 0000000..5cbc112
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-1
new file mode 100755
index 0000000..5d9af79
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-2
new file mode 100755
index 0000000..a6a2e5c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-3
new file mode 100755
index 0000000..b552e95
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-4
new file mode 100755
index 0000000..908a51c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-5
new file mode 100755
index 0000000..23dfa0d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-6
new file mode 100755
index 0000000..45d0b52
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-7
new file mode 100755
index 0000000..43fea74
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/graphviz/result.ps
new file mode 100644
index 0000000..d0d3422
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/graphviz/result.ps
@@ -0,0 +1,463 @@
+%!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 460 210
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 424 174 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+58 130 lineto
+58 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 113.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 104 moveto
+58 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+15 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 78 moveto
+58 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 52 moveto
+58 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+17.5 35.4 moveto 23 (3.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 26 moveto
+58 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 9.4 moveto 42 (GAAC) alignedtext
+grestore
+% CGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 170 0 moveto
+170 130 lineto
+226 130 lineto
+226 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+182.5 113.4 moveto 31 (CGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 170 104 moveto
+226 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+184 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 170 78 moveto
+226 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+178 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 170 52 moveto
+226 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+186.5 35.4 moveto 23 (6.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 170 26 moveto
+226 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+182.5 9.4 moveto 31 (CGA) alignedtext
+grestore
+% GAA->CGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 58.05 65 moveto
+86.08 65 128.68 65 159.52 65 curveto
+stroke
+0 1 1 edgecolor
+newpath 159.89 68.5 moveto
+169.89 65 lineto
+159.89 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 159.89 68.5 moveto
+169.89 65 lineto
+159.89 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+76.5 70.4 moveto 75 (RR: [1,2,3]) alignedtext
+grestore
+% CGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 169.51 48.99 moveto
+163.87 46.51 157.87 44.33 152 43 curveto
+119.06 35.53 108.97 35.67 76 43 curveto
+73.2 43.62 70.36 44.43 67.55 45.37 curveto
+stroke
+0 0 0 edgecolor
+newpath 66.22 42.13 moveto
+58.14 48.98 lineto
+68.73 48.67 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 66.22 42.13 moveto
+58.14 48.98 lineto
+68.73 48.67 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+78 48.4 moveto 72 (FF: [1,2,3]) alignedtext
+grestore
+% CGA->CGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 183.77 130.07 moveto
+185.81 140.7 190.55 148 198 148 curveto
+202.89 148 206.61 144.86 209.17 139.69 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 212.53 140.66 moveto
+212.23 130.07 lineto
+205.86 138.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 212.53 140.66 moveto
+212.23 130.07 lineto
+205.86 138.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+161.5 153.4 moveto 73 (RF: [1,2,3]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 336 0 moveto
+336 130 lineto
+416 130 lineto
+416 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 0 moveto
+336 130 lineto
+416 130 lineto
+416 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+361.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 104 moveto
+416 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+344 87.4 moveto 64 (5':[2,3,1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 78 moveto
+416 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+356 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 52 moveto
+416 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+364.5 35.4 moveto 23 (3.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 26 moveto
+416 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+351.5 9.4 moveto 49 (AAATC) alignedtext
+grestore
+% CGA->AAT
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 226.2 65 moveto
+252.83 65 293.36 65 325.55 65 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 325.68 68.5 moveto
+335.68 65 lineto
+325.68 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 325.68 68.5 moveto
+335.68 65 lineto
+325.68 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+244.5 70.4 moveto 73 (FR: [1,2,3]) alignedtext
+grestore
+% AAT->CGA
+gsave
+1 setlinewidth
+0.66667 1 1 edgecolor
+newpath 335.97 47.69 moveto
+330.04 45.75 323.93 44.09 318 43 curveto
+285.65 37.07 276.07 35.72 244 43 curveto
+241.34 43.6 238.65 44.38 235.99 45.28 curveto
+stroke
+0.66667 1 1 edgecolor
+newpath 234.53 42.09 moveto
+226.49 48.99 lineto
+237.08 48.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0.66667 1 1 edgecolor
+newpath 234.53 42.09 moveto
+226.49 48.99 lineto
+237.08 48.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+244.5 48.4 moveto 73 (FR: [1,2,3]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 460 210
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/txt
new file mode 100755
index 0000000..a2ed8cb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/ThreeDuplicate/txt
@@ -0,0 +1,3 @@
+GAA {[] [] [] [{CGA:[1,2,3]}] {5':[], ~5':[]}GAAC 3.0x}
+CGA {[{GAA:[1,2,3]}] [{AAT:[1,2,3]}] [{CGA:[1,2,3]}] [] {5':[], ~5':[]}CGA 6.0x}
+AAT {[] [{CGA:[1,2,3]}] [] [] {5':[(2-0_0),(3-0_0),(1-0_0)], ~5':[]}AAATC 3.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-0.crc
new file mode 100644
index 0000000..375b888
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-1.crc
new file mode 100644
index 0000000..4fe5d72
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-2.crc
new file mode 100644
index 0000000..fee28a5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-3.crc
new file mode 100644
index 0000000..4b0e20c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-4.crc
new file mode 100644
index 0000000..5b108a8
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-5.crc
new file mode 100644
index 0000000..90bcf70
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-6.crc
new file mode 100644
index 0000000..279d87b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-7.crc
new file mode 100644
index 0000000..2708984
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-0
new file mode 100755
index 0000000..07d419a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-1
new file mode 100755
index 0000000..534fd92
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-2
new file mode 100755
index 0000000..6f23171
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-3
new file mode 100755
index 0000000..6f00450
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-4
new file mode 100755
index 0000000..8eb7d4c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-5
new file mode 100755
index 0000000..c4536d5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-6
new file mode 100755
index 0000000..fbd9fe6
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-7
new file mode 100755
index 0000000..baf9bfd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/graphviz/result.ps
new file mode 100644
index 0000000..a96d025
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/graphviz/result.ps
@@ -0,0 +1,634 @@
+%!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 436 470
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 400 434 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATG
+gsave
+0 0 0.75294 nodecolor
+newpath .5 135 moveto
+.5 265 lineto
+65.5 265 lineto
+65.5 135 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 135 moveto
+.5 265 lineto
+65.5 265 lineto
+65.5 135 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+18 248.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 239 moveto
+65.5 239 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+19 222.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 213 moveto
+65.5 213 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 196.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 187 moveto
+65.5 187 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+21.5 170.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath .5 161 moveto
+65.5 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+18 144.4 moveto 30 (ATG) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 162.5 135 moveto
+162.5 265 lineto
+237.5 265 lineto
+237.5 135 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+184.5 248.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 162.5 239 moveto
+237.5 239 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+186 222.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 162.5 213 moveto
+237.5 213 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+180 196.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 162.5 187 moveto
+237.5 187 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+188.5 170.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 162.5 161 moveto
+237.5 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 144.4 moveto 59 (ATAGAA) alignedtext
+grestore
+% ATG->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 65.6 200 moveto
+90.17 200 124.27 200 151.96 200 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 152.23 203.5 moveto
+162.23 200 lineto
+152.23 196.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 152.23 203.5 moveto
+162.23 200 lineto
+152.23 196.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+84 205.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% AGA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 162.31 183 moveto
+156.29 180.93 150.06 179.15 144 178 curveto
+117.8 173.04 110.12 172.61 84 178 curveto
+81.03 178.61 78.01 179.41 75.01 180.33 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 73.83 177.04 moveto
+65.56 183.65 lineto
+76.15 183.64 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 73.83 177.04 moveto
+65.56 183.65 lineto
+76.15 183.64 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+91 183.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 296 moveto
+336 426 lineto
+392 426 lineto
+392 296 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+348 409.4 moveto 32 (AAG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 400 moveto
+392 400 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+350 383.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 374 moveto
+392 374 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+344 357.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 348 moveto
+392 348 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+352.5 331.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 322 moveto
+392 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+348 305.4 moveto 32 (AAG) alignedtext
+grestore
+% AGA->AAG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 220.94 265.04 moveto
+229.45 283.69 240.92 302.79 256 317 curveto
+275.3 335.18 303.11 346.27 325.68 352.77 curveto
+stroke
+0 0 0 edgecolor
+newpath 325.06 356.23 moveto
+335.63 355.45 lineto
+326.88 349.47 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 325.06 356.23 moveto
+335.63 355.45 lineto
+326.88 349.47 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+264.5 354.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 148 moveto
+336 278 lineto
+392 278 lineto
+392 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+348.5 261.4 moveto 31 (AAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 252 moveto
+392 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+350 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 226 moveto
+392 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+344 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 200 moveto
+392 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+352.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 336 174 moveto
+392 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+348.5 157.4 moveto 31 (AAC) alignedtext
+grestore
+% AGA->AAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 237.62 202.98 moveto
+264.01 205.07 299.16 207.86 325.69 209.96 curveto
+stroke
+0 0 0 edgecolor
+newpath 325.51 213.46 moveto
+335.76 210.76 lineto
+326.07 206.48 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 325.51 213.46 moveto
+335.76 210.76 lineto
+326.07 206.48 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+264.5 214.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 336 0 moveto
+336 130 lineto
+392 130 lineto
+392 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 0 moveto
+336 130 lineto
+392 130 lineto
+392 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+349.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 104 moveto
+392 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+345.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 78 moveto
+392 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+344 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 52 moveto
+392 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+352.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 336 26 moveto
+392 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+349.5 9.4 moveto 29 (AAT) alignedtext
+grestore
+% AGA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 237.62 169.03 moveto
+264.71 146.74 301.03 116.84 327.78 94.81 curveto
+stroke
+0 1 1 edgecolor
+newpath 330.26 97.31 moveto
+335.76 88.25 lineto
+325.81 91.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 330.26 97.31 moveto
+335.76 88.25 lineto
+325.81 91.9 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+263 158.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AAG->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 335.99 317.04 moveto
+330.39 309.39 324.29 301.74 318 295 curveto
+296.35 271.79 268.89 249.36 245.9 232.12 curveto
+stroke
+0 1 1 edgecolor
+newpath 247.78 229.15 moveto
+237.66 226.01 lineto
+243.61 234.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 247.78 229.15 moveto
+237.66 226.01 lineto
+243.61 234.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+256.5 300.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AAC->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 335.89 190.34 moveto
+330.26 186.91 324.17 183.89 318 182 curveto
+295.23 175.04 269.13 177.96 247.27 183.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 246.32 179.92 moveto
+237.56 185.87 lineto
+248.12 186.68 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 246.32 179.92 moveto
+237.56 185.87 lineto
+248.12 186.68 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+256.5 187.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AAT->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 335.98 62.89 moveto
+312.39 62.59 278.94 65.75 256 83 curveto
+241.5 93.91 230.58 109.54 222.42 125.84 curveto
+stroke
+0 0 0 edgecolor
+newpath 219.23 124.4 moveto
+218.17 134.94 lineto
+225.57 127.36 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 219.23 124.4 moveto
+218.17 134.94 lineto
+225.57 127.36 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+258 88.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 436 470
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/txt
new file mode 100755
index 0000000..37b642a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_6/txt
@@ -0,0 +1,5 @@
+ATG {[] [] [{AGA:[1,2]}] [] {5':[], ~5':[(2-0_0)]}ATG 1.0x}
+AGA {[{AAG:[2]}, {AAC:[1]}] [] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]}ATAGAA 2.0x}
+AAC {[] [] [] [{AGA:[1,2]}] {5':[], ~5':[]}AAC 1.0x}
+AAG {[] [] [] [{AGA:[1,2]}] {5':[], ~5':[]}AAG 1.0x}
+AAT {[{AGA:[1,2]}] [] [] [] {5':[(1-0_0)], ~5':[]}AAT 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-0.crc
new file mode 100644
index 0000000..1619c6f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-1.crc
new file mode 100644
index 0000000..10acdb4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-2.crc
new file mode 100644
index 0000000..5048777
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-3.crc
new file mode 100644
index 0000000..3c60dd5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-4.crc
new file mode 100644
index 0000000..4f81351
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-5.crc
new file mode 100644
index 0000000..9b27137
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-6.crc
new file mode 100644
index 0000000..ffce34c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-7.crc
new file mode 100644
index 0000000..96a2eba
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-0
new file mode 100755
index 0000000..d776323
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-1
new file mode 100755
index 0000000..434d52a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-2
new file mode 100755
index 0000000..0c66f67
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-3
new file mode 100755
index 0000000..4fa2097
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-4
new file mode 100755
index 0000000..0638d23
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-5
new file mode 100755
index 0000000..6e1486f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-6
new file mode 100755
index 0000000..c2038de
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-7
new file mode 100755
index 0000000..76c30f2
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/graphviz/result.ps
new file mode 100644
index 0000000..0cfff8f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/graphviz/result.ps
@@ -0,0 +1,634 @@
+%!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 438 470
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 402 434 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ACC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 135 moveto
+0 265 lineto
+56 265 lineto
+56 135 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+13 248.4 moveto 30 (ACC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 239 moveto
+56 239 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 222.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 213 moveto
+56 213 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 196.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 187 moveto
+56 187 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 170.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 161 moveto
+56 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 144.4 moveto 40 (AACC) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154.5 135 moveto
+154.5 265 lineto
+229.5 265 lineto
+229.5 135 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+176.5 248.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154.5 239 moveto
+229.5 239 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+178 222.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154.5 213 moveto
+229.5 213 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172 196.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154.5 187 moveto
+229.5 187 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+180.5 170.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154.5 161 moveto
+229.5 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162.5 144.4 moveto 59 (ATAGAA) alignedtext
+grestore
+% ACC->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.19 200 moveto
+80.34 200 115.62 200 144.17 200 curveto
+stroke
+0 1 1 edgecolor
+newpath 144.36 203.5 moveto
+154.36 200 lineto
+144.36 196.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 144.36 203.5 moveto
+154.36 200 lineto
+144.36 196.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 205.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AGA->ACC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 154.31 183 moveto
+148.29 180.93 142.06 179.15 136 178 curveto
+108.93 172.87 100.87 171.9 74 178 curveto
+71.34 178.6 68.65 179.38 65.99 180.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 177.09 moveto
+56.49 183.99 lineto
+67.08 183.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 177.09 moveto
+56.49 183.99 lineto
+67.08 183.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 183.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ATG
+gsave
+0 0 0.75294 nodecolor
+newpath 328.5 296 moveto
+328.5 426 lineto
+393.5 426 lineto
+393.5 296 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 328.5 296 moveto
+328.5 426 lineto
+393.5 426 lineto
+393.5 296 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+346 409.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 328.5 400 moveto
+393.5 400 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+347 383.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 328.5 374 moveto
+393.5 374 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+336.5 357.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 328.5 348 moveto
+393.5 348 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+349.5 331.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 328.5 322 moveto
+393.5 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+340.5 305.4 moveto 41 (ATGG) alignedtext
+grestore
+% AGA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 207.39 265.33 moveto
+215.86 288.63 228.72 313.23 248 330 curveto
+267.45 346.92 295.34 354.69 318.55 358.21 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 318.13 361.69 moveto
+328.5 359.52 lineto
+319.04 354.75 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 318.13 361.69 moveto
+328.5 359.52 lineto
+319.04 354.75 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+256 361.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 331.5 148 moveto
+331.5 278 lineto
+390.5 278 lineto
+390.5 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+344.5 261.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 331.5 252 moveto
+390.5 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+347 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 331.5 226 moveto
+390.5 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+341 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 331.5 200 moveto
+390.5 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+349.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 331.5 174 moveto
+390.5 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+339.5 157.4 moveto 43 (AAGG) alignedtext
+grestore
+% AGA->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 229.51 202.89 moveto
+256.75 204.98 293.56 207.81 321.3 209.95 curveto
+stroke
+0 0 0 edgecolor
+newpath 321.21 213.45 moveto
+331.45 210.73 lineto
+321.75 206.47 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 321.21 213.45 moveto
+331.45 210.73 lineto
+321.75 206.47 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+256.5 213.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 333 0 moveto
+333 130 lineto
+389 130 lineto
+389 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 333 0 moveto
+333 130 lineto
+389 130 lineto
+389 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+346.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 333 104 moveto
+389 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+342.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 333 78 moveto
+389 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+341 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 333 52 moveto
+389 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+349.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 333 26 moveto
+389 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+341 9.4 moveto 40 (AAAT) alignedtext
+grestore
+% AGA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 229.51 170.04 moveto
+257.92 147.34 296.72 116.35 324.8 93.91 curveto
+stroke
+0 1 1 edgecolor
+newpath 327.16 96.51 moveto
+332.79 87.54 lineto
+322.79 91.04 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 327.16 96.51 moveto
+332.79 87.54 lineto
+322.79 91.04 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+255 158.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ATG->AGA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 328.38 329.6 moveto
+322.28 323.75 315.95 317.68 310 312 curveto
+285.87 288.95 258.88 263.33 236.81 242.41 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 239.19 239.84 moveto
+229.52 235.5 lineto
+234.37 244.92 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 239.19 239.84 moveto
+229.52 235.5 lineto
+234.37 244.92 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+249 317.4 moveto 60 (RF: [1,2]) alignedtext
+grestore
+% AGG->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 331.24 191.25 moveto
+324.56 187.44 317.28 184.04 310 182 curveto
+287.16 175.6 261.15 178.52 239.38 183.71 curveto
+stroke
+0 1 1 edgecolor
+newpath 238.49 180.32 moveto
+229.7 186.23 lineto
+240.25 187.1 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 238.49 180.32 moveto
+229.7 186.23 lineto
+240.25 187.1 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+248.5 187.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AAT->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 332.65 63.81 moveto
+307.93 64.22 272.32 68.46 248 87 curveto
+234.88 97.01 224.63 110.91 216.7 125.56 curveto
+stroke
+0 0 0 edgecolor
+newpath 213.45 124.24 moveto
+212.06 134.74 lineto
+219.69 127.4 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 213.45 124.24 moveto
+212.06 134.74 lineto
+219.69 127.4 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+250 92.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 438 470
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/txt
new file mode 100755
index 0000000..30e1218
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_7/txt
@@ -0,0 +1,5 @@
+ACC {[] [] [] [{AGA:[1,2]}] {5':[], ~5':[]}AACC 1.0x}
+ATG {[] [] [{AGA:[1,2]}] [] {5':[], ~5':[(2-1_0)]}ATGG 1.0x}
+AGA {[{AGG:[2]}, {ACC:[1]}] [] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]}ATAGAA 2.0x}
+AGG {[] [] [] [{AGA:[1,2]}] {5':[], ~5':[]}AAGG 1.0x}
+AAT {[{AGA:[1,2]}] [] [] [] {5':[(1-0_0)], ~5':[]}AAAT 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-0.crc
new file mode 100644
index 0000000..ca10c2d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-1.crc
new file mode 100644
index 0000000..7ecd29d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-2.crc
new file mode 100644
index 0000000..a67937c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-3.crc
new file mode 100644
index 0000000..468af1d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-4.crc
new file mode 100644
index 0000000..10fc64a
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-5.crc
new file mode 100644
index 0000000..bbe2087
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-6.crc
new file mode 100644
index 0000000..2674297
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-7.crc
new file mode 100644
index 0000000..00ce445
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-0
new file mode 100755
index 0000000..d1dae35
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-1
new file mode 100755
index 0000000..c5749e7
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-2
new file mode 100755
index 0000000..59fee64
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-3
new file mode 100755
index 0000000..0088a86
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-4
new file mode 100755
index 0000000..acbbf34
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-5
new file mode 100755
index 0000000..b8d9ef4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-6
new file mode 100755
index 0000000..7043d33
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-7
new file mode 100755
index 0000000..38ccdff
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/graphviz/result.ps
new file mode 100644
index 0000000..ccb7045
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/graphviz/result.ps
@@ -0,0 +1,450 @@
+%!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 250 322
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 214 286 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 81 moveto
+0 211 lineto
+56 211 lineto
+56 81 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 194.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 185 moveto
+56 185 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 168.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 159 moveto
+56 159 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 142.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 133 moveto
+56 133 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 116.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 107 moveto
+56 107 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 90.4 moveto 39 (ATAG) alignedtext
+grestore
+% ATG
+gsave
+0 0 0.75294 nodecolor
+newpath 140.5 148 moveto
+140.5 278 lineto
+205.5 278 lineto
+205.5 148 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 148 moveto
+140.5 278 lineto
+205.5 278 lineto
+205.5 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158 261.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 252 moveto
+205.5 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+159 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 226 moveto
+205.5 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148.5 209.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 200 moveto
+205.5 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+161.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 140.5 174 moveto
+205.5 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158 157.4 moveto 30 (ATG) alignedtext
+grestore
+% ATA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.17 176.46 moveto
+61.7 181.19 67.75 185.63 74 189 curveto
+91.25 198.31 112.13 204.06 130.26 207.58 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 129.82 211.06 moveto
+140.28 209.36 lineto
+131.05 204.17 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 129.82 211.06 moveto
+140.28 209.36 lineto
+131.05 204.17 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 210.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 145 0 moveto
+145 130 lineto
+201 130 lineto
+201 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 145 0 moveto
+145 130 lineto
+201 130 lineto
+201 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 145 104 moveto
+201 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 145 78 moveto
+201 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+153 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 145 52 moveto
+201 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+161.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 145 26 moveto
+201 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158.5 9.4 moveto 29 (AAT) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.04 133.11 moveto
+74.98 124.12 100.38 111.55 122 99 curveto
+126.72 96.26 131.59 93.26 136.37 90.2 curveto
+stroke
+0 1 1 edgecolor
+newpath 138.34 93.09 moveto
+144.81 84.7 lineto
+134.52 87.23 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 138.34 93.09 moveto
+144.81 84.7 lineto
+134.52 87.23 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 128.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% ATG->ATA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 140.27 179.17 moveto
+134.53 174.55 128.36 170.28 122 167 curveto
+104.74 158.08 83.78 152.93 66.04 149.97 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 66.42 146.49 moveto
+56.02 148.46 lineto
+65.39 153.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 66.42 146.49 moveto
+56.02 148.46 lineto
+65.39 153.41 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75 172.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 144.92 62.38 moveto
+123.9 61.77 95.23 63.93 74 77 curveto
+70.1 79.4 66.46 82.27 63.08 85.45 curveto
+stroke
+0 0 0 edgecolor
+newpath 60.4 83.19 moveto
+56.07 92.86 lineto
+65.48 88 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 60.4 83.19 moveto
+56.07 92.86 lineto
+65.48 88 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 82.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 250 322
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/txt
new file mode 100755
index 0000000..73eff85
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_FR/txt
@@ -0,0 +1,3 @@
+ATA {[] [] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]}ATAG 2.0x}
+ATG {[] [] [{ATA:[2]}] [] {5':[], ~5':[(2-0_0)]}ATG 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]}AAT 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-0.crc
new file mode 100644
index 0000000..74bea72
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-1.crc
new file mode 100644
index 0000000..fa59959
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-2.crc
new file mode 100644
index 0000000..0dc184d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-3.crc
new file mode 100644
index 0000000..e029463
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-4.crc
new file mode 100644
index 0000000..9c2b658
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-5.crc
new file mode 100644
index 0000000..48aba4e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-6.crc
new file mode 100644
index 0000000..7f83146
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-7.crc
new file mode 100644
index 0000000..6b743cb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-0
new file mode 100755
index 0000000..eed3dfd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-1
new file mode 100755
index 0000000..c1c34ec
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-2
new file mode 100755
index 0000000..17ac93b
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-3
new file mode 100755
index 0000000..e8e1547
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-4
new file mode 100755
index 0000000..c59d4ee
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-5
new file mode 100755
index 0000000..a34166d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-6
new file mode 100755
index 0000000..1c1e3f5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-7
new file mode 100755
index 0000000..6f635cb
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/graphviz/result.ps
new file mode 100644
index 0000000..c832573
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/graphviz/result.ps
@@ -0,0 +1,450 @@
+%!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 400 174
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 364 138 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+0 0 0.75294 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 0 moveto
+0 130 lineto
+56 130 lineto
+56 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 113.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 104 moveto
+56 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+9.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 78 moveto
+56 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 52 moveto
+56 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 26 moveto
+56 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 9.4 moveto 28 (ATA) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 150 0 moveto
+150 130 lineto
+206 130 lineto
+206 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162.5 113.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 150 104 moveto
+206 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+164 87.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 150 78 moveto
+206 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 150 52 moveto
+206 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+166.5 35.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 150 26 moveto
+206 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+158 9.4 moveto 40 (TAGA) alignedtext
+grestore
+% ATA->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.21 65 moveto
+79.78 65 113.62 65 139.65 65 curveto
+stroke
+0 0 0 edgecolor
+newpath 139.91 68.5 moveto
+149.91 65 lineto
+139.91 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 139.91 68.5 moveto
+149.91 65 lineto
+139.91 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 70.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% AGA->ATA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 149.51 48.99 moveto
+143.87 46.51 137.87 44.33 132 43 curveto
+106.86 37.3 99.14 37.3 74 43 curveto
+71.34 43.6 68.65 44.38 65.99 45.28 curveto
+stroke
+0 1 1 edgecolor
+newpath 64.53 42.09 moveto
+56.49 48.99 lineto
+67.08 48.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 64.53 42.09 moveto
+56.49 48.99 lineto
+67.08 48.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+79 48.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GTA
+gsave
+0 0 0.75294 nodecolor
+newpath 300 0 moveto
+300 130 lineto
+356 130 lineto
+356 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 300 0 moveto
+300 130 lineto
+356 130 lineto
+356 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+313.5 113.4 moveto 29 (GTA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 300 104 moveto
+356 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+309.5 87.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 300 78 moveto
+356 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+308 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 300 52 moveto
+356 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+316.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 300 26 moveto
+356 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+313.5 9.4 moveto 29 (GTA) alignedtext
+grestore
+% AGA->GTA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 206.21 65 moveto
+229.78 65 263.62 65 289.65 65 curveto
+stroke
+0 1 1 edgecolor
+newpath 289.91 68.5 moveto
+299.91 65 lineto
+289.91 61.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 289.91 68.5 moveto
+299.91 65 lineto
+289.91 61.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+229 70.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% GTA->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 299.83 51.35 moveto
+294.06 49.13 287.93 47.18 282 46 curveto
+256.72 40.98 249.28 40.98 224 46 curveto
+221.31 46.53 218.58 47.23 215.87 48.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 214.5 44.8 moveto
+206.17 51.35 lineto
+216.76 51.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 214.5 44.8 moveto
+206.17 51.35 lineto
+216.76 51.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+224 51.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 400 174
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/txt
new file mode 100755
index 0000000..a2d42d5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/head_RF/txt
@@ -0,0 +1,3 @@
+ATA {[{AGA:[1,2]}] [] [] [] {5':[(1-0_0)], ~5':[]}ATA 1.0x}
+GTA {[{AGA:[1,2]}] [] [] [] {5':[(2-0_0)], ~5':[]}GTA 1.0x}
+AGA {[] [] [] [{GTA:[2]}, {ATA:[1]}] {5':[], ~5':[]}TAGA 2.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-0.crc
new file mode 100644
index 0000000..f29c218
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-1.crc
new file mode 100644
index 0000000..4d182c1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-2.crc
new file mode 100644
index 0000000..5aab54e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-3.crc
new file mode 100644
index 0000000..b87b5f4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-4.crc
new file mode 100644
index 0000000..36d0089
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-5.crc
new file mode 100644
index 0000000..ea3e93d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-6.crc
new file mode 100644
index 0000000..fc5073f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-7.crc
new file mode 100644
index 0000000..3eb114e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-0
new file mode 100755
index 0000000..da907fc
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-1
new file mode 100755
index 0000000..50c512e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-2
new file mode 100755
index 0000000..5fcdf6c
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-3
new file mode 100755
index 0000000..0f9d2d5
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-4
new file mode 100755
index 0000000..fa5be33
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-5
new file mode 100755
index 0000000..557b480
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-6
new file mode 100755
index 0000000..75202fd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-7
new file mode 100755
index 0000000..252a167
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/graphviz/result.ps
new file mode 100644
index 0000000..e781700
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/graphviz/result.ps
@@ -0,0 +1,636 @@
+%!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 264 618
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 228 582 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% ATA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 226 moveto
+0 356 lineto
+56 356 lineto
+56 226 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 339.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 330 moveto
+56 330 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 313.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 304 moveto
+56 304 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 287.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 278 moveto
+56 278 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 261.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 252 moveto
+56 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8.5 235.4 moveto 39 (ATAG) alignedtext
+grestore
+% AGG
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 444 moveto
+159 574 lineto
+215 574 lineto
+215 444 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 557.4 moveto 33 (AGG) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 548 moveto
+215 548 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+173 531.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 522 moveto
+215 522 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+167 505.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 496 moveto
+215 496 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+175.5 479.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 470 moveto
+215 470 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+170.5 453.4 moveto 33 (AGG) alignedtext
+grestore
+% ATA->AGG
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 40.16 356.02 moveto
+48.66 395.63 60.82 441.51 74 457 curveto
+93.19 479.55 124.23 492.86 148.94 500.36 curveto
+stroke
+0 0 0 edgecolor
+newpath 148.16 503.78 moveto
+158.74 503.14 lineto
+150.07 497.05 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 148.16 503.78 moveto
+158.74 503.14 lineto
+150.07 497.05 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 500.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 296 moveto
+159 426 lineto
+215 426 lineto
+215 296 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+171.5 409.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 400 moveto
+215 400 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+173 383.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 374 moveto
+215 374 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+167 357.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 348 moveto
+215 348 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+175.5 331.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 159 322 moveto
+215 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+171.5 305.4 moveto 31 (AGA) alignedtext
+grestore
+% ATA->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 56.09 323.99 moveto
+61.6 328.95 67.65 333.55 74 337 curveto
+97.08 349.53 126.11 355.52 148.97 358.38 curveto
+stroke
+0 0 0 edgecolor
+newpath 148.67 361.87 moveto
+159 359.49 lineto
+149.44 354.91 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 148.67 361.87 moveto
+159 359.49 lineto
+149.44 354.91 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 361.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% ATG
+gsave
+0 0 0.75294 nodecolor
+newpath 154.5 148 moveto
+154.5 278 lineto
+219.5 278 lineto
+219.5 148 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154.5 148 moveto
+154.5 278 lineto
+219.5 278 lineto
+219.5 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172 261.4 moveto 30 (ATG) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154.5 252 moveto
+219.5 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+173 235.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154.5 226 moveto
+219.5 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+162.5 209.4 moveto 49 (~5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154.5 200 moveto
+219.5 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+175.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 154.5 174 moveto
+219.5 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172 157.4 moveto 30 (ATG) alignedtext
+grestore
+% ATA->ATG
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 56.06 277.23 moveto
+80.73 265.13 116.98 247.35 145.09 233.56 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 146.84 236.6 moveto
+154.28 229.05 lineto
+143.76 230.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 146.84 236.6 moveto
+154.28 229.05 lineto
+143.76 230.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82 272.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT
+gsave
+0 0 0.75294 nodecolor
+newpath 159 0 moveto
+159 130 lineto
+215 130 lineto
+215 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 159 0 moveto
+159 130 lineto
+215 130 lineto
+215 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172.5 113.4 moveto 29 (AAT) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 159 104 moveto
+215 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+168.5 87.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 159 78 moveto
+215 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+167 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 159 52 moveto
+215 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+175.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 159 26 moveto
+215 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+172.5 9.4 moveto 29 (AAT) alignedtext
+grestore
+% ATA->AAT
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 50.86 225.87 moveto
+57.35 210.91 65.11 195.45 74 182 curveto
+95.63 149.25 127.07 117.59 151.3 95.47 curveto
+stroke
+0 1 1 edgecolor
+newpath 153.8 97.93 moveto
+158.89 88.64 lineto
+149.12 92.73 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 153.8 97.93 moveto
+158.89 88.64 lineto
+149.12 92.73 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+81 187.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGG->ATA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 158.9 464.75 moveto
+151.84 454.64 143.98 444.19 136 435 curveto
+111.45 406.75 96.86 407.64 74 378 curveto
+69.55 372.23 65.31 365.97 61.33 359.55 curveto
+stroke
+0 1 1 edgecolor
+newpath 64.19 357.51 moveto
+56.07 350.71 lineto
+58.18 361.09 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 64.19 357.51 moveto
+56.07 350.71 lineto
+58.18 361.09 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 440.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% AGA->ATA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 158.76 330.92 moveto
+151.82 324.9 144.05 319.15 136 315 curveto
+114.44 303.88 87.86 297.89 66.46 294.67 curveto
+stroke
+0 1 1 edgecolor
+newpath 66.8 291.19 moveto
+56.42 293.31 lineto
+65.86 298.12 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 66.8 291.19 moveto
+56.42 293.31 lineto
+65.86 298.12 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74.5 320.4 moveto 61 (RR: [1,2]) alignedtext
+grestore
+% ATG->ATA
+gsave
+1 setlinewidth
+0.33333 1 1 edgecolor
+newpath 154.34 206 moveto
+130.49 202.67 98.22 202.02 74 216 curveto
+70.21 218.19 66.68 220.83 63.42 223.8 curveto
+stroke
+0.33333 1 1 edgecolor
+newpath 60.68 221.6 moveto
+56.27 231.24 lineto
+65.72 226.45 lineto
+closepath fill
+1 setlinewidth
+solid
+0.33333 1 1 edgecolor
+newpath 60.68 221.6 moveto
+56.27 231.24 lineto
+65.72 226.45 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82 221.4 moveto 46 (RF: [2]) alignedtext
+grestore
+% AAT->ATA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 158.94 63.07 moveto
+133.37 62.93 96.28 67.04 74 89 curveto
+55.99 106.74 43.89 165.9 36.64 215.65 curveto
+stroke
+0 0 0 edgecolor
+newpath 33.14 215.39 moveto
+35.21 225.78 lineto
+40.07 216.37 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 33.14 215.39 moveto
+35.21 225.78 lineto
+40.07 216.37 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+82.5 94.4 moveto 45 (FF: [1]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 264 618
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/txt
new file mode 100755
index 0000000..9bc2d31
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_FR/txt
@@ -0,0 +1,5 @@
+ATA {[{AGG:[2]}, {AGA:[1]}] [] [{ATG:[2]}] [{AAT:[1]}] {5':[], ~5':[]}ATAG 2.0x}
+ATG {[] [] [{ATA:[2]}] [] {5':[], ~5':[(2-0_0)]}ATG 1.0x}
+AGA {[] [] [] [{ATA:[1,2]}] {5':[], ~5':[]}AGA 1.0x}
+AGG {[] [] [] [{ATA:[1,2]}] {5':[], ~5':[]}AGG 1.0x}
+AAT {[{ATA:[1]}] [] [] [] {5':[(1-0_0)], ~5':[]}AAT 1.0x}
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/.txt.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/.txt.crc
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/.txt.crc
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-0.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-0.crc
new file mode 100644
index 0000000..5a4c08e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-0.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-1.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-1.crc
new file mode 100644
index 0000000..ebc3f8e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-1.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-2.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-2.crc
new file mode 100644
index 0000000..427ca55
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-2.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-3.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-3.crc
new file mode 100644
index 0000000..e0dac79
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-3.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-4.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-4.crc
new file mode 100644
index 0000000..3979d84
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-4.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-5.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-5.crc
new file mode 100644
index 0000000..350c72e
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-5.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-6.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-6.crc
new file mode 100644
index 0000000..f163e38
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-6.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-7.crc b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-7.crc
new file mode 100644
index 0000000..561f4b1
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/.part-7.crc
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-0 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-0
new file mode 100755
index 0000000..f790d1f
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-0
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-1 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-1
new file mode 100755
index 0000000..e985487
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-1
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-2 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-2
new file mode 100755
index 0000000..999bd13
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-2
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-3 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-3
new file mode 100755
index 0000000..267ecf4
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-3
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-4 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-4
new file mode 100755
index 0000000..b546bd0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-4
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-5 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-5
new file mode 100755
index 0000000..8f14717
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-5
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-6 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-6
new file mode 100755
index 0000000..fb897ac
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-6
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-7 b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-7
new file mode 100755
index 0000000..9501a0d
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/bin/part-7
Binary files differ
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/graphviz/result.ps b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/graphviz/result.ps
new file mode 100644
index 0000000..750e1cd
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/graphviz/result.ps
@@ -0,0 +1,636 @@
+%!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 390 470
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 354 434 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+% GAA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 135 moveto
+0 265 lineto
+56 265 lineto
+56 135 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 248.4 moveto 32 (GAA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 239 moveto
+56 239 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 222.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 213 moveto
+56 213 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 196.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 187 moveto
+56 187 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 170.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 0 161 moveto
+56 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+12 144.4 moveto 32 (GAA) alignedtext
+grestore
+% AGA
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 135 moveto
+140 265 lineto
+196 265 lineto
+196 135 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+152.5 248.4 moveto 31 (AGA) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 239 moveto
+196 239 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+154 222.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 213 moveto
+196 213 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 196.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 187 moveto
+196 187 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+156.5 170.4 moveto 23 (2.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 140 161 moveto
+196 161 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+148 144.4 moveto 40 (TAGA) alignedtext
+grestore
+% GAA->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 56.33 200 moveto
+77.39 200 106.37 200 129.53 200 curveto
+stroke
+0 1 1 edgecolor
+newpath 129.71 203.5 moveto
+139.71 200 lineto
+129.71 196.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 129.71 203.5 moveto
+139.71 200 lineto
+129.71 196.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+74 205.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% AGA->GAA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 139.51 183.99 moveto
+133.87 181.51 127.87 179.33 122 178 curveto
+101.2 173.28 94.8 173.28 74 178 curveto
+71.34 178.6 68.65 179.38 65.99 180.28 curveto
+stroke
+0 0 0 edgecolor
+newpath 64.53 177.09 moveto
+56.49 183.99 lineto
+67.08 183.61 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 64.53 177.09 moveto
+56.49 183.99 lineto
+67.08 183.61 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+75.5 183.4 moveto 45 (FF: [1]) alignedtext
+grestore
+% GAC
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 296 moveto
+290 426 lineto
+346 426 lineto
+346 296 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+302.5 409.4 moveto 31 (GAC) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 400 moveto
+346 400 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304 383.4 moveto 28 (5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 374 moveto
+346 374 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 357.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 348 moveto
+346 348 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 331.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+0 0 0 nodecolor
+newpath 290 322 moveto
+346 322 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+302.5 305.4 moveto 31 (GAC) alignedtext
+grestore
+% AGA->GAC
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 178.41 265.26 moveto
+185.09 288.41 196.04 312.93 214 330 curveto
+231.68 346.81 258.08 354.55 279.86 358.09 curveto
+stroke
+0 0 0 edgecolor
+newpath 279.42 361.56 moveto
+289.81 359.47 lineto
+280.39 354.63 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 279.42 361.56 moveto
+289.81 359.47 lineto
+280.39 354.63 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+220.5 361.4 moveto 45 (FF: [2]) alignedtext
+grestore
+% ATA
+gsave
+0 0 0.75294 nodecolor
+newpath 290 148 moveto
+290 278 lineto
+346 278 lineto
+346 148 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 148 moveto
+290 278 lineto
+346 278 lineto
+346 148 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304 261.4 moveto 28 (ATA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 252 moveto
+346 252 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+299.5 235.4 moveto 37 (5':[1]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 226 moveto
+346 226 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 209.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 200 moveto
+346 200 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 183.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 174 moveto
+346 174 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+304 157.4 moveto 28 (ATA) alignedtext
+grestore
+% AGA->ATA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 196.21 202.45 moveto
+219.78 204.49 253.62 207.42 279.65 209.68 curveto
+stroke
+0 1 1 edgecolor
+newpath 279.65 213.19 moveto
+289.91 210.57 lineto
+280.25 206.22 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 279.65 213.19 moveto
+289.91 210.57 lineto
+280.25 206.22 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+219 213.4 moveto 48 (RR: [1]) alignedtext
+grestore
+% GTA
+gsave
+0 0 0.75294 nodecolor
+newpath 290 0 moveto
+290 130 lineto
+346 130 lineto
+346 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 0 moveto
+290 130 lineto
+346 130 lineto
+346 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+303.5 113.4 moveto 29 (GTA) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 104 moveto
+346 104 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+299.5 87.4 moveto 37 (5':[2]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 78 moveto
+346 78 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+298 61.4 moveto 40 (~5':[]) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 52 moveto
+346 52 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 35.4 moveto 23 (1.0) alignedtext
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 290 26 moveto
+346 26 lineto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+303.5 9.4 moveto 29 (GTA) alignedtext
+grestore
+% AGA->GTA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 196.44 171.63 moveto
+202.19 166.05 208.24 160.29 214 155 curveto
+239.07 131.98 246.27 127.28 272 105 curveto
+275.24 102.19 278.61 99.28 281.98 96.35 curveto
+stroke
+0 1 1 edgecolor
+newpath 284.54 98.76 moveto
+289.8 89.56 lineto
+279.95 93.47 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 284.54 98.76 moveto
+289.8 89.56 lineto
+279.95 93.47 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+219 160.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% GAC->AGA
+gsave
+1 setlinewidth
+0 1 1 edgecolor
+newpath 289.91 330.85 moveto
+265.33 304.47 229.52 266.03 203.07 237.64 curveto
+stroke
+0 1 1 edgecolor
+newpath 205.59 235.21 moveto
+196.21 230.28 lineto
+200.47 239.99 lineto
+closepath fill
+1 setlinewidth
+solid
+0 1 1 edgecolor
+newpath 205.59 235.21 moveto
+196.21 230.28 lineto
+200.47 239.99 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+219 313.4 moveto 48 (RR: [2]) alignedtext
+grestore
+% ATA->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 289.97 189.62 moveto
+284.33 186.07 278.22 182.95 272 181 curveto
+247.4 173.29 239.28 175.98 214 181 curveto
+211.31 181.53 208.58 182.23 205.87 183.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 204.5 179.8 moveto
+196.17 186.35 lineto
+206.76 186.42 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 204.5 179.8 moveto
+196.17 186.35 lineto
+206.76 186.42 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 186.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+% GTA->AGA
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 289.74 64.07 moveto
+266.87 64.8 235.1 69.36 214 87 curveto
+201.94 97.09 193 110.82 186.39 125.25 curveto
+stroke
+0 0 0 edgecolor
+newpath 183.03 124.22 moveto
+182.38 134.8 lineto
+189.48 126.94 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 183.03 124.22 moveto
+182.38 134.8 lineto
+189.48 126.94 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+214 92.4 moveto 58 (FF: [1,2]) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 390 470
+end
+restore
+%%EOF
diff --git a/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/txt b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/txt
new file mode 100755
index 0000000..3ac40a0
--- /dev/null
+++ b/genomix/genomix-pregelix/data/result/PathMerge/P4ForMergeGraph/twohead_RF/txt
@@ -0,0 +1,5 @@
+GAA {[] [] [] [{AGA:[1]}] {5':[], ~5':[]}GAA 1.0x}
+GAC {[] [] [] [{AGA:[2]}] {5':[], ~5':[]}GAC 1.0x}
+ATA {[{AGA:[1,2]}] [] [] [] {5':[(1-0_0)], ~5':[]}ATA 1.0x}
+GTA {[{AGA:[1,2]}] [] [] [] {5':[(2-0_0)], ~5':[]}GTA 1.0x}
+AGA {[{GAA:[1]}, {GAC:[2]}] [] [] [{GTA:[2]}, {ATA:[1]}] {5':[], ~5':[]}TAGA 2.0x}
diff --git a/genomix/genomix-pregelix/graph/BridgePath b/genomix/genomix-pregelix/graph/BridgePath
new file mode 100644
index 0000000..fd735ea
--- /dev/null
+++ b/genomix/genomix-pregelix/graph/BridgePath
@@ -0,0 +1,2 @@
+AAATCGAAC
+AAATCTAAC
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/graph/CyclePath b/genomix/genomix-pregelix/graph/CyclePath
new file mode 100644
index 0000000..a487e90
--- /dev/null
+++ b/genomix/genomix-pregelix/graph/CyclePath
@@ -0,0 +1 @@
+TCTGGGCTCTG
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/graph/RingPath b/genomix/genomix-pregelix/graph/RingPath
new file mode 100644
index 0000000..eb2ed5d
--- /dev/null
+++ b/genomix/genomix-pregelix/graph/RingPath
@@ -0,0 +1,2 @@
+TCTGGGCTCTG
+CCTGGGCTCTG
diff --git a/genomix/genomix-pregelix/graph/SimplePath b/genomix/genomix-pregelix/graph/SimplePath
new file mode 100644
index 0000000..67d4b62
--- /dev/null
+++ b/genomix/genomix-pregelix/graph/SimplePath
@@ -0,0 +1,3 @@
+CCGCATGAG
+TCTCAAATC
+TAACGGGAC
diff --git a/genomix/genomix-pregelix/graph/TreePath b/genomix/genomix-pregelix/graph/TreePath
new file mode 100644
index 0000000..a7627a8
--- /dev/null
+++ b/genomix/genomix-pregelix/graph/TreePath
@@ -0,0 +1,3 @@
+CGTTACCCATGG
+CGTTAAGCACGGCCTGT
+CGTTAAGCACTAGTGAC
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/pom.xml b/genomix/genomix-pregelix/pom.xml
new file mode 100644
index 0000000..9c43ae1
--- /dev/null
+++ b/genomix/genomix-pregelix/pom.xml
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>edu.uci.ics.pregelix</groupId>
+ <artifactId>genomix-pregelix</artifactId>
+ <packaging>jar</packaging>
+ <version>0.2.10-SNAPSHOT</version>
+ <name>genomix-pregelix</name>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+
+ <profiles>
+ <profile>
+ <id>macosx</id>
+ <activation>
+ <os>
+ <name>mac os x</name>
+ </os>
+ <jdk>1.7</jdk>
+ </activation>
+ <properties>
+ <jvm.extraargs>-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.KQueueSelectorProvider</jvm.extraargs>
+ </properties>
+ </profile>
+ </profiles>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.7</source>
+ <target>1.7</target>
+ <fork>true</fork>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>jar-with-dependencies</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-my-jar-with-dependencies</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>appassembler-maven-plugin</artifactId>
+ <version>1.3</version>
+ <executions>
+ <execution>
+ <configuration>
+ <programs>
+ <program>
+ <mainClass>edu.uci.ics.genomix.pregelix.example.Client</mainClass>
+ <name>pregelix</name>
+ </program>
+ </programs>
+ <repositoryLayout>flat</repositoryLayout>
+ <repositoryName>lib</repositoryName>
+ </configuration>
+ <phase>package</phase>
+ <goals>
+ <goal>assemble</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.7.2</version>
+ <configuration>
+ <forkMode>pertest</forkMode>
+ <argLine>-enableassertions -Xmx2047m -Dfile.encoding=UTF-8
+ -Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
+ <includes>
+ <include>**/*TestSuite.java</include>
+ <include>**/*Test.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>.</directory>
+ <includes>
+ <include>teststore*</include>
+ <include>edu*</include>
+ <include>actual*</include>
+ <include>build*</include>
+ <include>expect*</include>
+ <include>ClusterController*</include>
+ <include>edu.uci.*</include>
+ </includes>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>pregelix-core</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>genomix-data</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-dataflow-std</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-api</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-dataflow-common</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-data-std</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-control-cc</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-control-nc</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.kenai.nbpwr</groupId>
+ <artifactId>org-apache-commons-io</artifactId>
+ <version>1.3.1-201002241208</version>
+ <type>nbm</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks.examples</groupId>
+ <artifactId>hyracks-integration-tests</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-ipc</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-core</artifactId>
+ <version>0.20.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hadoop</groupId>
+ <artifactId>hadoop-test</artifactId>
+ <version>0.20.2</version>
+ </dependency>
+ <dependency>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>hyracks-hdfs-core</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+ <scm>
+ <connection>scm:svn:https://hyracks.googlecode.com/svn/trunk/fullstack/pregelix</connection>
+ <developerConnection>scm:svn:https://hyracks.googlecode.com/svn/trunk/fullstack/pregelix</developerConnection>
+ <url>http://code.google.com/p/hyracks/source/browse/#svn/trunk/fullstack/pregelix</url>
+ </scm>
+
+ <distributionManagement>
+ <repository>
+ <id>hyracks-releases</id>
+ <url>http://obelix.ics.uci.edu/nexus/content/repositories/hyracks-releases/</url>
+ </repository>
+ <snapshotRepository>
+ <id>hyracks-snapshots</id>
+ <url>http://obelix.ics.uci.edu/nexus/content/repositories/hyracks-snapshots/</url>
+ </snapshotRepository>
+ </distributionManagement>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-changelog-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <repositories>
+ <repository>
+ <id>hyracks-public</id>
+ <url>http://obelix.ics.uci.edu/nexus/content/groups/hyracks-public/</url>
+ </repository>
+ <repository>
+ <id>jboss-public</id>
+ <url>https://repository.jboss.org/nexus/content/groups/public/</url>
+ </repository>
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>hyracks-public</id>
+ <url>http://obelix.ics.uci.edu/nexus/content/groups/hyracks-public/</url>
+ <releases>
+ <updatePolicy>always</updatePolicy>
+ </releases>
+ </pluginRepository>
+ </pluginRepositories>
+</project>
+
+
diff --git a/genomix/genomix-pregelix/src/main/assembly/binary-assembly.xml b/genomix/genomix-pregelix/src/main/assembly/binary-assembly.xml
new file mode 100755
index 0000000..0500499
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/assembly/binary-assembly.xml
@@ -0,0 +1,19 @@
+<assembly>
+ <id>binary-assembly</id>
+ <formats>
+ <format>zip</format>
+ <format>dir</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/appassembler/bin</directory>
+ <outputDirectory>bin</outputDirectory>
+ <fileMode>0755</fileMode>
+ </fileSet>
+ <fileSet>
+ <directory>target/appassembler/lib</directory>
+ <outputDirectory>lib</outputDirectory>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryDataCleanVertexInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryDataCleanVertexInputFormat.java
new file mode 100644
index 0000000..4d5a714
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryDataCleanVertexInputFormat.java
@@ -0,0 +1,105 @@
+package edu.uci.ics.genomix.pregelix.api.io.binary;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.mapreduce.InputSplit;
+import org.apache.hadoop.mapreduce.JobContext;
+import org.apache.hadoop.mapreduce.RecordReader;
+import org.apache.hadoop.mapreduce.TaskAttemptContext;
+import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
+
+import edu.uci.ics.pregelix.api.io.VertexInputFormat;
+import edu.uci.ics.pregelix.api.io.VertexReader;
+import edu.uci.ics.pregelix.api.io.WritableSizable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+public class BinaryDataCleanVertexInputFormat<I extends WritableComparable<?>, V extends Writable, E extends Writable, M extends WritableSizable>
+ extends VertexInputFormat<I, V, E, M> {
+
+ /** Uses the SequenceFileInputFormat to do everything */
+ @SuppressWarnings("rawtypes")
+ protected SequenceFileInputFormat binaryInputFormat = new SequenceFileInputFormat();
+
+ /**
+ * Abstract class to be implemented by the user based on their specific
+ * vertex input. Easiest to ignore the key value separator and only use key
+ * instead.
+ *
+ * @param <I>
+ * Vertex index value
+ * @param <V>
+ * Vertex value
+ * @param <E>
+ * Edge value
+ */
+ public static abstract class BinaryDataCleanVertexReader<I extends WritableComparable<?>, V extends Writable, E extends Writable, M extends WritableSizable>
+ implements VertexReader<I, V, E, M> {
+ /** Internal line record reader */
+ private final RecordReader<VKmerBytesWritable, VertexValueWritable> lineRecordReader;
+ /** Context passed to initialize */
+ private TaskAttemptContext context;
+
+ /**
+ * Initialize with the LineRecordReader.
+ *
+ * @param recordReader
+ * Line record reader from SequenceFileInputFormat
+ */
+ public BinaryDataCleanVertexReader(RecordReader<VKmerBytesWritable, VertexValueWritable> recordReader) {
+ this.lineRecordReader = recordReader;
+ }
+
+ @Override
+ public void initialize(InputSplit inputSplit, TaskAttemptContext context) throws IOException,
+ InterruptedException {
+ lineRecordReader.initialize(inputSplit, context);
+ this.context = context;
+ }
+
+ @Override
+ public void close() throws IOException {
+ lineRecordReader.close();
+ }
+
+ @Override
+ public float getProgress() throws IOException, InterruptedException {
+ return lineRecordReader.getProgress();
+ }
+
+ /**
+ * Get the line record reader.
+ *
+ * @return Record reader to be used for reading.
+ */
+ protected RecordReader<VKmerBytesWritable, VertexValueWritable> getRecordReader() {
+ return lineRecordReader;
+ }
+
+ /**
+ * Get the context.
+ *
+ * @return Context passed to initialize.
+ */
+ protected TaskAttemptContext getContext() {
+ return context;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<InputSplit> getSplits(JobContext context, int numWorkers) throws IOException, InterruptedException {
+ // Ignore the hint of numWorkers here since we are using SequenceFileInputFormat
+ // to do this for us
+ return binaryInputFormat.getSplits(context);
+ }
+
+ @Override
+ public VertexReader<I, V, E, M> createVertexReader(InputSplit split, TaskAttemptContext context) throws IOException {
+ return null;
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryDataCleanVertexOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryDataCleanVertexOutputFormat.java
new file mode 100644
index 0000000..30510a3
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryDataCleanVertexOutputFormat.java
@@ -0,0 +1,102 @@
+package edu.uci.ics.genomix.pregelix.api.io.binary;
+
+import java.io.IOException;
+
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.mapreduce.JobContext;
+import org.apache.hadoop.mapreduce.OutputCommitter;
+import org.apache.hadoop.mapreduce.RecordWriter;
+import org.apache.hadoop.mapreduce.TaskAttemptContext;
+import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
+
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.pregelix.api.io.VertexOutputFormat;
+import edu.uci.ics.pregelix.api.io.VertexWriter;
+
+/**
+ * Abstract class that users should subclass to use their own text based vertex
+ * output format.
+ *
+ * @param <I>
+ * Vertex index value
+ * @param <V>
+ * Vertex value
+ * @param <E>
+ * Edge value
+ */
+@SuppressWarnings("rawtypes")
+public abstract class BinaryDataCleanVertexOutputFormat<I extends WritableComparable, V extends Writable, E extends Writable>
+ extends VertexOutputFormat<I, V, E> {
+ /** Uses the SequenceFileOutputFormat to do everything */
+ protected SequenceFileOutputFormat binaryOutputFormat = new SequenceFileOutputFormat();
+
+ /**
+ * Abstract class to be implemented by the user based on their specific
+ * vertex output. Easiest to ignore the key value separator and only use key
+ * instead.
+ *
+ * @param <I>
+ * Vertex index value
+ * @param <V>
+ * Vertex value
+ * @param <E>
+ * Edge value
+ */
+ public static abstract class BinaryVertexWriter<I extends WritableComparable, V extends Writable, E extends Writable>
+ implements VertexWriter<I, V, E> {
+ /** Context passed to initialize */
+ private TaskAttemptContext context;
+ /** Internal line record writer */
+ private final RecordWriter<VKmerBytesWritable, VertexValueWritable> lineRecordWriter;
+
+ /**
+ * Initialize with the LineRecordWriter.
+ *
+ * @param lineRecordWriter
+ * Line record writer from SequenceFileOutputFormat
+ */
+ public BinaryVertexWriter(RecordWriter<VKmerBytesWritable, VertexValueWritable> lineRecordWriter) {
+ this.lineRecordWriter = lineRecordWriter;
+ }
+
+ @Override
+ public void initialize(TaskAttemptContext context) throws IOException {
+ this.context = context;
+ }
+
+ @Override
+ public void close(TaskAttemptContext context) throws IOException, InterruptedException {
+ lineRecordWriter.close(context);
+ }
+
+ /**
+ * Get the line record writer.
+ *
+ * @return Record writer to be used for writing.
+ */
+ public RecordWriter<VKmerBytesWritable, VertexValueWritable> getRecordWriter() {
+ return lineRecordWriter;
+ }
+
+ /**
+ * Get the context.
+ *
+ * @return Context passed to initialize.
+ */
+ public TaskAttemptContext getContext() {
+ return context;
+ }
+ }
+
+ @Override
+ public void checkOutputSpecs(JobContext context) throws IOException, InterruptedException {
+ binaryOutputFormat.checkOutputSpecs(context);
+ }
+
+ @Override
+ public OutputCommitter getOutputCommitter(TaskAttemptContext context) throws IOException, InterruptedException {
+ return binaryOutputFormat.getOutputCommitter(context);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/InitialGraphCleanVertexInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/InitialGraphCleanVertexInputFormat.java
new file mode 100644
index 0000000..9958417
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/InitialGraphCleanVertexInputFormat.java
@@ -0,0 +1,105 @@
+package edu.uci.ics.genomix.pregelix.api.io.binary;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableComparable;
+import org.apache.hadoop.mapreduce.InputSplit;
+import org.apache.hadoop.mapreduce.JobContext;
+import org.apache.hadoop.mapreduce.RecordReader;
+import org.apache.hadoop.mapreduce.TaskAttemptContext;
+import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
+
+import edu.uci.ics.pregelix.api.io.VertexInputFormat;
+import edu.uci.ics.pregelix.api.io.VertexReader;
+import edu.uci.ics.pregelix.api.io.WritableSizable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+public class InitialGraphCleanVertexInputFormat<I extends WritableComparable<?>, V extends Writable, E extends Writable, M extends WritableSizable>
+ extends VertexInputFormat<I, V, E, M> {
+
+ /** Uses the SequenceFileInputFormat to do everything */
+ @SuppressWarnings("rawtypes")
+ protected SequenceFileInputFormat binaryInputFormat = new SequenceFileInputFormat();
+
+ /**
+ * Abstract class to be implemented by the user based on their specific
+ * vertex input. Easiest to ignore the key value separator and only use key
+ * instead.
+ *
+ * @param <I>
+ * Vertex index value
+ * @param <V>
+ * Vertex value
+ * @param <E>
+ * Edge value
+ */
+ public static abstract class BinaryVertexReader<I extends WritableComparable<?>, V extends Writable, E extends Writable, M extends WritableSizable>
+ implements VertexReader<I, V, E, M> {
+ /** Internal line record reader */
+ private final RecordReader<VKmerBytesWritable, NodeWritable> lineRecordReader;
+ /** Context passed to initialize */
+ private TaskAttemptContext context;
+
+ /**
+ * Initialize with the LineRecordReader.
+ *
+ * @param recordReader
+ * Line record reader from SequenceFileInputFormat
+ */
+ public BinaryVertexReader(RecordReader<VKmerBytesWritable, NodeWritable> recordReader) {
+ this.lineRecordReader = recordReader;
+ }
+
+ @Override
+ public void initialize(InputSplit inputSplit, TaskAttemptContext context) throws IOException,
+ InterruptedException {
+ lineRecordReader.initialize(inputSplit, context);
+ this.context = context;
+ }
+
+ @Override
+ public void close() throws IOException {
+ lineRecordReader.close();
+ }
+
+ @Override
+ public float getProgress() throws IOException, InterruptedException {
+ return lineRecordReader.getProgress();
+ }
+
+ /**
+ * Get the line record reader.
+ *
+ * @return Record reader to be used for reading.
+ */
+ protected RecordReader<VKmerBytesWritable, NodeWritable> getRecordReader() {
+ return lineRecordReader;
+ }
+
+ /**
+ * Get the context.
+ *
+ * @return Context passed to initialize.
+ */
+ protected TaskAttemptContext getContext() {
+ return context;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<InputSplit> getSplits(JobContext context, int numWorkers) throws IOException, InterruptedException {
+ // Ignore the hint of numWorkers here since we are using SequenceFileInputFormat
+ // to do this for us
+ return binaryInputFormat.getSplits(context);
+ }
+
+ @Override
+ public VertexReader<I, V, E, M> createVertexReader(InputSplit split, TaskAttemptContext context) throws IOException {
+ return null;
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java
new file mode 100644
index 0000000..cdcc45b
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/client/Client.java
@@ -0,0 +1,79 @@
+package edu.uci.ics.genomix.pregelix.client;
+
+import java.io.IOException;
+
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
+import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
+import org.kohsuke.args4j.CmdLineException;
+import org.kohsuke.args4j.CmdLineParser;
+import org.kohsuke.args4j.Option;
+
+import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+import edu.uci.ics.pregelix.core.base.IDriver.Plan;
+import edu.uci.ics.pregelix.core.driver.Driver;
+
+public class Client {
+ //test rebase
+ private static class Options {
+ @Option(name = "-inputpaths", usage = "comma seprated input paths", required = true)
+ public String inputPaths;
+
+ @Option(name = "-outputpath", usage = "output path", required = true)
+ public String outputPath;
+
+ @Option(name = "-ip", usage = "ip address of cluster controller", required = true)
+ public String ipAddress;
+
+ @Option(name = "-port", usage = "port of cluster controller", required = false)
+ public int port;
+
+ @Option(name = "-plan", usage = "query plan choice", required = false)
+ public Plan planChoice = Plan.OUTER_JOIN;
+
+ @Option(name = "-tmpKmer-kmerByteSize", usage = "the kmerByteSize of tmpKmer", required = false)
+ public int sizeKmer;
+
+ @Option(name = "-num-iteration", usage = "max number of iterations", required = false)
+ public int numIteration = -1;
+
+ @Option(name = "-runtime-profiling", usage = "whether to do runtime profifling", required = false)
+ public String profiling = "false";
+
+// @Option(name = "-pseudo-rate", usage = "the rate of pseduHead", required = false)
+// public float pseudoRate = -1;
+//
+// @Option(name = "-max-patitionround", usage = "max rounds in partition phase", required = false)
+// public int maxRound = -1;
+ }
+
+ public static void run(String[] args, PregelixJob job) throws Exception {
+ Options options = prepareJob(args, job);
+ Driver driver = new Driver(Client.class);
+ driver.runJob(job, options.planChoice, options.ipAddress, options.port, Boolean.parseBoolean(options.profiling));
+ }
+
+ private static Options prepareJob(String[] args, PregelixJob job) throws CmdLineException, IOException {
+ Options options = new Options();
+ CmdLineParser parser = new CmdLineParser(options);
+ parser.parseArgument(args);
+
+ String[] inputs = options.inputPaths.split(";");
+ FileInputFormat.setInputPaths(job, inputs[0]);
+ for (int i = 1; i < inputs.length; i++)
+ FileInputFormat.addInputPaths(job, inputs[0]);
+ FileOutputFormat.setOutputPath(job, new Path(options.outputPath));
+ job.getConfiguration().setInt(BasicGraphCleanVertex.KMER_SIZE, options.sizeKmer);
+ if (options.numIteration > 0) {
+ job.getConfiguration().setInt(BasicGraphCleanVertex.ITERATIONS, options.numIteration);
+ }
+
+// if (options.pseudoRate > 0 && options.pseudoRate <= 1)
+// job.getConfiguration().setFloat(P3ForPathMergeVertex.PSEUDORATE, options.pseudoRate);
+// if (options.maxRound > 0)
+// job.getConfiguration().setInt(P3ForPathMergeVertex.MAXROUND, options.maxRound);
+ return options;
+
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanInputFormat.java
new file mode 100644
index 0000000..6b7939c
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanInputFormat.java
@@ -0,0 +1,74 @@
+package edu.uci.ics.genomix.pregelix.format;
+
+import java.io.IOException;
+
+import org.apache.hadoop.io.NullWritable;
+import org.apache.hadoop.mapreduce.InputSplit;
+import org.apache.hadoop.mapreduce.RecordReader;
+import org.apache.hadoop.mapreduce.TaskAttemptContext;
+
+import edu.uci.ics.pregelix.api.graph.Vertex;
+import edu.uci.ics.pregelix.api.io.VertexReader;
+import edu.uci.ics.pregelix.api.util.BspUtils;
+import edu.uci.ics.genomix.pregelix.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryDataCleanVertexInputFormat;
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryDataCleanVertexInputFormat.BinaryDataCleanVertexReader;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+public class GraphCleanInputFormat extends
+ BinaryDataCleanVertexInputFormat<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> {
+ /**
+ * Format INPUT
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public VertexReader<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> createVertexReader(
+ InputSplit split, TaskAttemptContext context) throws IOException {
+ return new BinaryDataCleanLoadGraphReader(binaryInputFormat.createRecordReader(split, context));
+ }
+}
+
+@SuppressWarnings("rawtypes")
+class BinaryDataCleanLoadGraphReader extends
+ BinaryDataCleanVertexReader<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> {
+ private Vertex vertex;
+ private VKmerBytesWritable vertexId = new VKmerBytesWritable();
+ private VertexValueWritable vertexValue = new VertexValueWritable();
+
+ public BinaryDataCleanLoadGraphReader(RecordReader<VKmerBytesWritable, VertexValueWritable> recordReader) {
+ super(recordReader);
+ }
+
+ @Override
+ public boolean nextVertex() throws IOException, InterruptedException {
+ return getRecordReader().nextKeyValue();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Vertex<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> getCurrentVertex()
+ throws IOException, InterruptedException {
+ if (vertex == null)
+ vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
+
+ vertex.getMsgList().clear();
+ vertex.getEdges().clear();
+
+ vertex.reset();
+ if (getRecordReader() != null) {
+ /**
+ * set the src vertex id
+ */
+ vertexId.setAsCopy(getRecordReader().getCurrentKey());
+ vertex.setVertexId(vertexId);
+ /**
+ * set the vertex value
+ */
+ vertexValue.setAsCopy(getRecordReader().getCurrentValue());
+ vertex.setVertexValue(vertexValue);
+ }
+
+ return vertex;
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanOutputFormat.java
new file mode 100644
index 0000000..77960ba
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/GraphCleanOutputFormat.java
@@ -0,0 +1,41 @@
+package edu.uci.ics.genomix.pregelix.format;
+
+import java.io.IOException;
+
+import org.apache.hadoop.io.NullWritable;
+import org.apache.hadoop.mapreduce.RecordWriter;
+import org.apache.hadoop.mapreduce.TaskAttemptContext;
+
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryDataCleanVertexOutputFormat;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.pregelix.api.graph.Vertex;
+import edu.uci.ics.pregelix.api.io.VertexWriter;
+
+public class GraphCleanOutputFormat extends
+ BinaryDataCleanVertexOutputFormat<VKmerBytesWritable, VertexValueWritable, NullWritable> {
+
+ @Override
+ public VertexWriter<VKmerBytesWritable, VertexValueWritable, NullWritable> createVertexWriter(
+ TaskAttemptContext context) throws IOException, InterruptedException {
+ @SuppressWarnings("unchecked")
+ RecordWriter<VKmerBytesWritable, VertexValueWritable> recordWriter = binaryOutputFormat.getRecordWriter(context);
+ return new BinaryLoadGraphVertexWriter(recordWriter);
+ }
+
+ /**
+ * Simple VertexWriter that supports {@link BinaryLoadGraphVertex}
+ */
+ public static class BinaryLoadGraphVertexWriter extends
+ BinaryVertexWriter<VKmerBytesWritable, VertexValueWritable, NullWritable> {
+ public BinaryLoadGraphVertexWriter(RecordWriter<VKmerBytesWritable, VertexValueWritable> lineRecordWriter) {
+ super(lineRecordWriter);
+ }
+
+ @Override
+ public void writeVertex(Vertex<VKmerBytesWritable, VertexValueWritable, NullWritable, ?> vertex)
+ throws IOException, InterruptedException {
+ getRecordWriter().write(vertex.getVertexId(), vertex.getVertexValue());
+ }
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
new file mode 100644
index 0000000..e120c82
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
@@ -0,0 +1,81 @@
+package edu.uci.ics.genomix.pregelix.format;
+
+import java.io.IOException;
+
+import org.apache.hadoop.io.NullWritable;
+import org.apache.hadoop.mapreduce.InputSplit;
+import org.apache.hadoop.mapreduce.RecordReader;
+import org.apache.hadoop.mapreduce.TaskAttemptContext;
+
+import edu.uci.ics.pregelix.api.graph.Vertex;
+import edu.uci.ics.pregelix.api.io.VertexReader;
+import edu.uci.ics.pregelix.api.util.BspUtils;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.pregelix.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.api.io.binary.InitialGraphCleanVertexInputFormat;
+import edu.uci.ics.genomix.pregelix.api.io.binary.InitialGraphCleanVertexInputFormat.BinaryVertexReader;
+
+public class InitialGraphCleanInputFormat extends
+ InitialGraphCleanVertexInputFormat<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> {
+ /**
+ * Format INPUT
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public VertexReader<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> createVertexReader(
+ InputSplit split, TaskAttemptContext context) throws IOException {
+ return new BinaryLoadGraphReader(binaryInputFormat.createRecordReader(split, context));
+ }
+}
+
+@SuppressWarnings("rawtypes")
+class BinaryLoadGraphReader extends
+ BinaryVertexReader<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> {
+
+ private Vertex vertex;
+ private VKmerBytesWritable vertexId = new VKmerBytesWritable();
+ private NodeWritable node = new NodeWritable();
+ private VertexValueWritable vertexValue = new VertexValueWritable();
+
+ public BinaryLoadGraphReader(RecordReader<VKmerBytesWritable, NodeWritable> recordReader) {
+ super(recordReader);
+ }
+
+ @Override
+ public boolean nextVertex() throws IOException, InterruptedException {
+ return getRecordReader().nextKeyValue();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Vertex<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> getCurrentVertex()
+ throws IOException, InterruptedException {
+ if (vertex == null)
+ vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
+
+ vertex.getMsgList().clear();
+ vertex.getEdges().clear();
+
+ vertex.reset();
+ if (getRecordReader() != null) {
+ /**
+ * set the src vertex id
+ */
+ vertexId.setAsCopy(getRecordReader().getCurrentKey());
+ vertex.setVertexId(vertexId);
+ /**
+ * set the vertex value
+ */
+ node.setAsCopy(getRecordReader().getCurrentValue());
+ vertexValue.setNode(node);
+ vertexValue.setInternalKmer(vertexId);
+ vertexValue.setState(State.IS_NON);
+ vertex.setVertexValue(vertexValue);
+ }
+
+ return vertex;
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/P2PathMergeOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/P2PathMergeOutputFormat.java
new file mode 100644
index 0000000..b4c0aee
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/P2PathMergeOutputFormat.java
@@ -0,0 +1,46 @@
+package edu.uci.ics.genomix.pregelix.format;
+
+import java.io.IOException;
+
+import org.apache.hadoop.io.NullWritable;
+import org.apache.hadoop.mapreduce.RecordWriter;
+import org.apache.hadoop.mapreduce.TaskAttemptContext;
+
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryDataCleanVertexOutputFormat;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.operator.pathmerge.P2ForPathMergeVertex;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.pregelix.api.graph.Vertex;
+import edu.uci.ics.pregelix.api.io.VertexWriter;
+
+public class P2PathMergeOutputFormat extends
+ BinaryDataCleanVertexOutputFormat<VKmerBytesWritable, VertexValueWritable, NullWritable> {
+
+ @Override
+ public VertexWriter<VKmerBytesWritable, VertexValueWritable, NullWritable> createVertexWriter(
+ TaskAttemptContext context) throws IOException, InterruptedException {
+ @SuppressWarnings("unchecked")
+ RecordWriter<VKmerBytesWritable, VertexValueWritable> recordWriter = binaryOutputFormat.getRecordWriter(context);
+ return new BinaryLoadGraphVertexWriter(recordWriter);
+ }
+
+ /**
+ * Simple VertexWriter that supports {@link BinaryLoadGraphVertex}
+ */
+ public static class BinaryLoadGraphVertexWriter extends
+ BinaryVertexWriter<VKmerBytesWritable, VertexValueWritable, NullWritable> {
+ public BinaryLoadGraphVertexWriter(RecordWriter<VKmerBytesWritable, VertexValueWritable> lineRecordWriter) {
+ super(lineRecordWriter);
+ }
+
+ @Override
+ public void writeVertex(Vertex<VKmerBytesWritable, VertexValueWritable, NullWritable, ?> vertex)
+ throws IOException, InterruptedException {
+ byte selfFlag = (byte)(vertex.getVertexValue().getState() & State.VERTEX_MASK);
+ if(selfFlag == State.IS_FINAL)
+ getRecordWriter().write(vertex.getVertexId(), vertex.getVertexValue());
+ P2ForPathMergeVertex.fakeVertexExist = false;
+ }
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
new file mode 100644
index 0000000..91fd89f
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
@@ -0,0 +1,207 @@
+package edu.uci.ics.genomix.pregelix.graph;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.Iterator;
+
+import org.apache.commons.io.filefilter.WildcardFileFilter;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.io.SequenceFile;
+
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+
+public class GenerateGraphViz {
+
+ /**
+ * Construct a DOT graph in memory, convert it
+ * to image and store the image in the file system.
+ */
+ public static void convertGraphBuildingOutputToGraphViz(String srcDir, String destDir) throws Exception {
+ GraphViz gv = new GraphViz();
+ gv.addln(gv.start_graph());
+
+ Configuration conf = new Configuration();
+ FileSystem fileSys = FileSystem.getLocal(conf);
+ File srcPath = new File(srcDir);
+
+ String outputNode = "";
+ String outputEdge = "";
+ for (File f : srcPath.listFiles((FilenameFilter) (new WildcardFileFilter("part*")))) {
+ SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, new Path(f.getAbsolutePath()), conf);
+ VKmerBytesWritable key = new VKmerBytesWritable();
+ NodeWritable value = new NodeWritable();
+
+ gv.addln("rankdir=LR\n");
+
+ while (reader.next(key, value)) {
+ outputNode = "";
+ outputEdge = "";
+ if (key == null) {
+ break;
+ }
+ outputNode += key.toString();
+ /** convert edge to graph **/
+ outputEdge = convertEdgeToGraph(outputNode, value);
+ gv.addln(outputEdge);
+ /** add readIdSet **/
+ String fillColor = "";
+ if(value.isStartReadOrEndRead())
+ fillColor = "fillcolor=\"grey\", style=\"filled\",";
+ outputNode += " [shape=record, " + fillColor + " label = \"<f0> " + key.toString()
+ + "|<f1> " + value.getStartReads().printStartReadIdSet()
+ + "|<f2> " + value.getEndReads().printEndReadIdSet()
+ + "|<f3> " + value.getAvgCoverage() + "\"]\n";
+ gv.addln(outputNode);
+ }
+ reader.close();
+ }
+
+ gv.addln(gv.end_graph());
+ System.out.println(gv.getDotSource());
+
+ String type = "ps";
+ File folder = new File(destDir);
+ folder.mkdirs();
+ File out = new File(destDir + "/result." + type); // Linux
+ gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
+ }
+
+ public static void convertGraphCleanOutputToGraphViz(String srcDir, String destDir) throws Exception {
+ GraphViz gv = new GraphViz();
+ gv.addln(gv.start_graph());
+
+ Configuration conf = new Configuration();
+ FileSystem fileSys = FileSystem.getLocal(conf);
+ File srcPath = new File(srcDir);
+
+ String outputNode = "";
+ String outputEdge = "";
+ for (File f : srcPath.listFiles((FilenameFilter) (new WildcardFileFilter("part*")))) {
+ SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, new Path(f.getAbsolutePath()), conf);
+ VKmerBytesWritable key = new VKmerBytesWritable();
+ VertexValueWritable value = new VertexValueWritable();
+
+ gv.addln("rankdir=LR\n");
+
+ while (reader.next(key, value)) {
+ outputNode = "";
+ outputEdge = "";
+ if (key == null) {
+ break;
+ }
+ outputNode += key.toString();
+ /** convert edge to graph **/
+ outputEdge = convertEdgeToGraph(outputNode, value);
+ gv.addln(outputEdge);
+ /** add readIdSet **/
+ String fillColor = "";
+ if(value.isStartReadOrEndRead())
+ fillColor = "fillcolor=\"grey\", style=\"filled\",";
+ outputNode += " [shape=record, " + fillColor + " label = \"<f0> " + key.toString()
+ + "|<f1> " + value.getStartReads().printStartReadIdSet()
+ + "|<f2> " + value.getEndReads().printEndReadIdSet()
+ + "|<f3> " + value.getAvgCoverage()
+ + "|<f4> " + value.getInternalKmer() + "\"]\n";
+ gv.addln(outputNode);
+ }
+ reader.close();
+ }
+
+ gv.addln(gv.end_graph());
+ System.out.println(gv.getDotSource());
+
+ String type = "ps";
+ File folder = new File(destDir);
+ folder.mkdirs();
+ File out = new File(destDir + "/result." + type); // Linux
+ gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
+ }
+
+ /**
+ * For graph building
+ * @param outputNode
+ * @param value
+ * @return
+ */
+ public static String convertEdgeToGraph(String outputNode, NodeWritable value){
+ String outputEdge = "";
+ Iterator<EdgeWritable> edgeIterator;
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"black\" label =\"FF: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"blue\" label =\"FR: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"green\" label =\"RF: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"red\" label =\"RR: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ //TODO should output actualKmer instead of kmer
+ if(outputEdge == "")
+ outputEdge += outputNode;
+ return outputEdge;
+ }
+
+ /**
+ * For graph clean
+ * @param outputNode
+ * @param value
+ * @return
+ */
+ public static String convertEdgeToGraph(String outputNode, VertexValueWritable value){
+ String outputEdge = "";
+ Iterator<EdgeWritable> edgeIterator;
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"black\" label =\"FF: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"blue\" label =\"FR: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"green\" label =\"RF: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ edgeIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
+ while(edgeIterator.hasNext()){
+ EdgeWritable edge = edgeIterator.next();
+ outputEdge += outputNode + " -> " + edge.getKey().toString() + "[color = \"red\" label =\"RR: " +
+ edge.printReadIdSet() + "\"]\n";
+ }
+ //TODO should output actualKmer instead of kmer
+ if(outputEdge == "")
+ outputEdge += outputNode;
+ return outputEdge;
+ }
+
+ public static void main(String[] args) throws Exception {
+ GenerateGraphViz.convertGraphCleanOutputToGraphViz("data/actual/bubbleadd/BubbleAddGraph/bin/5", "graphtest");
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GraphViz.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GraphViz.java
new file mode 100644
index 0000000..4175595
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GraphViz.java
@@ -0,0 +1,297 @@
+package edu.uci.ics.genomix.pregelix.graph;
+
+// GraphViz.java - a simple API to call dot from Java programs
+
+/*$Id$*/
+/*
+ ******************************************************************************
+ * *
+ * (c) Copyright 2003 Laszlo Szathmary *
+ * *
+ * This program is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as published by *
+ * the Free Software Foundation; either version 2.1 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, but *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public *
+ * License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public License *
+ * along with this program; if not, write to the Free Software Foundation, *
+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
+ * *
+ ******************************************************************************
+ */
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+
+/**
+ * <dl>
+ * <dt>Purpose: GraphViz Java API
+ * <dd>
+ * <dt>Description:
+ * <dd>With this Java class you can simply call dot from your Java programs
+ * <dt>Example usage:
+ * <dd>
+ *
+ * <pre>
+ * GraphViz gv = new GraphViz();
+ * gv.addln(gv.start_graph());
+ * gv.addln("A -> B;");
+ * gv.addln("A -> C;");
+ * gv.addln(gv.end_graph());
+ * System.out.println(gv.getDotSource());
+ *
+ * String type = "gif";
+ * File out = new File("out." + type); // out.gif in this example
+ * gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
+ * </pre>
+ *
+ * </dd>
+ * </dl>
+ *
+ * @version v0.4, 2011/02/05 (February) -- Patch of Keheliya Gallaba is added. Now you
+ * can specify the type of the output file: gif, dot, fig, pdf, ps, svg, png, etc.
+ * @version v0.3, 2010/11/29 (November) -- Windows support + ability
+ * to read the graph from a text file
+ * @version v0.2, 2010/07/22 (July) -- bug fix
+ * @version v0.1, 2003/12/04 (December) -- first release
+ * @author Laszlo Szathmary (<a href="jabba.laci@gmail.com">jabba.laci@gmail.com</a>)
+ */
+public class GraphViz {
+ /**
+ * The dir. where temporary files will be created.
+ */
+ private static String TEMP_DIR = "/tmp"; // Linux
+ // private static String TEMP_DIR = "c:/temp"; // Windows
+
+ /**
+ * Where is your dot program located? It will be called externally.
+ */
+ private static String DOT = "/usr/bin/dot"; // Linux
+ // private static String DOT = "c:/Program Files/Graphviz2.26.3/bin/dot.exe"; // Windows
+
+ /**
+ * The source of the graph written in dot language.
+ */
+ private StringBuilder graph = new StringBuilder();
+
+ /**
+ * Constructor: creates a new GraphViz object that will contain
+ * a graph.
+ */
+ public GraphViz() {
+ }
+
+ /**
+ * Returns the graph's source description in dot language.
+ *
+ * @return Source of the graph in dot language.
+ */
+ public String getDotSource() {
+ return graph.toString();
+ }
+
+ /**
+ * Adds a string to the graph's source (without newline).
+ */
+ public void add(String line) {
+ graph.append(line);
+ }
+
+ /**
+ * Adds a string to the graph's source (with newline).
+ */
+ public void addln(String line) {
+ graph.append(line + "\n");
+ }
+
+ /**
+ * Adds a newline to the graph's source.
+ */
+ public void addln() {
+ graph.append('\n');
+ }
+
+ /**
+ * Returns the graph as an image in binary format.
+ *
+ * @param dot_source
+ * Source of the graph to be drawn.
+ * @param type
+ * Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
+ * @return A byte array containing the image of the graph.
+ */
+ public byte[] getGraph(String dot_source, String type) {
+ File dot;
+ byte[] img_stream = null;
+
+ try {
+ dot = writeDotSourceToFile(dot_source);
+ if (dot != null) {
+ img_stream = get_img_stream(dot, type);
+ if (dot.delete() == false)
+ System.err.println("Warning: " + dot.getAbsolutePath() + " could not be deleted!");
+ return img_stream;
+ }
+ return null;
+ } catch (java.io.IOException ioe) {
+ return null;
+ }
+ }
+
+ /**
+ * Writes the graph's image in a file.
+ *
+ * @param img
+ * A byte array containing the image of the graph.
+ * @param file
+ * Name of the file to where we want to write.
+ * @return Success: 1, Failure: -1
+ */
+ public int writeGraphToFile(byte[] img, String file) {
+ File to = new File(file);
+ return writeGraphToFile(img, to);
+ }
+
+ /**
+ * Writes the graph's image in a file.
+ *
+ * @param img
+ * A byte array containing the image of the graph.
+ * @param to
+ * A File object to where we want to write.
+ * @return Success: 1, Failure: -1
+ */
+ public int writeGraphToFile(byte[] img, File to) {
+ try {
+ FileOutputStream fos = new FileOutputStream(to);
+ fos.write(img);
+ fos.close();
+ } catch (java.io.IOException ioe) {
+ return -1;
+ }
+ return 1;
+ }
+
+ /**
+ * It will call the external dot program, and return the image in
+ * binary format.
+ *
+ * @param dot
+ * Source of the graph (in dot language).
+ * @param type
+ * Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
+ * @return The image of the graph in .gif format.
+ */
+ private byte[] get_img_stream(File dot, String type) {
+ File img;
+ byte[] img_stream = null;
+
+ try {
+ img = File.createTempFile("graph_", "." + type, new File(GraphViz.TEMP_DIR));
+ Runtime rt = Runtime.getRuntime();
+
+ // patch by Mike Chenault
+ String[] args = { DOT, "-T" + type, dot.getAbsolutePath(), "-o", img.getAbsolutePath() };
+ Process p = rt.exec(args);
+
+ p.waitFor();
+
+ FileInputStream in = new FileInputStream(img.getAbsolutePath());
+ img_stream = new byte[in.available()];
+ in.read(img_stream);
+ // Close it if we need to
+ if (in != null)
+ in.close();
+
+ if (img.delete() == false)
+ System.err.println("Warning: " + img.getAbsolutePath() + " could not be deleted!");
+ } catch (java.io.IOException ioe) {
+ System.err.println("Error: in I/O processing of tempfile in dir " + GraphViz.TEMP_DIR + "\n");
+ System.err.println(" or in calling external command");
+ ioe.printStackTrace();
+ } catch (java.lang.InterruptedException ie) {
+ System.err.println("Error: the execution of the external program was interrupted");
+ ie.printStackTrace();
+ }
+
+ return img_stream;
+ }
+
+ /**
+ * Writes the source of the graph in a file, and returns the written file
+ * as a File object.
+ *
+ * @param str
+ * Source of the graph (in dot language).
+ * @return The file (as a File object) that contains the source of the graph.
+ */
+ private File writeDotSourceToFile(String str) throws java.io.IOException {
+ File temp;
+ try {
+ temp = File.createTempFile("graph_", ".dot.tmp", new File(GraphViz.TEMP_DIR));
+ FileWriter fout = new FileWriter(temp);
+ fout.write(str);
+ fout.close();
+ } catch (Exception e) {
+ System.err.println("Error: I/O error while writing the dot source to temp file!");
+ return null;
+ }
+ return temp;
+ }
+
+ /**
+ * Returns a string that is used to start a graph.
+ *
+ * @return A string to open a graph.
+ */
+ public String start_graph() {
+ return "digraph G {";
+ }
+
+ /**
+ * Returns a string that is used to end a graph.
+ *
+ * @return A string to close a graph.
+ */
+ public String end_graph() {
+ return "}";
+ }
+
+ /**
+ * Read a DOT graph from a text file.
+ *
+ * @param input
+ * Input text file containing the DOT graph
+ * source.
+ */
+ public void readSource(String input) {
+ StringBuilder sb = new StringBuilder();
+
+ try {
+ FileInputStream fis = new FileInputStream(input);
+ DataInputStream dis = new DataInputStream(fis);
+ BufferedReader br = new BufferedReader(new InputStreamReader(dis));
+ String line;
+ while ((line = br.readLine()) != null) {
+ sb.append(line);
+ }
+ dis.close();
+ } catch (Exception e) {
+ System.err.println("Error: " + e.getMessage());
+ }
+
+ this.graph = sb;
+ }
+
+} // end of class GraphViz
+
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
new file mode 100644
index 0000000..0611621
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/AdjacencyListWritable.java
@@ -0,0 +1,76 @@
+package edu.uci.ics.genomix.pregelix.io;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.hadoop.io.WritableComparable;
+
+import edu.uci.ics.genomix.type.EdgeListWritable;
+
+public class AdjacencyListWritable implements WritableComparable<AdjacencyListWritable>{
+ private EdgeListWritable forwardList;
+ private EdgeListWritable reverseList;
+
+ public AdjacencyListWritable(){
+ forwardList = new EdgeListWritable();
+ reverseList = new EdgeListWritable();
+ }
+
+ public AdjacencyListWritable(int kmerSize){
+ forwardList = new EdgeListWritable();
+ reverseList = new EdgeListWritable();
+ }
+
+ public void set(AdjacencyListWritable adjacencyList){
+ forwardList.setAsCopy(adjacencyList.getForwardList());
+ reverseList.setAsCopy(adjacencyList.getReverseList());
+ }
+
+ public void reset(){
+ forwardList.reset();
+ reverseList.reset();
+ }
+
+ public void reset(int kmerSize){
+ forwardList.reset();
+ reverseList.reset();
+ }
+
+ public int getCountOfPosition(){
+ return forwardList.getCountOfPosition() + reverseList.getCountOfPosition();
+ }
+
+ public EdgeListWritable getForwardList() {
+ return forwardList;
+ }
+
+ public void setForwardList(EdgeListWritable forwardList) {
+ this.forwardList.setAsCopy(forwardList);
+ }
+
+ public EdgeListWritable getReverseList() {
+ return reverseList;
+ }
+
+ public void setReverseList(EdgeListWritable reverseList) {
+ this.reverseList.setAsCopy(reverseList);
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ forwardList.readFields(in);
+ reverseList.readFields(in);
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ forwardList.write(out);
+ reverseList.write(out);
+ }
+
+ @Override
+ public int compareTo(AdjacencyListWritable o) {
+ return 0;
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ArrayListWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ArrayListWritable.java
new file mode 100644
index 0000000..0d1b5d7
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ArrayListWritable.java
@@ -0,0 +1,113 @@
+package edu.uci.ics.genomix.pregelix.io;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.ArrayList;
+import org.apache.hadoop.io.Writable;
+
+/**
+ * <p>
+ * Class that represents an array list in Hadoop's data type system. It extends ArrayList class,
+ * hence supports all services provided by ArrayList.
+ * Elements in the list must be homogeneous and must implement Hadoop's Writable interface.
+ * This class, combined with {@link Tuple}, allows the user to
+ * define arbitrarily complex data structures.
+ * </p>
+ *
+ * @see Tuple
+ * @param <E>
+ * type of list element
+ */
+
+public class ArrayListWritable<E extends Writable> extends ArrayList<E> implements Writable{
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates an ArrayListWritable object.
+ */
+ public ArrayListWritable() {
+ super();
+ }
+
+ /**
+ * Creates an ArrayListWritable object from a regular ArrayList.
+ */
+ public ArrayListWritable(ArrayList<E> array) {
+ super(array);
+ }
+
+ /**
+ * Deserializes the array.
+ *
+ * @param in
+ * source for raw byte representation
+ */
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void readFields(DataInput in) throws IOException {
+
+ this.clear();
+
+ int numFields = in.readInt();
+ if(numFields==0) return;
+ String className = in.readUTF();
+ E obj;
+ try {
+ Class c = Class.forName(className);
+ for (int i = 0; i < numFields; i++) {
+ obj = (E) c.newInstance();
+ obj.readFields(in);
+ this.add(obj);
+ }
+
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Serializes this array.
+ *
+ * @param out
+ * where to write the raw byte representation
+ */
+ public void write(DataOutput out) throws IOException {
+ out.writeInt(this.size());
+ if(size()==0) return;
+ E obj=get(0);
+
+ out.writeUTF(obj.getClass().getCanonicalName());
+
+ for (int i = 0; i < size(); i++) {
+ obj = get(i);
+ if (obj == null) {
+ throw new IOException("Cannot serialize null fields!");
+ }
+ obj.write(out);
+ }
+ }
+
+ /**
+ * Generates human-readable String representation of this ArrayList.
+ *
+ * @return human-readable String representation of this ArrayList
+ */
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("[");
+ for (int i = 0; i < this.size(); i++) {
+ if (i != 0)
+ sb.append(", ");
+ sb.append(this.get(i));
+ }
+ sb.append("]");
+
+ return sb.toString();
+ }
+
+}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BFSTraverseMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BFSTraverseMessageWritable.java
new file mode 100644
index 0000000..40dcc05
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BFSTraverseMessageWritable.java
@@ -0,0 +1,124 @@
+package edu.uci.ics.genomix.pregelix.io;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.genomix.pregelix.type.EdgeDirs;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerListWritable;
+
+public class BFSTraverseMessageWritable extends MessageWritable{
+
+ private VKmerListWritable pathList; //use for BFSTravese
+ private ArrayListWritable<EdgeDirs> edgeDirsList;
+ private VKmerBytesWritable seekedVertexId; //use for BFSTravese
+ private long readId; //use for BFSTravese
+ private boolean srcFlip; //use for BFSTravese
+ private boolean destFlip; //use for BFSTravese
+ private boolean isTraverseMsg; //otherwise, it is final message for this path for adding readId to all path nodes
+
+ public BFSTraverseMessageWritable(){
+ super();
+ pathList = new VKmerListWritable();
+ edgeDirsList = new ArrayListWritable<EdgeDirs>();
+ seekedVertexId = new VKmerBytesWritable();
+ readId = 0;
+ srcFlip = false;
+ destFlip = false;
+ isTraverseMsg = true;
+ }
+
+ public void reset(){
+ super.reset();
+ pathList.reset();
+ edgeDirsList.clear();
+ seekedVertexId.reset(0);
+ readId = 0;
+ srcFlip = false;
+ destFlip = false;
+ isTraverseMsg = true;
+ }
+
+ public VKmerListWritable getPathList() {
+ return pathList;
+ }
+
+ public void setPathList(VKmerListWritable pathList) {
+ this.pathList = pathList;
+ }
+
+ public ArrayListWritable<EdgeDirs> getEdgeDirsList() {
+ return edgeDirsList;
+ }
+
+ public void setEdgeDirsList(ArrayListWritable<EdgeDirs> edgeDirsList) {
+ this.edgeDirsList.clear();
+ this.edgeDirsList.addAll(edgeDirsList);
+ }
+
+ public VKmerBytesWritable getSeekedVertexId() {
+ return seekedVertexId;
+ }
+
+ public void setSeekedVertexId(VKmerBytesWritable seekedVertexId) {
+ this.seekedVertexId = seekedVertexId;
+ }
+
+ public long getReadId() {
+ return readId;
+ }
+
+ public void setReadId(long readId) {
+ this.readId = readId;
+ }
+
+ public boolean isSrcFlip() {
+ return srcFlip;
+ }
+
+ public void setSrcFlip(boolean srcFlip) {
+ this.srcFlip = srcFlip;
+ }
+
+ public boolean isDestFlip() {
+ return destFlip;
+ }
+
+ public void setDestFlip(boolean destFlip) {
+ this.destFlip = destFlip;
+ }
+
+ public boolean isTraverseMsg() {
+ return isTraverseMsg;
+ }
+
+ public void setTraverseMsg(boolean isTraverseMsg) {
+ this.isTraverseMsg = isTraverseMsg;
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ super.readFields(in);
+ pathList.readFields(in);
+ edgeDirsList.readFields(in);
+ seekedVertexId.readFields(in);
+ readId = in.readLong();
+ srcFlip = in.readBoolean();
+ destFlip = in.readBoolean();
+ isTraverseMsg = in.readBoolean();
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ super.write(out);
+ pathList.write(out);
+ edgeDirsList.write(out);
+ seekedVertexId.write(out);
+ out.writeLong(readId);
+ out.writeBoolean(srcFlip);
+ out.writeBoolean(destFlip);
+ out.writeBoolean(isTraverseMsg);
+ }
+}
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
new file mode 100644
index 0000000..9585608
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/BubbleMergeMessageWritable.java
@@ -0,0 +1,103 @@
+package edu.uci.ics.genomix.pregelix.io;
+
+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;
+
+public class BubbleMergeMessageWritable extends MessageWritable{
+
+ public static class DirToMajor{
+ public static final byte FORWARD = 0;
+ public static final byte REVERSE = 1;
+ }
+
+ private VKmerBytesWritable majorVertexId; //use for MergeBubble
+ private NodeWritable node; //except kmer, other field should be updated when MergeBubble
+ private byte meToMajorDir;
+
+ public BubbleMergeMessageWritable(){
+ super();
+ majorVertexId = new VKmerBytesWritable();
+ node = new NodeWritable();
+ meToMajorDir = 0;
+ }
+
+ public void set(BubbleMergeMessageWritable msg){
+ this.setSourceVertexId(msg.getSourceVertexId());
+ this.setFlag(msg.getFlag());
+ this.setMajorVertexId(msg.getMajorVertexId());
+ this.setNode(msg.node);
+ this.setMeToMajorDir(meToMajorDir);
+ }
+
+ public void reset(){
+ super.reset();
+ majorVertexId.reset(0);
+ node.reset();
+ meToMajorDir = 0;
+ }
+
+ public VKmerBytesWritable getMajorVertexId() {
+ return majorVertexId;
+ }
+
+ public void setMajorVertexId(VKmerBytesWritable majorVertexId) {
+ this.majorVertexId.setAsCopy(majorVertexId);
+ }
+
+ public NodeWritable getNode() {
+ return node;
+ }
+
+ public void setNode(NodeWritable node) {
+ this.node = node;
+ }
+
+ public byte getMeToMajorDir() {
+ return meToMajorDir;
+ }
+
+ public void setMeToMajorDir(byte meToMajorDir) {
+ this.meToMajorDir = meToMajorDir;
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ super.readFields(in);
+ majorVertexId.readFields(in);
+ node.readFields(in);
+ meToMajorDir = in.readByte();
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ super.write(out);
+ majorVertexId.write(out);
+ node.write(out);
+ out.writeByte(meToMajorDir);
+ }
+
+ public static class SortByCoverage implements Comparator<BubbleMergeMessageWritable> {
+ @Override
+ public int compare(BubbleMergeMessageWritable left, BubbleMergeMessageWritable right) {
+ return Float.compare(left.node.getAverageCoverage(), right.node.getAverageCoverage());
+ }
+ }
+
+ public float computeDissimilar(BubbleMergeMessageWritable other){
+ if(this.getMeToMajorDir() == other.getMeToMajorDir())
+ return this.getSourceVertexId().fracDissimilar(other.getSourceVertexId());
+ else{
+ String reverse = other.getSourceVertexId().toString();
+ VKmerBytesWritable reverseKmer = new VKmerBytesWritable();
+ reverseKmer.setByReadReverse(reverse.length(), reverse.getBytes(), 0);
+ return this.getSourceVertexId().fracDissimilar(reverseKmer);
+ }
+
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/HashMapWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/HashMapWritable.java
new file mode 100644
index 0000000..c4556c7
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/HashMapWritable.java
@@ -0,0 +1,102 @@
+package edu.uci.ics.genomix.pregelix.io;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.Map;
+import java.util.Set;
+import java.util.HashMap;
+
+import org.apache.hadoop.io.Writable;
+@SuppressWarnings("unchecked")
+public class HashMapWritable<K extends Writable, V extends Writable> extends HashMap<K, V> implements
+ Writable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a HashMapWritable object.
+ */
+ public HashMapWritable() {
+ super();
+ }
+
+ /**
+ * Creates a HashMapWritable object from a regular HashMap.
+ */
+ public HashMapWritable(HashMap<K, V> map) {
+ super(map);
+ }
+
+ /**
+ * Deserializes the array.
+ *
+ * @param in
+ * source for raw byte representation
+ */
+
+ @SuppressWarnings("rawtypes")
+ public void readFields(DataInput in) throws IOException {
+
+ this.clear();
+
+ int numEntries = in.readInt();
+ if(numEntries==0) return;
+
+ String keyClassName = in.readUTF();
+ String valueClassName = in.readUTF();
+
+ K objK;
+ V objV;
+ try {
+ Class keyClass = Class.forName(keyClassName);
+ Class valueClass = Class.forName(valueClassName);
+ for (int i = 0; i < numEntries; i++) {
+ objK = (K) keyClass.newInstance();
+ objK.readFields(in);
+ objV = (V) valueClass.newInstance();
+ objV.readFields(in);
+ put(objK, objV);
+ }
+
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * Serializes this array.
+ *
+ * @param out
+ * where to write the raw byte representation
+ */
+ public void write(DataOutput out) throws IOException {
+ // Write out the number of entries in the map
+ out.writeInt(size());
+ if(size()==0) return;
+
+ // Write out the class names for keys and values
+ // assuming that data is homogeneuos (i.e., all entries have same types)
+ Set<Map.Entry<K, V>> entries = entrySet();
+ Map.Entry<K, V> first = entries.iterator().next();
+ K objK = first.getKey();
+ V objV = first.getValue();
+ out.writeUTF(objK.getClass().getCanonicalName());
+ out.writeUTF(objV.getClass().getCanonicalName());
+
+ // Then write out each key/value pair
+ for (Map.Entry<K, V> e: entrySet()) {
+ e.getKey().write(out);
+ e.getValue().write(out);
+ }
+ }
+
+}
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
new file mode 100644
index 0000000..ab62877
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/MessageWritable.java
@@ -0,0 +1,72 @@
+package edu.uci.ics.genomix.pregelix.io;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.hadoop.io.Writable;
+
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.pregelix.api.io.WritableSizable;
+
+public class MessageWritable implements Writable, WritableSizable {
+
+ private VKmerBytesWritable sourceVertexId; // stores srcNode id
+ private byte flag; // stores message type
+
+ public MessageWritable(){
+ sourceVertexId = new VKmerBytesWritable();
+ flag = 0;
+ }
+
+ public void reset(){
+ sourceVertexId.reset(0);
+ 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;
+ }
+
+ public void setSourceVertexId(VKmerBytesWritable sourceVertexId) {
+ this.sourceVertexId.setAsCopy(sourceVertexId);
+ }
+
+ public byte getFlag() {
+ return flag;
+ }
+
+ public void setFlag(byte flag) {
+ this.flag = flag;
+ }
+
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ sourceVertexId.readFields(in);
+ flag = in.readByte();
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ sourceVertexId.write(out);
+ out.writeByte(flag);
+ }
+
+ @Override
+ public int sizeInBytes() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/PathMergeMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/PathMergeMessageWritable.java
new file mode 100644
index 0000000..77d2bcd
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/PathMergeMessageWritable.java
@@ -0,0 +1,122 @@
+package edu.uci.ics.genomix.pregelix.io;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.genomix.type.EdgeListWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.PositionListWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+
+public class PathMergeMessageWritable extends MessageWritable{
+
+ private NodeWritable node;
+ private boolean isFlip; // use for path merge
+ private boolean updateMsg; // use for distinguish updateMsg or mergeMsg
+
+ public PathMergeMessageWritable(){
+ super();
+ node = new NodeWritable();
+ isFlip = false;
+ updateMsg = false;
+ }
+
+ public void reset(){
+ super.reset();
+ node.reset();
+ isFlip = false;
+ updateMsg = false;
+ }
+
+ public VKmerBytesWritable getInternalKmer() {
+ return node.getInternalKmer();
+ }
+
+ public void setInternalKmer(VKmerBytesWritable internalKmer) {
+ this.node.setInternalKmer(internalKmer);
+ }
+
+ public EdgeListWritable getEdgeList(byte dir) {
+ return node.getEdgeList((byte) (dir & DirectionFlag.DIR_MASK));
+ }
+
+ public EdgeWritable getNeighborEdge(){
+ for(byte d : DirectionFlag.values){
+ if(!getEdgeList(d).isEmpty())
+ return getEdgeList(d).get(0);
+ }
+ return null;
+ }
+
+ public void setEdgeList(byte dir, EdgeListWritable edgeList) {
+ this.node.setEdgeList((byte) (dir & DirectionFlag.DIR_MASK), edgeList);
+ }
+
+ public PositionListWritable getStartReads() {
+ return this.node.getStartReads();
+ }
+
+ public void setStartReads(PositionListWritable startReads) {
+ this.node.setStartReads(startReads);
+ }
+
+ public PositionListWritable getEndReads() {
+ return this.node.getEndReads();
+ }
+
+ public void setEndReads(PositionListWritable endReads) {
+ this.node.setEndReads(endReads);
+ }
+
+ public void setAvgCoverage(float coverage) {
+ this.node.setAvgCoverage(coverage);
+ }
+
+ public float getAvgCoverage() {
+ return this.node.getAvgCoverage();
+ }
+
+ public boolean isFlip() {
+ return isFlip;
+ }
+
+ public void setFlip(boolean isFlip) {
+ this.isFlip = isFlip;
+ }
+
+ public boolean isUpdateMsg() {
+ return updateMsg;
+ }
+
+ public void setUpdateMsg(boolean updateMsg) {
+ this.updateMsg = updateMsg;
+ }
+
+ public NodeWritable getNode() {
+ return node;
+ }
+
+ public void setNode(NodeWritable node) {
+ this.node.setAsCopy(node);
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ super.readFields(in);
+ node.readFields(in);
+ isFlip = in.readBoolean();
+ updateMsg = in.readBoolean();
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ super.write(out);
+ node.write(out);
+ out.writeBoolean(isFlip);
+ out.writeBoolean(updateMsg);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/SplitRepeatMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/SplitRepeatMessageWritable.java
new file mode 100644
index 0000000..bff2ff1
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/SplitRepeatMessageWritable.java
@@ -0,0 +1,56 @@
+package edu.uci.ics.genomix.pregelix.io;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.genomix.type.EdgeWritable;
+
+public class SplitRepeatMessageWritable extends MessageWritable {
+
+ private EdgeWritable createdEdge;
+ private EdgeWritable deletedEdge;
+
+ public SplitRepeatMessageWritable(){
+ super();
+ createdEdge = new EdgeWritable();
+ deletedEdge = new EdgeWritable();
+ }
+
+ public void reset(){
+ super.reset();
+ createdEdge.reset();
+ deletedEdge.reset();
+ }
+
+ public EdgeWritable getCreatedEdge() {
+ return createdEdge;
+ }
+
+ public void setCreatedEdge(EdgeWritable createdEdge) {
+ this.createdEdge.setAsCopy(createdEdge);
+ }
+
+ public EdgeWritable getDeletedEdge() {
+ return deletedEdge;
+ }
+
+ public void setDeletedEdge(EdgeWritable deletedEdge) {
+ this.deletedEdge.setAsCopy(deletedEdge);
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ super.readFields(in);
+ createdEdge.readFields(in);
+ deletedEdge.readFields(in);
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ super.write(out);
+ createdEdge.write(out);
+ deletedEdge.write(out);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
new file mode 100644
index 0000000..a8ceaf6
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
@@ -0,0 +1,201 @@
+package edu.uci.ics.genomix.pregelix.io;
+
+import java.io.*;
+
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.type.EdgeListWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+public class VertexValueWritable
+ extends NodeWritable{
+
+ private static final long serialVersionUID = 1L;
+
+ public static class State extends VertexStateFlag{
+ public static final byte HEAD_SHOULD_MERGEWITHPREV = 0b0 << 2; //use for initiating head
+ public static final byte HEAD_SHOULD_MERGEWITHNEXT = 0b1 << 2;
+ public static final byte HEAD_SHOULD_MERGE_MASK = 0b1 << 2;
+ public static final byte HEAD_SHOULD_MERGE_CLEAR = (byte) 11001011;
+
+ public static final byte NO_MERGE = 0b00 << 3;
+ public static final byte SHOULD_MERGEWITHNEXT = 0b01 << 3;
+ public static final byte SHOULD_MERGEWITHPREV = 0b10 << 3;
+ public static final byte SHOULD_MERGE_MASK = 0b11 << 3;
+ public static final byte SHOULD_MERGE_CLEAR = 0b1100111;
+
+ public static final byte UNCHANGE = 0b0 << 3;
+ public static final byte KILL = 0b1 << 3;
+ public static final byte KILL_MASK = 0b1 << 3;
+
+ public static final byte DIR_FROM_DEADVERTEX = 0b10 << 3;
+ public static final byte DEAD_MASK = 0b10 << 3;
+ }
+
+ public static class VertexStateFlag extends FakeFlag {
+ public static final byte IS_NON = 0b00 << 5;
+ public static final byte IS_HEAD = 0b01 << 5;
+ public static final byte IS_FINAL = 0b10 << 5;
+ public static final byte IS_OLDHEAD = 0b11 << 5;
+
+ public static final byte IS_HALT = 0b1111111;
+ public static final byte VERTEX_MASK = 0b11 << 5;
+ public static final byte VERTEX_CLEAR = (byte) 11001111;
+ }
+
+ public static class FakeFlag{
+ public static final byte IS_NONFAKE = 0 << 0;
+ public static final byte IS_FAKE = 1 << 0;
+
+ public static final byte FAKEFLAG_MASK = (byte) 00000001;
+ }
+
+ private byte state;
+ private boolean isFakeVertex;
+
+ public VertexValueWritable() {
+ super();
+ state = 0;
+ isFakeVertex = false;
+ }
+
+ public void setNode(NodeWritable node){
+ super.setAsCopy(node.getEdges(), node.getStartReads(), node.getEndReads(),
+ node.getInternalKmer(), node.getAverageCoverage());
+ }
+
+ public EdgeListWritable getFFList() {
+ return getEdgeList(DirectionFlag.DIR_FF);
+ }
+
+ public EdgeListWritable getFRList() {
+ return getEdgeList(DirectionFlag.DIR_FR);
+ }
+
+ public EdgeListWritable getRFList() {
+ return getEdgeList(DirectionFlag.DIR_RF);
+ }
+
+ public EdgeListWritable getRRList() {
+ return getEdgeList(DirectionFlag.DIR_RR);
+ }
+
+ public void setFFList(EdgeListWritable forwardForwardList){
+ setEdgeList(DirectionFlag.DIR_FF, forwardForwardList);
+ }
+
+ public void setFRList(EdgeListWritable forwardReverseList){
+ setEdgeList(DirectionFlag.DIR_FR, forwardReverseList);
+ }
+
+ public void setRFList(EdgeListWritable reverseForwardList){
+ setEdgeList(DirectionFlag.DIR_RF, reverseForwardList);
+ }
+
+ public void setRRList(EdgeListWritable reverseReverseList){
+ setEdgeList(DirectionFlag.DIR_RR, reverseReverseList);
+ }
+
+ public AdjacencyListWritable getIncomingList() {
+ AdjacencyListWritable incomingList = new AdjacencyListWritable();
+ incomingList.setForwardList(getRFList());
+ incomingList.setReverseList(getRRList());
+ return incomingList;
+ }
+
+ public void setIncomingList(AdjacencyListWritable incomingList) {
+ this.setRFList(incomingList.getForwardList());
+ this.setRRList(incomingList.getReverseList());
+ }
+
+ public AdjacencyListWritable getOutgoingList() {
+ AdjacencyListWritable outgoingList = new AdjacencyListWritable();
+ outgoingList.setForwardList(getFFList());
+ outgoingList.setReverseList(getFRList());
+ return outgoingList;
+ }
+
+ public void setOutgoingList(AdjacencyListWritable outgoingList) {
+ this.setFFList(outgoingList.getForwardList());
+ this.setFRList(outgoingList.getReverseList());
+ }
+
+ public byte getState() {
+ return state;
+ }
+
+ public boolean isFakeVertex() {
+ return isFakeVertex;
+ }
+
+ public void setFakeVertex(boolean isFakeVertex) {
+ this.isFakeVertex = isFakeVertex;
+ }
+
+ public void setState(byte state) {
+ this.state = state;
+ }
+
+ public void reset() {
+ super.reset();
+ this.state = 0;
+ this.isFakeVertex = false;
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ reset();
+ super.readFields(in);
+ this.state = in.readByte();
+ this.isFakeVertex = in.readBoolean();
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ super.write(out);
+ out.writeByte(this.state);
+ out.writeBoolean(this.isFakeVertex);
+ }
+
+ public int getDegree(){
+ return inDegree() + outDegree();
+ }
+
+ /**
+ * check if prev/next destination exists
+ */
+ public boolean hasPrevDest(){
+ return !getRFList().isEmpty() || !getRRList().isEmpty();
+ }
+
+ public boolean hasNextDest(){
+ return !getFFList().isEmpty() || !getFRList().isEmpty();
+ }
+
+ /**
+ * Delete the corresponding edge
+ */
+ public void processDelete(byte neighborToDeleteDir, EdgeWritable nodeToDelete){
+ byte dir = (byte)(neighborToDeleteDir & MessageFlag.DIR_MASK);
+ this.getEdgeList(dir).remove(nodeToDelete);
+ }
+
+ /**
+ * Process any changes to value. This is for edge updates. nodeToAdd should be only edge
+ */
+ public void processUpdates(byte deleteDir, VKmerBytesWritable toDelete, byte updateDir, NodeWritable other){
+ this.getNode().updateEdges(deleteDir, toDelete, updateDir, other);
+ }
+
+ /**
+ * Process any changes to value. This is for merging. nodeToAdd should be only edge
+ */
+ public void processMerges(byte mergeDir, NodeWritable node, int kmerSize){
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+ mergeDir = (byte)(mergeDir & MessageFlag.DIR_MASK);
+ super.getNode().mergeWithNode(mergeDir, node);
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java
new file mode 100644
index 0000000..0a3abc4
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/DataLoadLogFormatter.java
@@ -0,0 +1,33 @@
+package edu.uci.ics.genomix.pregelix.log;
+
+import java.util.logging.Formatter;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+
+import edu.uci.ics.genomix.type.NodeWritable;
+
+public class DataLoadLogFormatter extends Formatter {
+ private NodeWritable key;
+
+ public void set(NodeWritable key) {
+ this.key.setAsCopy(key);
+ }
+
+ public String format(LogRecord record) {
+ StringBuilder builder = new StringBuilder(1000);
+
+ builder.append(key.toString() + "\r\n");
+
+ if (!formatMessage(record).equals(""))
+ builder.append(formatMessage(record) + "\r\n");
+ return builder.toString();
+ }
+
+ public String getHead(Handler h) {
+ return super.getHead(h);
+ }
+
+ public String getTail(Handler h) {
+ return super.getTail(h);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
new file mode 100644
index 0000000..065e181
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
@@ -0,0 +1,100 @@
+package edu.uci.ics.genomix.pregelix.log;
+
+import java.util.logging.*;
+
+import edu.uci.ics.genomix.pregelix.io.MessageWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+
+public class LogAlgorithmLogFormatter extends Formatter {
+ //
+ // Create a DateFormat to format the logger timestamp.
+ //
+ private long step;
+ private KmerBytesWritable sourceVertexId = new KmerBytesWritable();
+ private KmerBytesWritable destVertexId = new KmerBytesWritable();
+ private KmerBytesWritable mergeChain = new KmerBytesWritable();
+ //private boolean testDelete = false;
+ /**
+ * 0: general operation
+ * 1: testDelete
+ * 2: testMergeChain
+ * 3: testVoteToHalt
+ */
+ private int operation;
+
+ public LogAlgorithmLogFormatter() {
+ }
+
+ public void set(long step, KmerBytesWritable sourceVertexId, KmerBytesWritable destVertexId,
+ MessageWritable msg, byte state) {
+ this.step = step;
+ this.sourceVertexId.setAsCopy(sourceVertexId);
+ this.destVertexId.setAsCopy(destVertexId);
+ this.operation = 0;
+ }
+
+ public void setMergeChain(long step, KmerBytesWritable sourceVertexId, KmerBytesWritable mergeChain) {
+ this.reset();
+ this.step = step;
+ this.sourceVertexId.setAsCopy(sourceVertexId);
+ this.mergeChain.setAsCopy(mergeChain);
+ this.operation = 2;
+ }
+
+ public void setVotoToHalt(long step, KmerBytesWritable sourceVertexId) {
+ this.reset();
+ this.step = step;
+ this.sourceVertexId.setAsCopy(sourceVertexId);
+ this.operation = 3;
+ }
+
+ public void reset() {
+ this.sourceVertexId = new KmerBytesWritable();
+ this.destVertexId = new KmerBytesWritable();
+ this.mergeChain = new KmerBytesWritable();
+ }
+
+ public String format(LogRecord record) {
+ StringBuilder builder = new StringBuilder(1000);
+ String source = sourceVertexId.toString();
+ String chain = "";
+
+ builder.append("Step: " + step + "\r\n");
+ builder.append("Source Code: " + source + "\r\n");
+ if (operation == 0) {
+ if (KmerBytesWritable.getKmerLength() != -1) {
+ String dest = destVertexId.toString();
+ builder.append("Send message to " + "\r\n");
+ builder.append("Destination Code: " + dest + "\r\n");
+ }
+
+ }
+ if (operation == 2) {
+ chain = mergeChain.toString();
+ builder.append("Merge Chain: " + chain + "\r\n");
+ builder.append("Merge Chain Length: " + KmerBytesWritable.getKmerLength() + "\r\n");
+ }
+ if (operation == 3)
+ builder.append("Vote to halt!");
+ if (!formatMessage(record).equals(""))
+ builder.append(formatMessage(record) + "\r\n");
+ builder.append("\n");
+ return builder.toString();
+ }
+
+ public String getHead(Handler h) {
+ return super.getHead(h);
+ }
+
+ public String getTail(Handler h) {
+ return super.getTail(h);
+ }
+
+ public int getOperation() {
+ return operation;
+ }
+
+ public void setOperation(int operation) {
+ this.operation = operation;
+ }
+}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
new file mode 100644
index 0000000..6b23074
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/NaiveAlgorithmLogFormatter.java
@@ -0,0 +1,47 @@
+package edu.uci.ics.genomix.pregelix.log;
+
+import java.util.logging.*;
+
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+
+public class NaiveAlgorithmLogFormatter extends Formatter {
+ //
+ // Create a DateFormat to format the logger timestamp.
+ //
+ //private static final DateFormat df = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
+ private long step;
+ private KmerBytesWritable sourceVertexId;
+ private KmerBytesWritable destVertexId;
+
+ public void set(long step, KmerBytesWritable sourceVertexId, KmerBytesWritable destVertexId) {
+ this.step = step;
+ this.sourceVertexId.setAsCopy(sourceVertexId);
+ this.destVertexId.setAsCopy(destVertexId);
+ }
+
+ public String format(LogRecord record) {
+ StringBuilder builder = new StringBuilder(1000);
+ String source = sourceVertexId.toString();
+
+ builder.append("Step: " + step + "\r\n");
+ builder.append("Source Code: " + source + "\r\n");
+
+ if (destVertexId != null) {
+ builder.append("Send message to " + "\r\n");
+ String dest = destVertexId.toString();
+ builder.append("Destination Code: " + dest + "\r\n");
+ }
+ if (!formatMessage(record).equals(""))
+ builder.append(formatMessage(record) + "\r\n");
+ builder.append("\n");
+ return builder.toString();
+ }
+
+ public String getHead(Handler h) {
+ return super.getHead(h);
+ }
+
+ public String getTail(Handler h) {
+ return super.getTail(h);
+ }
+}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
new file mode 100644
index 0000000..7a1dec5
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
@@ -0,0 +1,637 @@
+package edu.uci.ics.genomix.pregelix.operator;
+
+import java.util.Iterator;
+import java.util.Random;
+
+import org.apache.hadoop.io.NullWritable;
+
+import edu.uci.ics.pregelix.api.graph.Vertex;
+import edu.uci.ics.pregelix.api.util.BspUtils;
+import edu.uci.ics.genomix.pregelix.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerListWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+
+public abstract class BasicGraphCleanVertex<M extends MessageWritable> extends
+ Vertex<VKmerBytesWritable, VertexValueWritable, NullWritable, M> {
+ public static final String KMER_SIZE = "BasicGraphCleanVertex.kmerSize";
+ public static final String ITERATIONS = "BasicGraphCleanVertex.iteration";
+ public static int kmerSize = -1;
+ public static int maxIteration = -1;
+
+ protected M incomingMsg = null;
+ protected M outgoingMsg = null;
+ protected VKmerBytesWritable destVertexId = null;
+ protected Iterator<VKmerBytesWritable> kmerIterator;
+ protected VKmerListWritable kmerList = null;
+ protected VKmerBytesWritable repeatKmer = null; //for detect tandemRepeat
+ protected byte repeatDir; //for detect tandemRepeat
+ protected VKmerBytesWritable tmpKmer = null;
+ protected byte headFlag;
+ protected byte outFlag;
+ protected byte inFlag;
+ protected byte selfFlag;
+ protected byte headMergeDir;
+
+ public static boolean fakeVertexExist = false;
+ protected static VKmerBytesWritable fakeVertex = null;
+ protected VertexValueWritable tmpValue = new VertexValueWritable();
+
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ }
+
+ /**
+ * reset headFlag
+ */
+ public void resetHeadFlag(){
+ headFlag = (byte)(getVertexValue().getState() & State.IS_HEAD);
+ }
+
+ public byte getHeadFlag(){
+ return (byte)(getVertexValue().getState() & State.IS_HEAD);
+ }
+
+ /**
+ * reset selfFlag
+ */
+ public void resetSelfFlag(){
+ selfFlag = (byte)(getVertexValue().getState() & MessageFlag.VERTEX_MASK);
+ }
+
+ /**
+ * get Vertex state
+ */
+ public byte getMsgFlag(){
+ return (byte)(incomingMsg.getFlag() & MessageFlag.VERTEX_MASK);
+ }
+
+ public byte getHeadMergeDir(){
+ return (byte) (getVertexValue().getState() & State.HEAD_SHOULD_MERGE_MASK);
+ }
+
+ public byte getHeadFlagAndMergeDir(){
+ byte flagAndMergeDir = (byte)(getVertexValue().getState() & State.IS_HEAD);
+ flagAndMergeDir |= (byte)(getVertexValue().getState() & State.HEAD_SHOULD_MERGE_MASK);
+ return flagAndMergeDir;
+ }
+
+ public byte getMsgFlagAndMergeDir(){
+ byte flagAndMergeDir = (byte)(getVertexValue().getState() & State.IS_HEAD);
+ byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ case MessageFlag.DIR_FR:
+ flagAndMergeDir |= MessageFlag.HEAD_SHOULD_MERGEWITHPREV;
+ break;
+ case MessageFlag.DIR_RF:
+ case MessageFlag.DIR_RR:
+ flagAndMergeDir |= MessageFlag.HEAD_SHOULD_MERGEWITHNEXT;
+ break;
+ }
+ return flagAndMergeDir;
+ }
+
+ /**
+ * set head state
+ */
+ public void setHeadState(){
+ byte state = getVertexValue().getState();
+ state &= State.VERTEX_CLEAR;
+ state |= State.IS_HEAD;
+ getVertexValue().setState(state);
+ }
+
+ /**
+ * set final state
+ */
+ public void setFinalState(){
+ byte state = getVertexValue().getState();
+ state &= State.VERTEX_CLEAR;
+ state |= State.IS_FINAL;
+ getVertexValue().setState(state);
+ this.activate();
+ }
+
+ /**
+ * set stop flag
+ */
+ public void setStopFlag(){
+ byte state = getVertexValue().getState();
+ state &= State.VERTEX_CLEAR;
+ state |= State.IS_FINAL;
+ getVertexValue().setState(state);
+ }
+
+ public boolean isHaltNode(){
+ return getVertexValue().getState() == State.IS_HALT;
+ }
+
+ /**
+ * check the message type
+ */
+ public boolean isReceiveKillMsg(){
+ byte killFlag = (byte) (incomingMsg.getFlag() & MessageFlag.KILL_MASK);
+ byte deadFlag = (byte) (incomingMsg.getFlag() & MessageFlag.DEAD_MASK);
+ return killFlag == MessageFlag.KILL & deadFlag != MessageFlag.DIR_FROM_DEADVERTEX;
+ }
+
+ public boolean isResponseKillMsg(){
+ byte killFlag = (byte) (incomingMsg.getFlag() & MessageFlag.KILL_MASK);
+ byte deadFlag = (byte) (incomingMsg.getFlag() & MessageFlag.DEAD_MASK);
+ return killFlag == MessageFlag.KILL & deadFlag == MessageFlag.DIR_FROM_DEADVERTEX;
+ }
+
+ public boolean isHeadNode(){
+ return selfFlag == State.IS_HEAD;
+ }
+
+ public boolean isPathNode(){
+ return selfFlag != State.IS_HEAD && selfFlag != State.IS_OLDHEAD;
+ }
+
+ /**
+ * get destination vertex
+ */
+ public VKmerBytesWritable getPrevDestVertexId() {
+ if (!getVertexValue().getRFList().isEmpty()){ //#RFList() > 0
+ kmerIterator = getVertexValue().getRFList().getKeys();
+ return kmerIterator.next();
+ } else if (!getVertexValue().getRRList().isEmpty()){ //#RRList() > 0
+ kmerIterator = getVertexValue().getRRList().getKeys();
+ return kmerIterator.next();
+ } else {
+ return null;
+ }
+ }
+
+ public VKmerBytesWritable getNextDestVertexId() {
+ if (!getVertexValue().getFFList().isEmpty()){ //#FFList() > 0
+ kmerIterator = getVertexValue().getFFList().getKeys();
+ return kmerIterator.next();
+ } else if (!getVertexValue().getFRList().isEmpty()){ //#FRList() > 0
+ kmerIterator = getVertexValue().getFRList().getKeys();
+ return kmerIterator.next();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * get destination vertex
+ */
+ public VKmerBytesWritable getPrevDestVertexIdAndSetFlag() {
+ if (!getVertexValue().getRFList().isEmpty()){ // #RFList() > 0
+ kmerIterator = getVertexValue().getRFList().getKeys();
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= MessageFlag.DIR_RF;
+ return kmerIterator.next();
+ } else if (!getVertexValue().getRRList().isEmpty()){ // #RRList() > 0
+ kmerIterator = getVertexValue().getRRList().getKeys();
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= MessageFlag.DIR_RR;
+ return kmerIterator.next();
+ } else {
+ return null;
+ }
+ }
+
+ public VKmerBytesWritable getNextDestVertexIdAndSetFlag() {
+ if (!getVertexValue().getFFList().isEmpty()){ // #FFList() > 0
+ kmerIterator = getVertexValue().getFFList().getKeys();
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= MessageFlag.DIR_FF;
+ return kmerIterator.next();
+ } else if (!getVertexValue().getFRList().isEmpty()){ // #FRList() > 0
+ kmerIterator = getVertexValue().getFRList().getKeys();
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= MessageFlag.DIR_FR;
+ return kmerIterator.next();
+ } else {
+ return null;
+ }
+
+ }
+
+ /**
+ * head send message to all previous nodes
+ */
+ public void sendMsgToAllPreviousNodes() {
+ kmerIterator = getVertexValue().getRFList().getKeys(); // RFList
+ while(kmerIterator.hasNext()){
+ destVertexId.setAsCopy(kmerIterator.next());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ kmerIterator = getVertexValue().getRRList().getKeys(); // RRList
+ while(kmerIterator.hasNext()){
+ destVertexId.setAsCopy(kmerIterator.next());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+
+ /**
+ * head send message to all next nodes
+ */
+ public void sendMsgToAllNextNodes() {
+ kmerIterator = getVertexValue().getFFList().getKeys(); // FFList
+ while(kmerIterator.hasNext()){
+ destVertexId.setAsCopy(kmerIterator.next());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ kmerIterator = getVertexValue().getFRList().getKeys(); // FRList
+ while(kmerIterator.hasNext()){
+ destVertexId.setAsCopy(kmerIterator.next());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+
+ /**
+ * one vertex send message to previous and next vertices (neighbor)
+ */
+ public void sendMsgToAllNeighborNodes(){
+ sendMsgToAllNextNodes();
+ sendMsgToAllPreviousNodes();
+ }
+
+ /**
+ * tip send message with sourceId and dir to previous node
+ * tip only has one incoming
+ */
+ public void sendSettledMsgToPrevNode(){
+ if(getVertexValue().hasPrevDest()){
+ if(!getVertexValue().getRFList().isEmpty())
+ outgoingMsg.setFlag(MessageFlag.DIR_RF);
+ else if(!getVertexValue().getRRList().isEmpty())
+ outgoingMsg.setFlag(MessageFlag.DIR_RR);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ destVertexId.setAsCopy(getPrevDestVertexId());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+
+ /**
+ * tip send message with sourceId and dir to next node
+ * tip only has one outgoing
+ */
+ public void sendSettledMsgToNextNode(){
+ if(getVertexValue().hasNextDest()){
+ if(!getVertexValue().getFFList().isEmpty())
+ outgoingMsg.setFlag(MessageFlag.DIR_FF);
+ else if(!getVertexValue().getFRList().isEmpty())
+ outgoingMsg.setFlag(MessageFlag.DIR_FR);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ destVertexId.setAsCopy(getNextDestVertexId());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+
+ /**
+ * head send message to all previous nodes
+ */
+ public void sendSettledMsgToAllPrevNodes(VertexValueWritable value) {
+ kmerIterator = value.getRFList().getKeys(); // RFList
+ while(kmerIterator.hasNext()){
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= MessageFlag.DIR_RF;
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ destVertexId.setAsCopy(kmerIterator.next());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ kmerIterator = value.getRRList().getKeys(); // RRList
+ while(kmerIterator.hasNext()){
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= MessageFlag.DIR_RR;
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ destVertexId.setAsCopy(kmerIterator.next());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+
+ /**
+ * head send message to all next nodes
+ */
+ public void sendSettledMsgToAllNextNodes(VertexValueWritable value) {
+ kmerIterator = value.getFFList().getKeys(); // FFList
+ while(kmerIterator.hasNext()){
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= MessageFlag.DIR_FF;
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ destVertexId.setAsCopy(kmerIterator.next());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ kmerIterator = value.getFRList().getKeys(); // FRList
+ while(kmerIterator.hasNext()){
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= MessageFlag.DIR_FR;
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ destVertexId.setAsCopy(kmerIterator.next());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+
+ public void sendSettledMsgToAllNeighborNodes(VertexValueWritable value) {
+ sendSettledMsgToAllPrevNodes(value);
+ sendSettledMsgToAllNextNodes(value);
+ }
+
+ /**
+ * start sending message
+ */
+ public void startSendMsg() {
+ if(isTandemRepeat()){
+ tmpValue.setAsCopy(getVertexValue());
+ tmpValue.getEdgeList(repeatDir).remove(repeatKmer);
+ outFlag = 0;
+ outFlag |= MessageFlag.IS_HEAD;
+ sendSettledMsgToAllNeighborNodes(tmpValue);
+ } else{
+ if (VertexUtil.isVertexWithOnlyOneIncoming(getVertexValue())){
+ outFlag = 0;
+ outFlag |= MessageFlag.IS_HEAD;
+ outFlag |= MessageFlag.HEAD_SHOULD_MERGEWITHPREV;
+ getVertexValue().setState(outFlag);
+ activate();
+ }
+ if (VertexUtil.isVertexWithOnlyOneOutgoing(getVertexValue())){
+ outFlag = 0;
+ outFlag |= MessageFlag.IS_HEAD;
+ outFlag |= MessageFlag.HEAD_SHOULD_MERGEWITHNEXT;
+ getVertexValue().setState(outFlag);
+ activate();
+ }
+ if (VertexUtil.isVertexWithManyIncoming(getVertexValue())) {
+ outFlag = 0;
+ outFlag |= MessageFlag.IS_HEAD;
+ sendSettledMsgToAllPrevNodes(getVertexValue());
+ }
+ if (VertexUtil.isVertexWithManyOutgoing(getVertexValue())) {
+ outFlag = 0;
+ outFlag |= MessageFlag.IS_HEAD;
+ sendSettledMsgToAllNextNodes(getVertexValue());
+ }
+ }
+ if(!VertexUtil.isActiveVertex(getVertexValue())
+ || isTandemRepeat()){
+ getVertexValue().setState(MessageFlag.IS_HALT);
+ voteToHalt();
+ }
+ }
+
+ public void setHeadMergeDir(){
+ byte state = MessageFlag.IS_HEAD;
+ byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ case MessageFlag.DIR_FR:
+ state |= MessageFlag.HEAD_SHOULD_MERGEWITHPREV;
+ break;
+ case MessageFlag.DIR_RF:
+ case MessageFlag.DIR_RR:
+ state |= MessageFlag.HEAD_SHOULD_MERGEWITHNEXT;
+ break;
+ }
+ getVertexValue().setState(state);
+ }
+ /**
+ * initiate head, rear and path node
+ */
+ public void initState(Iterator<M> msgIterator) {
+ while (msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ if(getHeadFlag() != MessageFlag.IS_HEAD && !isTandemRepeat()){
+ setHeadMergeDir();
+ activate();
+ } else if(getHeadFlagAndMergeDir() == getMsgFlagAndMergeDir()){
+ activate();
+ } else{ /** already set up **/
+ /** if headMergeDir are not the same **/
+ getVertexValue().setState(MessageFlag.IS_HALT);
+ voteToHalt();
+ }
+ }
+ }
+
+ /**
+ * check if A need to be filpped with predecessor
+ */
+ public boolean ifFlipWithPredecessor(){
+ if(!getVertexValue().getRFList().isEmpty())
+ return true;
+ else
+ return false;
+ }
+
+ public boolean ifFlipWithPredecessor(VKmerBytesWritable toFind){
+ if(getVertexValue().getRFList().contains(toFind))
+ return true;
+ else
+ return false;
+ }
+
+ /**
+ * check if A need to be flipped with successor
+ */
+ public boolean ifFilpWithSuccessor(){
+ if(!getVertexValue().getFRList().isEmpty())
+ return true;
+ else
+ return false;
+ }
+
+ public boolean ifFilpWithSuccessor(VKmerBytesWritable toFind){
+ if(getVertexValue().getFRList().contains(toFind))
+ return true;
+ else
+ return false;
+ }
+
+ /**
+ * set adjMessage to predecessor(from successor)
+ */
+ public void setPredecessorAdjMsg(){
+ outFlag &= MessageFlag.DIR_CLEAR;
+ if(!getVertexValue().getRFList().isEmpty())
+ outFlag |= MessageFlag.DIR_RF;
+ else if(!getVertexValue().getRRList().isEmpty())
+ outFlag |= MessageFlag.DIR_RR;
+ }
+
+ public void setPredecessorAdjMsg(VKmerBytesWritable toFind){
+ outFlag &= MessageFlag.DIR_CLEAR;
+ if(getVertexValue().getRFList().contains(toFind))
+ outFlag |= MessageFlag.DIR_RF;
+ else if(getVertexValue().getRRList().contains(toFind))
+ outFlag |= MessageFlag.DIR_RR;
+ }
+
+ /**
+ * set adjMessage to successor(from predecessor)
+ */
+ public void setSuccessorAdjMsg(){
+ outFlag &= MessageFlag.DIR_CLEAR;
+ if(!getVertexValue().getFFList().isEmpty())
+ outFlag |= MessageFlag.DIR_FF;
+ else if(!getVertexValue().getFRList().isEmpty())
+ outFlag |= MessageFlag.DIR_FR;
+ }
+
+ public void setSuccessorAdjMsg(VKmerBytesWritable toFind){
+ outFlag &= MessageFlag.DIR_CLEAR;
+ if(getVertexValue().getFFList().contains(toFind))
+ outFlag |= MessageFlag.DIR_FF;
+ else if(getVertexValue().getFRList().contains(toFind))
+ outFlag |= MessageFlag.DIR_FR;
+ }
+
+ /**
+ * set state as no_merge
+ */
+ public void setStateAsNoMerge(){
+ byte state = getVertexValue().getState();
+ //state |= State.SHOULD_MERGE_CLEAR;
+ state |= State.NO_MERGE;
+ getVertexValue().setState(state);
+ }
+
+ /**
+ * Returns the edge dir for B->A when the A->B edge is type @dir
+ */
+ public byte mirrorDirection(byte dir) {
+ switch (dir) {
+ case MessageFlag.DIR_FF:
+ return MessageFlag.DIR_RR;
+ case MessageFlag.DIR_FR:
+ return MessageFlag.DIR_FR;
+ case MessageFlag.DIR_RF:
+ return MessageFlag.DIR_RF;
+ case MessageFlag.DIR_RR:
+ return MessageFlag.DIR_FF;
+ default:
+ throw new RuntimeException("Unrecognized direction in flipDirection: " + dir);
+ }
+ }
+
+ /**
+ * check if need filp
+ */
+ public byte flipDirection(byte neighborDir, boolean flip){
+ if(flip){
+ switch (neighborDir) {
+ case MessageFlag.DIR_FF:
+ return MessageFlag.DIR_FR;
+ case MessageFlag.DIR_FR:
+ return MessageFlag.DIR_FF;
+ case MessageFlag.DIR_RF:
+ return MessageFlag.DIR_RR;
+ case MessageFlag.DIR_RR:
+ return MessageFlag.DIR_RF;
+ default:
+ throw new RuntimeException("Unrecognized direction for neighborDir: " + neighborDir);
+ }
+ } else
+ return neighborDir;
+ }
+
+ /**
+ * broadcast kill self to all neighbers ***
+ */
+ public void broadcaseKillself(){
+ outFlag = 0;
+ outFlag |= MessageFlag.KILL;
+ outFlag |= MessageFlag.DIR_FROM_DEADVERTEX;
+
+ sendSettledMsgToAllNeighborNodes(getVertexValue());
+
+ deleteVertex(getVertexId());
+ }
+
+ /**
+ * do some remove operations on adjMap after receiving the info about dead Vertex
+ */
+ public void responseToDeadVertex(){
+ byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+
+ getVertexValue().getEdgeList(neighborToMeDir).remove(incomingMsg.getSourceVertexId());
+ }
+
+ /**
+ * Generate random string from [ACGT]
+ */
+ public String generaterRandomString(int n){
+ char[] chars = "ACGT".toCharArray();
+ StringBuilder sb = new StringBuilder();
+ Random random = new Random();
+ for (int i = 0; i < n; i++) {
+ char c = chars[random.nextInt(chars.length)];
+ sb.append(c);
+ }
+ return sb.toString();
+ }
+ /**
+ * add fake vertex
+ */
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public void addFakeVertex(){
+ if(!fakeVertexExist){
+ //add a fake vertex
+ Vertex vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
+ vertex.getMsgList().clear();
+ vertex.getEdges().clear();
+ VertexValueWritable vertexValue = new VertexValueWritable();//kmerSize + 1
+ vertexValue.setState(State.IS_FAKE);
+ vertexValue.setFakeVertex(true);
+
+ vertex.setVertexId(fakeVertex);
+ vertex.setVertexValue(vertexValue);
+
+ addVertex(fakeVertex, vertex);
+ fakeVertexExist = true;
+ }
+ }
+
+ /**
+ * check if it is a tandem repeat
+ */
+ public boolean isTandemRepeat(){
+ for(byte d : DirectionFlag.values){
+ Iterator<VKmerBytesWritable> it = getVertexValue().getEdgeList(d).getKeys();
+ while(it.hasNext()){
+ repeatKmer.setAsCopy(it.next());
+ if(repeatKmer.equals(getVertexId())){
+ repeatDir = d;
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public byte flipDir(byte dir){
+ switch(dir){
+ case DirectionFlag.DIR_FF:
+ return DirectionFlag.DIR_RF;
+ case DirectionFlag.DIR_FR:
+ return DirectionFlag.DIR_RR;
+ case DirectionFlag.DIR_RF:
+ return DirectionFlag.DIR_FF;
+ case DirectionFlag.DIR_RR:
+ return DirectionFlag.DIR_FR;
+ default:
+ throw new RuntimeException("Unrecognized direction in flipDirection: " + dir);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
new file mode 100644
index 0000000..1e482bc
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
@@ -0,0 +1,169 @@
+package edu.uci.ics.genomix.pregelix.operator.bridgeremove;
+
+import java.util.Iterator;
+import org.apache.hadoop.io.NullWritable;
+
+import edu.uci.ics.genomix.type.EdgeListWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+import edu.uci.ics.pregelix.api.graph.Vertex;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+import edu.uci.ics.pregelix.api.util.BspUtils;
+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.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+
+/*
+ * vertexId: BytesWritable
+ * vertexValue: ByteWritable
+ * edgeValue: NullWritable
+ * message: MessageWritable
+ *
+ * DNA:
+ * A: 00
+ * C: 01
+ * G: 10
+ * T: 11
+ *
+ * succeed node
+ * A 00000001 1
+ * G 00000010 2
+ * C 00000100 4
+ * T 00001000 8
+ * precursor node
+ * A 00010000 16
+ * G 00100000 32
+ * C 01000000 64
+ * T 10000000 128
+ *
+ * For example, ONE LINE in input file: 00,01,10 0001,0010,
+ * That means that vertexId is ACG, its succeed node is A and its precursor node is C.
+ * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
+ * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable.
+ */
+/**
+ * Naive Algorithm for path merge graph
+ */
+public class BridgeAddVertex extends
+ Vertex<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> {
+ public static final String KMER_SIZE = "BasicGraphCleanVertex.kmerSize";
+ public static final String LENGTH = "BasicGraphCleanVertex.length";
+ public static int kmerSize = -1;
+ private int length = -1;
+
+ private VKmerBytesWritable upBridge = new VKmerBytesWritable("ATA");
+ private VKmerBytesWritable downBridge = new VKmerBytesWritable("ACG");
+ private VKmerBytesWritable insertedBridge = new VKmerBytesWritable("GTA");
+ private byte bridgeToUpDir = MessageFlag.DIR_FR;
+ private byte bridgeToDownDir = MessageFlag.DIR_RF;
+
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ if (kmerSize == -1) {
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ KmerBytesWritable.setGlobalKmerLength(kmerSize);
+ }
+ if (length == -1)
+ length = getContext().getConfiguration().getInt(LENGTH, kmerSize + 5); // TODO fail on parse
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void insertBridge(byte dirToUp, EdgeListWritable edgeListToUp, byte dirToDown,
+ EdgeListWritable edgeListToDown, VKmerBytesWritable insertedBridge){
+ Vertex vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
+ vertex.getMsgList().clear();
+ vertex.getEdges().clear();
+
+ VertexValueWritable vertexValue = new VertexValueWritable(); //kmerSize
+ /**
+ * set the src vertex id
+ */
+ vertex.setVertexId(insertedBridge);
+ /**
+ * set the vertex value
+ */
+ vertexValue.setEdgeList(dirToUp, edgeListToUp);
+ vertexValue.setEdgeList(dirToDown, edgeListToDown);
+ vertex.setVertexValue(vertexValue);
+
+ addVertex(insertedBridge, vertex);
+ }
+
+ public EdgeListWritable getEdgeListFromKmer(VKmerBytesWritable kmer){
+ EdgeListWritable edgeList = new EdgeListWritable();
+ EdgeWritable newEdge = new EdgeWritable();
+ newEdge.setKey(kmer);
+ newEdge.appendReadID(0);
+ edgeList.add(newEdge);
+ return edgeList;
+ }
+
+ public void addEdgeToInsertedBridge(byte dir, VKmerBytesWritable insertedBridge){
+ EdgeWritable newEdge = new EdgeWritable();
+ newEdge.setKey(insertedBridge);
+ newEdge.appendReadID(0);
+ getVertexValue().getEdgeList(dir).add(newEdge);
+ }
+
+ /**
+ * Returns the edge dir for B->A when the A->B edge is type @dir
+ */
+ public byte mirrorDirection(byte dir) {
+ switch (dir) {
+ case MessageFlag.DIR_FF:
+ return MessageFlag.DIR_RR;
+ case MessageFlag.DIR_FR:
+ return MessageFlag.DIR_FR;
+ case MessageFlag.DIR_RF:
+ return MessageFlag.DIR_RF;
+ case MessageFlag.DIR_RR:
+ return MessageFlag.DIR_FF;
+ default:
+ throw new RuntimeException("Unrecognized direction in flipDirection: " + dir);
+ }
+ }
+
+ @Override
+ public void compute(Iterator<MessageWritable> msgIterator) {
+ initVertex();
+ if(getSuperstep() == 1){
+ if(getVertexId().toString().equals("ATA")){
+ /** add edge pointing to inserted bridge **/
+ byte upToBridgeDir = mirrorDirection(bridgeToUpDir);
+ addEdgeToInsertedBridge(upToBridgeDir, insertedBridge);
+
+ /** insert bridge **/
+ insertBridge(bridgeToUpDir, getEdgeListFromKmer(upBridge),
+ bridgeToDownDir, getEdgeListFromKmer(downBridge),
+ insertedBridge);
+ }
+ else if(getVertexId().toString().equals("ACG")){
+ /** add edge pointing to new bridge **/
+ byte downToBridgeDir = mirrorDirection(bridgeToDownDir);
+ addEdgeToInsertedBridge(downToBridgeDir, insertedBridge);
+ }
+ }
+ voteToHalt();
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(BridgeAddVertex.class.getSimpleName());
+ job.setVertexClass(BridgeAddVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(KmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java
new file mode 100644
index 0000000..55facb7
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeRemoveVertex.java
@@ -0,0 +1,122 @@
+package edu.uci.ics.genomix.pregelix.operator.bridgeremove;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+import edu.uci.ics.genomix.type.PositionWritable;
+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.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+/*
+ * vertexId: BytesWritable
+ * vertexValue: ByteWritable
+ * edgeValue: NullWritable
+ * message: MessageWritable
+ *
+ * DNA:
+ * A: 00
+ * C: 01
+ * G: 10
+ * T: 11
+ *
+ * succeed node
+ * A 00000001 1
+ * G 00000010 2
+ * C 00000100 4
+ * T 00001000 8
+ * precursor node
+ * A 00010000 16
+ * G 00100000 32
+ * C 01000000 64
+ * T 10000000 128
+ *
+ * For example, ONE LINE in input file: 00,01,10 0001,0010,
+ * That means that vertexId is ACG, its succeed node is A and its precursor node is C.
+ * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
+ * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable.
+ */
+/**
+ * Naive Algorithm for path merge graph
+ */
+public class BridgeRemoveVertex extends
+ BasicGraphCleanVertex<MessageWritable> {
+ public static final String LENGTH = "BridgeRemoveVertex.length";
+ private int length = -1;
+
+ private ArrayList<MessageWritable> receivedMsgList = new ArrayList<MessageWritable>();
+
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if(length == -1)
+ length = getContext().getConfiguration().getInt(LENGTH, kmerSize);
+ if(incomingMsg == null)
+ incomingMsg = new MessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new MessageWritable();
+ else
+ outgoingMsg.reset();
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable();
+ receivedMsgList.clear();
+ }
+
+ @Override
+ public void compute(Iterator<MessageWritable> msgIterator) {
+ initVertex();
+ if (getSuperstep() == 1) {
+ if(VertexUtil.isUpBridgeVertex(getVertexValue())){
+ sendSettledMsgToAllNextNodes(getVertexValue());
+ }
+ else if(VertexUtil.isDownBridgeVertex(getVertexValue())){
+ sendSettledMsgToAllPrevNodes(getVertexValue());
+ }
+ }
+ else if (getSuperstep() == 2){
+ int i = 0;
+ while (msgIterator.hasNext()) {
+ if(i == 3)
+ break;
+ receivedMsgList.add(msgIterator.next());
+ i++;
+ }
+ if(receivedMsgList.size() == 2){
+ if(getVertexValue().getKmerLength() <= length
+ && getVertexValue().getDegree() == 2){
+ broadcaseKillself();
+ }
+ }
+ }
+ else if(getSuperstep() == 3){
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ responseToDeadVertex();
+ }
+ }
+ voteToHalt();
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(BridgeRemoveVertex.class.getSimpleName());
+ job.setVertexClass(BridgeRemoveVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(PositionWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
new file mode 100644
index 0000000..9ebdcb2
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
@@ -0,0 +1,135 @@
+package edu.uci.ics.genomix.pregelix.operator.bubblemerge;
+
+import java.util.Iterator;
+import org.apache.hadoop.io.NullWritable;
+
+import edu.uci.ics.genomix.type.EdgeListWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+import edu.uci.ics.pregelix.api.graph.Vertex;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+import edu.uci.ics.pregelix.api.util.BspUtils;
+import edu.uci.ics.genomix.pregelix.client.Client;
+import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
+import edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat;
+import edu.uci.ics.genomix.pregelix.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+
+/*
+ * vertexId: BytesWritable
+ * vertexValue: ByteWritable
+ * edgeValue: NullWritable
+ * message: MessageWritable
+ *
+ * DNA:
+ * A: 00
+ * C: 01
+ * G: 10
+ * T: 11
+ *
+ * succeed node
+ * A 00000001 1
+ * G 00000010 2
+ * C 00000100 4
+ * T 00001000 8
+ * precursor node
+ * A 00010000 16
+ * G 00100000 32
+ * C 01000000 64
+ * T 10000000 128
+ *
+ * For example, ONE LINE in input file: 00,01,10 0001,0010,
+ * That means that vertexId is ACG, its succeed node is A and its precursor node is C.
+ * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
+ * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable.
+ */
+/**
+ * Remove tip or single node when l > constant
+ */
+public class BubbleAddVertex extends
+ Vertex<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> {
+ public static final String KMER_SIZE = "BasicGraphCleanVertex.kmerSize";
+ public static int kmerSize = -1;
+
+ private VKmerBytesWritable majorVertexId = new VKmerBytesWritable("ATA"); //forward
+ private VKmerBytesWritable middleVertexId = new VKmerBytesWritable("CTA"); //reverse
+ private VKmerBytesWritable minorVertexId = new VKmerBytesWritable("AGA"); //forward
+ private VKmerBytesWritable insertedBubble = new VKmerBytesWritable("GTA"); //reverse
+
+ /**
+ * initiate kmerSize, length
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ }
+
+ /**
+ * add a bubble
+ */
+ @SuppressWarnings("unchecked")
+ public void insertBubble(EdgeListWritable[] edges, VKmerBytesWritable insertedBubble, VKmerBytesWritable internalKmer){
+ //add bubble vertex
+ @SuppressWarnings("rawtypes")
+ Vertex vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
+ vertex.getMsgList().clear();
+ vertex.getEdges().clear();
+ VertexValueWritable vertexValue = new VertexValueWritable();
+ /**
+ * set the src vertex id
+ */
+ vertex.setVertexId(insertedBubble);
+ /**
+ * set the vertex value
+ */
+ vertexValue.setEdges(edges);
+ vertexValue.setInternalKmer(internalKmer);
+
+ vertex.setVertexValue(vertexValue);
+
+ addVertex(insertedBubble, vertex);
+ }
+
+ public void addEdgeToInsertedBubble(byte dir, VKmerBytesWritable insertedBubble){
+ EdgeWritable newEdge = new EdgeWritable();
+ newEdge.setKey(insertedBubble);
+ newEdge.appendReadID(0);
+ getVertexValue().getEdgeList(dir).add(newEdge);
+ }
+
+ @Override
+ public void compute(Iterator<MessageWritable> msgIterator) {
+ initVertex();
+ if(getSuperstep() == 1){
+ if(getVertexId().equals(majorVertexId)){
+ /** add edge pointing to insertedBubble **/
+ addEdgeToInsertedBubble(DirectionFlag.DIR_FR, insertedBubble);
+ }
+ else if(getVertexId().equals(minorVertexId)){
+ /** add edge pointing to insertedBubble **/
+ addEdgeToInsertedBubble(DirectionFlag.DIR_RF, insertedBubble);
+ }
+ else if(getVertexId().equals(middleVertexId)){
+ /** insert new bubble **/
+ insertBubble(getVertexValue().getEdges(), insertedBubble, getVertexValue().getInternalKmer());
+ }
+ }
+ voteToHalt();
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(BubbleAddVertex.class.getSimpleName());
+ job.setVertexClass(BubbleAddVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
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
new file mode 100644
index 0000000..ee6efc1
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleMergeVertex.java
@@ -0,0 +1,215 @@
+package edu.uci.ics.genomix.pregelix.operator.bubblemerge;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+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.BubbleMergeMessageWritable.DirToMajor;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
+
+/**
+ * Naive Algorithm for path merge graph
+ */
+public class BubbleMergeVertex extends
+ BasicGraphCleanVertex<BubbleMergeMessageWritable> {
+ public static final String DISSIMILARITY_THRESHOLD = "BubbleMergeVertex.dissimilarThreshold";
+ private float dissimilarThreshold = -1;
+
+ private Map<VKmerBytesWritable, ArrayList<BubbleMergeMessageWritable>> receivedMsgMap = new HashMap<VKmerBytesWritable, ArrayList<BubbleMergeMessageWritable>>();
+ private ArrayList<BubbleMergeMessageWritable> receivedMsgList = new ArrayList<BubbleMergeMessageWritable>();
+ private Set<BubbleMergeMessageWritable> unchangedSet = new HashSet<BubbleMergeMessageWritable>();
+ private Set<BubbleMergeMessageWritable> deletedSet = new HashSet<BubbleMergeMessageWritable>();
+
+ private VKmerBytesWritable incomingEdge = new VKmerBytesWritable();
+ private VKmerBytesWritable outgoingEdge = new VKmerBytesWritable();
+ private VKmerBytesWritable majorVertexId = new VKmerBytesWritable();
+ private VKmerBytesWritable minorVertexId = new VKmerBytesWritable();
+
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if (maxIteration < 0)
+ maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
+ if(dissimilarThreshold == -1)
+ dissimilarThreshold = getContext().getConfiguration().getFloat(DISSIMILARITY_THRESHOLD, (float) 0.5);
+ if(incomingMsg == null)
+ incomingMsg = new BubbleMergeMessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new BubbleMergeMessageWritable();
+ else
+ outgoingMsg.reset();
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable();
+ outFlag = 0;
+ }
+
+ public void sendBubbleAndMajorVertexMsgToMinorVertex(){
+ /** get majorVertex and minorVertex and meToMajorDir**/
+ byte incomingEdgeToMeDir = 0;
+ if(!getVertexValue().getEdgeList(MessageFlag.DIR_RR).isEmpty()){
+ incomingEdge.setAsCopy(getVertexValue().getEdgeList(MessageFlag.DIR_RR).get(0).getKey());
+ incomingEdgeToMeDir = DirToMajor.FORWARD;
+ } else{
+ incomingEdge.setAsCopy(getVertexValue().getEdgeList(MessageFlag.DIR_RF).get(0).getKey());
+ incomingEdgeToMeDir = DirToMajor.REVERSE;
+ }
+
+ byte outgoingEdgeToMeDir = 0;
+ if(!getVertexValue().getEdgeList(MessageFlag.DIR_FF).isEmpty()){
+ outgoingEdge.setAsCopy(getVertexValue().getEdgeList(MessageFlag.DIR_FF).get(0).getKey());
+ outgoingEdgeToMeDir = DirToMajor.FORWARD;
+ } else{
+ outgoingEdge.setAsCopy(getVertexValue().getEdgeList(MessageFlag.DIR_FR).get(0).getKey());
+ outgoingEdgeToMeDir = DirToMajor.REVERSE;
+ }
+
+ majorVertexId.setAsCopy(incomingEdge.compareTo(outgoingEdge) >= 0 ? incomingEdge : outgoingEdge);
+ minorVertexId.setAsCopy(incomingEdge.compareTo(outgoingEdge) < 0 ? incomingEdge : outgoingEdge);
+ byte majorToMeDir = (incomingEdge.compareTo(outgoingEdge) >= 0 ? incomingEdgeToMeDir : outgoingEdgeToMeDir);
+ byte meToMajorDir = mirrorDirection(majorToMeDir);
+
+ /** setup outgoingMsg **/
+ outgoingMsg.setMajorVertexId(majorVertexId);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ outgoingMsg.setNode(getVertexValue().getNode());
+ outgoingMsg.setMeToMajorDir(meToMajorDir);
+ sendMsg(minorVertexId, outgoingMsg);
+ }
+
+ @SuppressWarnings({ "unchecked" })
+ public void aggregateBubbleNodesByMajorNode(Iterator<BubbleMergeMessageWritable> msgIterator){
+ while (msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ if(!receivedMsgMap.containsKey(incomingMsg.getMajorVertexId())){
+ receivedMsgList.clear();
+ receivedMsgList.add(incomingMsg);
+ 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<BubbleMergeMessageWritable>)receivedMsgList.clone());
+ }
+ }
+ }
+
+ public void processSimilarSetToUnchangeSetAndDeletedSet(){
+ unchangedSet.clear();
+ deletedSet.clear();
+ 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
+ float fracDissimilar = topCoverageMessage.computeDissimilar(tmpMessage);
+ if(fracDissimilar < dissimilarThreshold){ //if similar with top node, delete this node and put it in deletedSet
+ //add coverage to top node
+ topCoverageMessage.getNode().mergeCoverage(tmpMessage.getNode());
+ deletedSet.add(tmpMessage);
+ it.remove();
+ }
+ }
+ unchangedSet.add(topCoverageMessage);
+ }
+ }
+
+ public void processUnchangedSet(){
+ for(BubbleMergeMessageWritable msg : unchangedSet){
+ outFlag = MessageFlag.UNCHANGE;
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setNode(msg.getNode());
+ sendMsg(msg.getSourceVertexId(), outgoingMsg);
+ }
+ }
+
+ public void processDeletedSet(){
+ for(BubbleMergeMessageWritable msg : deletedSet){
+ outFlag = MessageFlag.KILL;
+ outgoingMsg.setFlag(outFlag);
+ sendMsg(msg.getSourceVertexId(), outgoingMsg);
+ }
+ }
+
+ @Override
+ public void compute(Iterator<BubbleMergeMessageWritable> msgIterator) {
+ initVertex();
+ if (getSuperstep() == 1) {
+ if(VertexUtil.isPathVertex(getVertexValue())){
+ /** send bubble and major vertex msg to minor vertex **/
+ sendBubbleAndMajorVertexMsgToMinorVertex();
+ }
+ } else if (getSuperstep() == 2){
+ /** aggregate bubble nodes and grouped by major vertex **/
+ aggregateBubbleNodesByMajorNode(msgIterator);
+
+ for(VKmerBytesWritable prevId : receivedMsgMap.keySet()){
+ if(receivedMsgList.size() > 1){ // filter bubble
+ /** for each majorVertex, sort the node by decreasing order of coverage **/
+ receivedMsgList = receivedMsgMap.get(prevId);
+ Collections.sort(receivedMsgList, new BubbleMergeMessageWritable.SortByCoverage());
+
+ /** process similarSet, keep the unchanged set and deleted set & add coverage to unchange node **/
+ processSimilarSetToUnchangeSetAndDeletedSet();
+
+ /** send message to the unchanged set for updating coverage & send kill message to the deleted set **/
+ processUnchangedSet();
+ processDeletedSet();
+ }
+ }
+ } else if (getSuperstep() == 3){
+ if(msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ if(incomingMsg.getFlag() == MessageFlag.KILL){
+ broadcaseKillself();
+ } else if(incomingMsg.getFlag() == MessageFlag.UNCHANGE){
+ /** update average coverage **/
+ getVertexValue().setAvgCoverage(incomingMsg.getNode().getAverageCoverage());
+ }
+ }
+ } else if(getSuperstep() == 4){
+ if(msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ if(isResponseKillMsg()){
+ responseToDeadVertex();
+ }
+ }
+ }
+ voteToHalt();
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(BubbleMergeVertex.class.getSimpleName());
+ job.setVertexClass(BubbleMergeVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
new file mode 100644
index 0000000..2ea5c8c
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
@@ -0,0 +1,465 @@
+package edu.uci.ics.genomix.pregelix.operator.pathmerge;
+
+import java.io.IOException;
+
+import edu.uci.ics.genomix.pregelix.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.PathMergeMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.type.GeneCode;
+import edu.uci.ics.genomix.type.NodeWritable.OutgoingListFlag;
+import edu.uci.ics.genomix.type.NodeWritable.IncomingListFlag;
+
+public abstract class BasicPathMergeVertex extends
+ BasicGraphCleanVertex<PathMergeMessageWritable>{
+
+ public void setStateAsMergeWithPrev(){
+ byte state = getVertexValue().getState();
+ state &= State.SHOULD_MERGE_CLEAR;
+ state |= State.SHOULD_MERGEWITHPREV;
+ getVertexValue().setState(state);
+ }
+
+ public void setStateAsMergeWithNext(){
+ byte state = getVertexValue().getState();
+ state &= State.SHOULD_MERGE_CLEAR;
+ state |= State.SHOULD_MERGEWITHNEXT;
+ getVertexValue().setState(state);
+ }
+
+ /**
+ * updateAdjList
+ */
+ public void processUpdate(){
+ inFlag = incomingMsg.getFlag();
+ byte meToNeighborDir = (byte) (inFlag & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+
+ byte neighborToMergeDir = flipDirection(neighborToMeDir, incomingMsg.isFlip());
+// getVertexValue().processUpdates(neighborToMeDir, incomingMsg.getSourceVertexId(),
+// neighborToMergeDir, incomingMsg.getNeighborEdge());
+ getVertexValue().processUpdates(neighborToMeDir, incomingMsg.getSourceVertexId(),
+ neighborToMergeDir, incomingMsg.getNode());
+ }
+
+ /**
+ * merge and updateAdjList merge with one neighbor
+ */
+ public void processMerge(){
+ processMerge(incomingMsg);
+ }
+
+ public byte flipHeadMergeDir(byte d, boolean isFlip){
+ if(isFlip){
+ switch(d){
+ case State.HEAD_SHOULD_MERGEWITHPREV:
+ return State.HEAD_SHOULD_MERGEWITHNEXT;
+ case State.HEAD_SHOULD_MERGEWITHNEXT:
+ return State.HEAD_SHOULD_MERGEWITHPREV;
+ default:
+ return 0;
+ }
+ } else
+ return d;
+ }
+
+ public boolean isDifferentDirWithMergeKmer(byte neighborToMeDir){
+ return neighborToMeDir == MessageFlag.DIR_FR || neighborToMeDir == MessageFlag.DIR_RF;
+ }
+
+ /**
+ * merge and updateAdjList having parameter
+ */
+ public void processMerge(PathMergeMessageWritable msg){
+ inFlag = msg.getFlag();
+ byte meToNeighborDir = (byte) (inFlag & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+
+ if((inFlag & MessageFlag.IS_HEAD) > 0){
+ byte state = getVertexValue().getState();
+ state &= State.HEAD_SHOULD_MERGE_CLEAR;
+ state |= State.IS_HEAD;
+ byte headMergeDir = flipHeadMergeDir((byte)(inFlag & MessageFlag.HEAD_SHOULD_MERGE_MASK), isDifferentDirWithMergeKmer(neighborToMeDir));
+ state |= headMergeDir;
+ getVertexValue().setState(state);
+ }
+
+// byte neighborToMergeDir = flipDirection(neighborToMeDir, msg.isFlip());
+
+ getVertexValue().processMerges(neighborToMeDir, msg.getNode(), kmerSize);
+// getVertexValue().processMerges(neighborToMeDir, msg.getSourceVertexId(),
+// neighborToMergeDir, msg.getNeighborEdge(),
+// kmerSize, msg.getNode());
+ }
+
+ /**
+ * final merge and updateAdjList having parameter for p2
+ */
+ public void processFinalMerge(PathMergeMessageWritable msg){
+ byte meToNeighborDir = (byte) (msg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+// byte neighborToMergeDir = 0;
+// if(getMsgFlag() == MessageFlag.IS_FINAL)
+// neighborToMergeDir = neighborToMeDir;
+// else
+// neighborToMergeDir = flipDirection(neighborToMeDir, msg.isFlip());
+
+ String selfString;
+ String match;
+ String msgString;
+ int index;
+ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ selfString = getVertexValue().getInternalKmer().toString();
+ match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
+ msgString = msg.getInternalKmer().toString();
+ index = msgString.indexOf(match);
+ tmpKmer.setByRead(msgString.length() - index, msgString.substring(index).getBytes(), 0);
+ break;
+ case MessageFlag.DIR_FR:
+ selfString = getVertexValue().getInternalKmer().toString();
+ match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
+ msgString = GeneCode.reverseComplement(msg.getInternalKmer().toString());
+ index = msgString.indexOf(match);
+ tmpKmer.setByReadReverse(msgString.length() - index, msgString.substring(index).getBytes(), 0);
+ break;
+ case MessageFlag.DIR_RF:
+ selfString = getVertexValue().getInternalKmer().toString();
+ match = selfString.substring(0, kmerSize - 1);
+ msgString = GeneCode.reverseComplement(msg.getInternalKmer().toString());
+ index = msgString.lastIndexOf(match) + kmerSize - 2;
+ tmpKmer.setByReadReverse(index + 1, msgString.substring(0, index + 1).getBytes(), 0);
+ break;
+ case MessageFlag.DIR_RR:
+ selfString = getVertexValue().getInternalKmer().toString();
+ match = selfString.substring(0, kmerSize - 1);
+ msgString = msg.getInternalKmer().toString();
+ index = msgString.lastIndexOf(match) + kmerSize - 2;
+ tmpKmer.setByRead(index + 1, msgString.substring(0, index + 1).getBytes(), 0);
+ break;
+ }
+
+ //TODO: fix mergeWithNode
+// getVertexValue().processMerges(neighborToMeDir, msg.getSourceVertexId(),
+// neighborToMergeDir, msg.getNeighborEdge(),
+// kmerSize, tmpKmer);
+ }
+
+ /**
+ * configure UPDATE msg
+ */
+ public void configureUpdateMsgForPredecessor(){
+ outgoingMsg.setSourceVertexId(getVertexId());
+ for(byte d: OutgoingListFlag.values)
+ outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
+
+ kmerIterator = getVertexValue().getRFList().getKeys();
+ while(kmerIterator.hasNext()){
+ destVertexId.setAsCopy(kmerIterator.next());
+ setPredecessorAdjMsg(destVertexId);
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setFlip(ifFilpWithSuccessor(destVertexId));
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ kmerIterator = getVertexValue().getRRList().getKeys();
+ while(kmerIterator.hasNext()){
+ destVertexId.setAsCopy(kmerIterator.next());
+ setPredecessorAdjMsg(destVertexId);
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setFlip(ifFilpWithSuccessor(destVertexId));
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+
+ public void configureUpdateMsgForSuccessor(){
+ outgoingMsg.setSourceVertexId(getVertexId());
+ for(byte d: IncomingListFlag.values)
+ outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
+
+ kmerIterator = getVertexValue().getFFList().getKeys();
+ while(kmerIterator.hasNext()){
+ destVertexId.setAsCopy(kmerIterator.next());
+ setSuccessorAdjMsg(destVertexId);
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setFlip(ifFlipWithPredecessor(destVertexId));
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ kmerIterator = getVertexValue().getFRList().getKeys();
+ while(kmerIterator.hasNext()){
+ destVertexId.setAsCopy(kmerIterator.next());
+ setSuccessorAdjMsg(destVertexId);
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setFlip(ifFlipWithPredecessor(destVertexId));
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+ /**
+ * send update message to neighber
+ */
+ public void broadcastUpdateMsg(){
+ if((getVertexValue().getState() & State.IS_HEAD) > 0)
+ outFlag |= MessageFlag.IS_HEAD;
+ switch(getVertexValue().getState() & State.SHOULD_MERGE_MASK){
+ case State.SHOULD_MERGEWITHPREV:
+ /** confugure updateMsg for successor **/
+ configureUpdateMsgForSuccessor();
+ break;
+ case State.SHOULD_MERGEWITHNEXT:
+ /** confugure updateMsg for predecessor **/
+ configureUpdateMsgForPredecessor();
+ break;
+ }
+ }
+
+ /**
+ * This vertex tries to merge with next vertex and send update msg to predecesspr
+ */
+ public void sendUpdateMsgToPredecessor(){
+ if(getVertexValue().hasNextDest()){
+ setStateAsMergeWithNext();
+ broadcastUpdateMsg();
+ }
+ }
+
+ /**
+ * This vertex tries to merge with next vertex and send update msg to successor
+ */
+ public void sendUpdateMsgToSuccessor(){
+ if(getVertexValue().hasPrevDest()){
+ setStateAsMergeWithPrev();
+ broadcastUpdateMsg();
+ }
+ }
+
+ public void sendUpdateMsg(){
+ sendUpdateMsg(incomingMsg);
+ }
+
+ /**
+ * send update message to neighber for P2
+ */
+ public void sendUpdateMsg(MessageWritable msg){
+ outgoingMsg.reset();
+ outgoingMsg.setUpdateMsg(true);
+ byte meToNeighborDir = (byte) (msg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ case MessageFlag.DIR_FR:
+ sendUpdateMsgToPredecessor();
+ break;
+ case MessageFlag.DIR_RF:
+ case MessageFlag.DIR_RR:
+ sendUpdateMsgToSuccessor();
+ break;
+ }
+ }
+
+ public void sendMergeMsgToSuccessor(){
+ setSuccessorAdjMsg();
+ if(ifFlipWithPredecessor())
+ outgoingMsg.setFlip(true);
+ else
+ outgoingMsg.setFlip(false);
+ outgoingMsg.setFlag(outFlag);
+// outgoingMsg.setNeighberNode(getVertexValue().getIncomingList());
+ for(byte d: IncomingListFlag.values)
+ outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
+ outgoingMsg.setSourceVertexId(getVertexId());
+ outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
+ sendMsg(getNextDestVertexId(), outgoingMsg);
+ }
+
+ public boolean canMergeWithHead(MessageWritable msg){
+ byte meToNeighborDir = (byte) (msg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ case MessageFlag.DIR_FR:
+ return getVertexValue().outDegree() == 1;
+ case MessageFlag.DIR_RF:
+ case MessageFlag.DIR_RR:
+ return getVertexValue().inDegree() == 1;
+ }
+ return false;
+ }
+ /**
+ * send merge message to neighber for P1
+ * @throws IOException
+ */
+ public void sendMergeMsgForP1(MessageWritable msg){
+ outgoingMsg.setUpdateMsg(false);
+ if (getHeadFlag() > 0)//is_tail, for P1
+ outFlag |= MessageFlag.STOP;
+ sendMergeMsgByIncomingMsgDir();
+ }
+
+ public void sendMergeMsgByIncomingMsgDir(){
+ byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ case MessageFlag.DIR_FR:
+ configureMergeMsgForSuccessorByIncomingMsg(); //sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
+ break;
+ case MessageFlag.DIR_RF:
+ case MessageFlag.DIR_RR:
+ configureMergeMsgForPredecessorByIncomingMsg(); //sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
+ break;
+ }
+ }
+
+ /**
+ * send merge message to neighber for P2
+ * @throws IOException
+ */
+ public void sendMergeMsg(){
+ outgoingMsg.reset();
+ outgoingMsg.setUpdateMsg(false);
+ if(selfFlag == State.IS_HEAD){
+ byte newState = getVertexValue().getState();
+ newState &= State.VERTEX_CLEAR;
+ newState |= State.IS_OLDHEAD;
+ getVertexValue().setState(newState);
+ this.activate();
+ resetSelfFlag();
+ outFlag |= MessageFlag.IS_HEAD;
+ } else if(selfFlag == State.IS_OLDHEAD){
+ outFlag |= MessageFlag.IS_OLDHEAD;
+ voteToHalt();
+ }
+ sendMergeMsgByIncomingMsgDir();
+ }
+
+ /**
+ * send final merge message to neighber for P2
+ */
+ public void sendFinalMergeMsg(){
+ outFlag |= MessageFlag.IS_FINAL;
+// sendMergeMsgByIncomingMsgDir();
+
+ byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ case MessageFlag.DIR_FR:
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= neighborToMeDir;
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ for(byte d: IncomingListFlag.values)
+ outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
+ outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
+ sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
+ break;
+ case MessageFlag.DIR_RF:
+ case MessageFlag.DIR_RR:
+ outFlag &= MessageFlag.DIR_CLEAR;
+ outFlag |= neighborToMeDir;
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ for(byte d: OutgoingListFlag.values)
+ outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
+ outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
+ sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
+ break;
+ }
+ }
+ /**
+ * send merge message to neighber for P1
+ */
+ public void responseMergeMsgToPrevNode(){
+ outFlag = 0;
+ if (getVertexValue().getState() == State.IS_HEAD)//is_tail
+ outFlag |= MessageFlag.STOP;
+ configureMergeMsgForPredecessor();
+ deleteVertex(getVertexId());
+ }
+
+ /**
+ * for P1
+ */
+ public void responseMergeMsgToNextNode(){
+ outFlag = 0;
+ if (getVertexValue().getState() == State.IS_HEAD)//is_tail
+ outFlag |= MessageFlag.STOP;
+ configureMergeMsgForSuccessor();
+ deleteVertex(getVertexId());
+ }
+
+ /**
+ * configure MERGE msg
+ */
+ public void configureMergeMsgForPredecessor(){
+ setPredecessorAdjMsg();
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ outgoingMsg.setFlip(ifFilpWithSuccessor());
+ for(byte d: OutgoingListFlag.values)
+ outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
+ outgoingMsg.setNode(getVertexValue().getNode());
+// outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
+ sendMsg(getPrevDestVertexId(), outgoingMsg);
+ }
+
+ public void configureMergeMsgForSuccessor(){
+ setSuccessorAdjMsg();
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ outgoingMsg.setFlip(ifFlipWithPredecessor());
+ for(byte d: IncomingListFlag.values)
+ outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
+ outgoingMsg.setNode(getVertexValue().getNode());
+// outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
+ sendMsg(getNextDestVertexId(), outgoingMsg);
+ }
+
+ /**
+ * configure MERGE msg
+ */
+ public void configureMergeMsgForPredecessorByIncomingMsg(){
+ setPredecessorAdjMsg();
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setFlip(ifFilpWithSuccessor());
+ outgoingMsg.setSourceVertexId(getVertexId());
+ for(byte d: OutgoingListFlag.values)
+ outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
+ outgoingMsg.setNode(getVertexValue().getNode());
+// outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
+ sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
+ }
+
+ public void configureMergeMsgForSuccessorByIncomingMsg(){
+ setSuccessorAdjMsg();
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setFlip(ifFlipWithPredecessor());
+ outgoingMsg.setSourceVertexId(getVertexId());
+ for(byte d: IncomingListFlag.values)
+ outgoingMsg.setEdgeList(d, getVertexValue().getEdgeList(d));
+ outgoingMsg.setNode(getVertexValue().getNode());
+// outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
+ sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
+ }
+ /**
+ * send merge message to neighber for P4
+ */
+ public void broadcastMergeMsg(){
+ if(headFlag > 0){
+ outFlag |= MessageFlag.IS_HEAD;
+ outFlag |= headMergeDir;
+ }
+ switch(getVertexValue().getState() & State.SHOULD_MERGE_MASK) {
+ case State.SHOULD_MERGEWITHNEXT:
+ /** configure merge msg for successor **/
+ configureMergeMsgForSuccessor();
+ deleteVertex(getVertexId());
+ break;
+ case State.SHOULD_MERGEWITHPREV:
+ /** configure merge msg for predecessor **/
+ configureMergeMsgForPredecessor();
+ deleteVertex(getVertexId());
+ break;
+ }
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java
new file mode 100644
index 0000000..8b66958
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java
@@ -0,0 +1,157 @@
+package edu.uci.ics.genomix.pregelix.operator.pathmerge;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+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.PathMergeMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.type.VKmerListWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+
+public class MapReduceVertex extends
+ BasicPathMergeVertex{
+
+ protected VKmerBytesWritable reverseKmer;
+ protected Map<VKmerBytesWritable, VKmerListWritable> kmerMapper = new HashMap<VKmerBytesWritable, VKmerListWritable>();
+
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if (maxIteration < 0)
+ maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
+ if(incomingMsg == null)
+ incomingMsg = new PathMergeMessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new PathMergeMessageWritable();
+ else
+ outgoingMsg.reset();
+ if(reverseKmer == null)
+ reverseKmer = new VKmerBytesWritable();
+ if(kmerList == null)
+ kmerList = new VKmerListWritable();
+ else
+ kmerList.reset();
+ if(fakeVertex == null){
+ fakeVertex = new VKmerBytesWritable();
+ String random = generaterRandomString(kmerSize + 1);
+ fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0);
+ }
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable();
+ if(tmpKmer == null)
+ tmpKmer = new VKmerBytesWritable();
+ }
+
+ public void sendMsgToFakeVertex(){
+ if(!getVertexValue().isFakeVertex()){
+ outgoingMsg.setSourceVertexId(getVertexId());
+ outgoingMsg.setInternalKmer(getVertexValue().getInternalKmer());
+ sendMsg(fakeVertex, outgoingMsg);
+ voteToHalt();
+ }
+ }
+
+ public void mapKeyByInternalKmer(Iterator<PathMergeMessageWritable> msgIterator){
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ String kmerString = incomingMsg.getInternalKmer().toString();
+ tmpKmer.setByRead(kmerString.length(), kmerString.getBytes(), 0);
+ reverseKmer.setByReadReverse(kmerString.length(), kmerString.getBytes(), 0);
+
+ VKmerBytesWritable kmer = new VKmerBytesWritable();
+ kmerList = new VKmerListWritable();
+ if(reverseKmer.compareTo(tmpKmer) > 0)
+ kmer.setAsCopy(tmpKmer);
+ else
+ kmer.setAsCopy(reverseKmer);
+ if(!kmerMapper.containsKey(kmer)){
+ //kmerList.reset();
+ kmerList.append(incomingMsg.getSourceVertexId());
+ kmerMapper.put(kmer, kmerList);
+ } else{
+ kmerList.setCopy(kmerMapper.get(kmer));
+ kmerList.append(incomingMsg.getSourceVertexId());
+ kmerMapper.put(kmer, kmerList);
+ }
+ }
+ }
+
+ public void reduceKeyByInternalKmer(){
+ for(VKmerBytesWritable key : kmerMapper.keySet()){
+ kmerList = kmerMapper.get(key);
+ for(int i = 1; i < kmerList.getCountOfPosition(); i++){
+ //send kill message
+ outgoingMsg.setFlag(MessageFlag.KILL);
+ destVertexId.setAsCopy(kmerList.getPosition(i));
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+ }
+
+ public void finalVertexResponseToFakeVertex(Iterator<PathMergeMessageWritable> msgIterator){
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ inFlag = incomingMsg.getFlag();
+ if(inFlag == MessageFlag.KILL){
+ broadcaseKillself();
+ }
+ }
+ }
+
+ @Override
+ public void compute(Iterator<PathMergeMessageWritable> msgIterator) {
+ initVertex();
+ if(getSuperstep() == 1){
+ addFakeVertex();
+ }
+ else if(getSuperstep() == 2){
+ /** NON-FAKE and Final vertice send msg to FAKE vertex **/
+ sendMsgToFakeVertex();
+ } else if(getSuperstep() == 3){
+ kmerMapper.clear();
+ /** Mapper **/
+ mapKeyByInternalKmer(msgIterator);
+ /** Reducer **/
+ reduceKeyByInternalKmer();
+ } else if(getSuperstep() == 4){
+ /** only for test single MapReduce job**/
+ if(!msgIterator.hasNext() && getVertexValue().getState() == State.IS_FAKE){
+ fakeVertexExist = false;
+ deleteVertex(fakeVertex);
+ }
+ finalVertexResponseToFakeVertex(msgIterator);
+ } else if(getSuperstep() == 5){
+ while (msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ if(isResponseKillMsg())
+ responseToDeadVertex();
+ }
+ voteToHalt();
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(MapReduceVertex.class.getSimpleName());
+ job.setVertexClass(MapReduceVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java
new file mode 100644
index 0000000..938600f
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P1ForPathMergeVertex.java
@@ -0,0 +1,159 @@
+package edu.uci.ics.genomix.pregelix.operator.pathmerge;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.pregelix.client.Client;
+import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
+import edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat;
+import edu.uci.ics.genomix.pregelix.io.PathMergeMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
+
+/*
+ * vertexId: BytesWritable
+ * vertexValue: ByteWritable
+ * edgeValue: NullWritable
+ * message: MessageWritable
+ *
+ * DNA:
+ * A: 00
+ * C: 01
+ * G: 10
+ * T: 11
+ *
+ * succeed node
+ * A 00000001 1
+ * G 00000010 2
+ * C 00000100 4
+ * T 00001000 8
+ * precursor node
+ * A 00010000 16
+ * G 00100000 32
+ * C 01000000 64
+ * T 10000000 128
+ *
+ * For example, ONE LINE in input file: 00,01,10 0001,0010,
+ * That means that vertexId is ACG, its succeed node is A and its precursor node is C.
+ * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
+ * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable.
+ */
+/**
+ * Naive Algorithm for path merge graph
+ */
+public class P1ForPathMergeVertex extends
+ BasicPathMergeVertex {
+
+ private ArrayList<PathMergeMessageWritable> receivedMsgList = new ArrayList<PathMergeMessageWritable>();
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if (maxIteration < 0)
+ maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
+ if(incomingMsg == null)
+ incomingMsg = new PathMergeMessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new PathMergeMessageWritable();
+ else
+ outgoingMsg.reset();
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable();
+ inFlag = 0;
+ outFlag = 0;
+ receivedMsgList.clear();
+ }
+
+ public void chooseDirAndSendMsg(){
+ byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ case MessageFlag.DIR_FR:
+ sendSettledMsgToNextNode();
+ break;
+ case MessageFlag.DIR_RF:
+ case MessageFlag.DIR_RR:
+ sendSettledMsgToPrevNode();
+ break;
+ }
+ }
+ /**
+ * head node sends message to path node
+ */
+ public void sendMsgToPathVertex(Iterator<PathMergeMessageWritable> msgIterator) {
+ if (getSuperstep() == 3) {
+ if(getVertexValue().getState() == State.IS_HEAD)
+ outFlag |= MessageFlag.IS_HEAD;
+ sendSettledMsgToAllNextNodes(getVertexValue());
+ } else {
+ while (msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ byte stopFlag = (byte) (incomingMsg.getFlag() & MessageFlag.STOP_MASK);
+ if (stopFlag != MessageFlag.STOP) {
+ if(incomingMsg.isUpdateMsg())
+ processUpdate();
+ else{
+ processMerge();
+ /** after merge with next node, keep merge with next one **/
+ chooseDirAndSendMsg();
+ }
+ } else {
+ processMerge();
+ getVertexValue().setState(State.IS_FINAL);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void compute(Iterator<PathMergeMessageWritable> msgIterator) {
+ initVertex();
+ if (getSuperstep() == 1) {
+ startSendMsg();
+ voteToHalt();
+ } else if (getSuperstep() == 2)
+ initState(msgIterator);
+ else if (getSuperstep() % 2 == 1 && getSuperstep() <= maxIteration) {
+ sendMsgToPathVertex(msgIterator);
+ voteToHalt();
+ } else if (getSuperstep() % 2 == 0 && getSuperstep() > 2 && getSuperstep() <= maxIteration) {
+ while (msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ receivedMsgList.add(incomingMsg);
+ }
+ /** if receive two messages, break the symmetric **/
+ if(receivedMsgList.size() > 0){
+ if(VertexUtil.isPathVertex(getVertexValue()) || canMergeWithHead(receivedMsgList.get(0))){
+ /** choose update and merge direction **/
+ sendUpdateMsg(receivedMsgList.get(0));
+ outFlag = 0;
+ sendMergeMsgForP1(receivedMsgList.get(0));
+ deleteVertex(getVertexId());
+ }
+ }
+ voteToHalt();
+ } else
+ voteToHalt();
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(P1ForPathMergeVertex.class.getSimpleName());
+ job.setVertexClass(P1ForPathMergeVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
new file mode 100644
index 0000000..19779f5
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
@@ -0,0 +1,296 @@
+package edu.uci.ics.genomix.pregelix.operator.pathmerge;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+import edu.uci.ics.genomix.pregelix.client.Client;
+import edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat;
+import edu.uci.ics.genomix.pregelix.format.P2PathMergeOutputFormat;
+import edu.uci.ics.genomix.pregelix.io.PathMergeMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.pregelix.type.MessageTypeFromHead;
+import edu.uci.ics.genomix.type.VKmerListWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+/*
+ * vertexId: BytesWritable
+ * vertexValue: VertexValueWritable
+ * edgeValue: NullWritable
+ * message: MessageWritable
+ *
+ * DNA:
+ * A: 00
+ * C: 01
+ * G: 10
+ * T: 11
+ *
+ * succeed node
+ * A 00000001 1
+ * G 00000010 2
+ * C 00000100 4
+ * T 00001000 8
+ * precursor node
+ * A 00010000 16
+ * G 00100000 32
+ * C 01000000 64
+ * T 10000000 128
+ *
+ * For example, ONE LINE in input file: 00,01,10 0001,0010,
+ * That means that vertexId is ACG, its succeed node is A and its precursor node is C.
+ * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
+ * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable.
+ */
+public class P2ForPathMergeVertex extends
+ MapReduceVertex {
+
+ private ArrayList<PathMergeMessageWritable> receivedMsgList = new ArrayList<PathMergeMessageWritable>();
+
+ private boolean isFakeVertex = false;
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if (maxIteration < 0)
+ maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
+ headFlag = (byte)(getVertexValue().getState() & State.IS_HEAD);
+ selfFlag = (byte)(getVertexValue().getState() & State.VERTEX_MASK);
+ if(incomingMsg == null)
+ incomingMsg = new PathMergeMessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new PathMergeMessageWritable();
+ else
+ outgoingMsg.reset();
+ receivedMsgList.clear();
+ if(reverseKmer == null)
+ reverseKmer = new VKmerBytesWritable();
+ if(kmerList == null)
+ kmerList = new VKmerListWritable();
+ else
+ kmerList.reset();
+ if(fakeVertex == null){
+ fakeVertex = new VKmerBytesWritable();
+ String random = generaterRandomString(kmerSize + 1);
+ fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0);
+ }
+ isFakeVertex = ((byte)getVertexValue().getState() & State.FAKEFLAG_MASK) > 0 ? true : false;
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable();
+ if(tmpKmer == null)
+ tmpKmer = new VKmerBytesWritable();
+ }
+
+ /**
+ * head send message to path
+ */
+ public void pathNodeSendOutMsg() {
+ //send wantToMerge to next
+ tmpKmer = getNextDestVertexIdAndSetFlag();
+ if(tmpKmer != null){
+ destVertexId.setAsCopy(tmpKmer);
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+
+ //send wantToMerge to prev
+ tmpKmer = getPrevDestVertexIdAndSetFlag();
+ if(tmpKmer != null){
+ destVertexId.setAsCopy(tmpKmer);
+ outgoingMsg.setFlag(outFlag);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+
+ /**
+ * check received message
+ */
+ public byte checkNumOfMsgsFromHead(){
+ int countHead = 0;
+ int countOldHead = 0;
+ for(int i = 0; i < receivedMsgList.size(); i++){
+ inFlag = receivedMsgList.get(i).getFlag();
+ switch(inFlag & MessageFlag.VERTEX_MASK){
+ case MessageFlag.IS_HEAD:
+ countHead++;
+ break;
+ case MessageFlag.IS_OLDHEAD:
+ countOldHead++;
+ break;
+ }
+ }
+ if(countHead == 2)
+ return MessageTypeFromHead.BothMsgsFromHead;
+ else if(countHead == 1 && countOldHead == 1)
+ return MessageTypeFromHead.OneMsgFromOldHeadAndOneFromHead;
+ else if(countHead == 1 && countOldHead == 0)
+ return MessageTypeFromHead.OneMsgFromHeadAndOneFromNonHead;
+ else if(countHead == 0 && countOldHead == 0)
+ return MessageTypeFromHead.BothMsgsFromNonHead;
+ else
+ return MessageTypeFromHead.NO_MSG;
+ }
+
+ /**
+ * path response message to head
+ */
+ public void responseMergeMsgToHeadVertex() {
+ // sendUpdateMsg();
+ outFlag = 0;
+ sendMergeMsg();
+ }
+
+ /**
+ * head vertex process merge
+ */
+ public void processMergeInHeadVertex(){
+ /** process merge when receiving msg **/
+ byte numOfMsgsFromHead = checkNumOfMsgsFromHead();
+ switch(numOfMsgsFromHead){
+ case MessageTypeFromHead.BothMsgsFromHead:
+ case MessageTypeFromHead.OneMsgFromOldHeadAndOneFromHead:
+ for(int i = 0; i < 2; i++)
+ processFinalMerge(receivedMsgList.get(i)); //processMerge()
+ getVertexValue().setState(State.IS_FINAL);
+ /** NON-FAKE and Final vertice send msg to FAKE vertex **/
+ sendMsgToFakeVertex();
+ voteToHalt();
+ break;
+ case MessageTypeFromHead.OneMsgFromHeadAndOneFromNonHead:
+ for(int i = 0; i < 2; i++)
+ processFinalMerge(receivedMsgList.get(i));
+ setHeadState();
+ this.activate();
+ break;
+ case MessageTypeFromHead.BothMsgsFromNonHead:
+ for(int i = 0; i < 2; i++)
+ processFinalMerge(receivedMsgList.get(i));
+ break;
+ case MessageTypeFromHead.NO_MSG:
+ //halt
+ voteToHalt(); //deleteVertex(getVertexId());
+ break;
+ }
+ }
+
+ public void aggregateMsgAndGroupInFakeNode(Iterator<PathMergeMessageWritable> msgIterator){
+ kmerMapper.clear();
+ /** Mapper **/
+ mapKeyByInternalKmer(msgIterator);
+ /** Reducer **/
+ reduceKeyByInternalKmer();
+ }
+
+ @Override
+ public void compute(Iterator<PathMergeMessageWritable> msgIterator) {
+ initVertex();
+ if (getSuperstep() == 1){
+ addFakeVertex();
+ startSendMsg();
+ } else if (getSuperstep() == 2){
+ if(isFakeVertex)
+ voteToHalt();
+ initState(msgIterator);
+ } else if (getSuperstep() % 3 == 0 && getSuperstep() <= maxIteration) {
+ if(!isFakeVertex){
+ /** for processing final merge (1) **/
+ if(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ if(getMsgFlag() == MessageFlag.IS_FINAL){
+ setFinalState();
+ processFinalMerge(incomingMsg);
+ /** NON-FAKE and Final vertice send msg to FAKE vertex **/
+ sendMsgToFakeVertex();
+ } else if(isReceiveKillMsg()){
+ responseToDeadVertex();
+ }
+ }
+ /** processing general case **/
+ else{
+ if(isPathNode())
+ sendSettledMsgToAllNeighborNodes(getVertexValue());
+ if(!isHeadNode())
+ voteToHalt();
+ }
+ }
+ else{
+ /** Fake vertex agregates message and group them by actual kmer (2) **/
+ aggregateMsgAndGroupInFakeNode(msgIterator);
+ voteToHalt();
+ }
+ } else if (getSuperstep() % 3 == 1 && getSuperstep() <= maxIteration) {
+ if(!isFakeVertex){
+ /** head doesn't receive msg and send out final msg **/
+ if(!msgIterator.hasNext() && isHeadNode()){
+ outFlag |= MessageFlag.IS_FINAL;
+ sendSettledMsgToAllNeighborNodes(getVertexValue());
+ voteToHalt();
+ } else{
+ while (msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ /** final Vertex Responses To FakeVertex **/
+ if(isReceiveKillMsg()){
+ broadcaseKillself();
+ }else if(isResponseKillMsg()){
+ responseToDeadVertex();
+ voteToHalt();
+ }
+ else{
+ sendUpdateMsg();
+ outFlag = 0;
+ sendMergeMsg();
+ voteToHalt();
+ }
+ }
+ }
+ }
+ else{
+ /** Fake vertex agregates message and group them by actual kmer (1) **/
+ aggregateMsgAndGroupInFakeNode(msgIterator);
+ voteToHalt();
+ }
+ } else if (getSuperstep() % 3 == 2 && getSuperstep() <= maxIteration){
+ if(!isFakeVertex){
+ while (msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ /** final Vertex Responses To FakeVertex **/
+ if(isReceiveKillMsg()){
+ broadcaseKillself();
+ } else if(isResponseKillMsg()){
+ responseToDeadVertex();
+ voteToHalt();
+ } else if(getMsgFlag() == MessageFlag.IS_FINAL){/** for final processing, receive msg from head, which means final merge (2) ex. 8**/
+ sendFinalMergeMsg();
+ voteToHalt();
+ break;
+ } else if(incomingMsg.isUpdateMsg()&& selfFlag == State.IS_OLDHEAD){
+ processUpdate();
+ } else if(!incomingMsg.isUpdateMsg()){
+ receivedMsgList.add(incomingMsg);
+ }
+ }
+ if(receivedMsgList.size() != 0)
+ processMergeInHeadVertex();
+ }
+ } else
+ voteToHalt();
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(P2ForPathMergeVertex.class.getSimpleName());
+ job.setVertexClass(P2ForPathMergeVertex.class);
+ /**
+ * BinaryInput and BinaryOutput~/
+ */
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(P2PathMergeOutputFormat.class);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.setDynamicVertexValueSize(true);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
new file mode 100644
index 0000000..17bd3f9
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
@@ -0,0 +1,251 @@
+package edu.uci.ics.genomix.pregelix.operator.pathmerge;
+
+import java.util.Iterator;
+import java.util.Random;
+
+
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+import edu.uci.ics.genomix.pregelix.client.Client;
+import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
+import edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat;
+import edu.uci.ics.genomix.pregelix.io.PathMergeMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+
+/*
+ * vertexId: BytesWritable
+ * vertexValue: ByteWritable
+ * edgeValue: NullWritable
+ * message: MessageWritable
+ *
+ * DNA:
+ * A: 00
+ * C: 01
+ * G: 10
+ * T: 11
+ *
+ * succeed node
+ * A 00000001 1
+ * G 00000010 2
+ * C 00000100 4
+ * T 00001000 8
+ * precursor node
+ * A 00010000 16
+ * G 00100000 32
+ * C 01000000 64
+ * T 10000000 128
+ *
+ * For example, ONE LINE in input file: 00,01,10 0001,0010,
+ * That means that vertexId is ACG, its succeed node is A and its precursor node is C.
+ * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
+ * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable.
+ */
+/**
+ * Naive Algorithm for path merge graph
+ */
+public class P4ForPathMergeVertex extends
+ BasicPathMergeVertex {
+ public static final String RANDSEED = "P4ForPathMergeVertex.randSeed";
+ public static final String PROBBEINGRANDOMHEAD = "P4ForPathMergeVertex.probBeingRandomHead";
+
+ private static long randSeed = 1;
+ private float probBeingRandomHead = -1;
+ private Random randGenerator;
+
+ private VKmerBytesWritable curKmer = new VKmerBytesWritable();
+ private VKmerBytesWritable nextKmer = new VKmerBytesWritable();
+ private VKmerBytesWritable prevKmer = new VKmerBytesWritable();
+ private boolean hasNext;
+ private boolean hasPrev;
+ private boolean curHead;
+ private boolean nextHead;
+ private boolean prevHead;
+
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if (maxIteration < 0)
+ maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
+ if(incomingMsg == null)
+ incomingMsg = new PathMergeMessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new PathMergeMessageWritable();
+ else
+ outgoingMsg.reset();
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable();
+ randSeed = getSuperstep();
+ randGenerator = new Random(randSeed);
+ if (probBeingRandomHead < 0)
+ probBeingRandomHead = getContext().getConfiguration().getFloat("probBeingRandomHead", 0.5f);
+ hasNext = false;
+ hasPrev = false;
+ curHead = false;
+ nextHead = false;
+ prevHead = false;
+ outFlag = (byte)0;
+ inFlag = (byte)0;
+ // Node may be marked as head b/c it's a real head or a real tail
+ headFlag = getHeadFlag();
+ headMergeDir = getHeadMergeDir();
+ if(repeatKmer == null)
+ repeatKmer = new VKmerBytesWritable();
+ tmpValue.reset();
+ }
+
+ protected boolean isNodeRandomHead(VKmerBytesWritable nodeKmer) {
+ // "deterministically random", based on node id
+ randGenerator.setSeed((randSeed ^ nodeKmer.hashCode()) * 100000 * getSuperstep());//randSeed + nodeID.hashCode()
+ for(int i = 0; i < 500; i++)
+ randGenerator.nextFloat();
+ return randGenerator.nextFloat() < probBeingRandomHead;
+ }
+
+ /**
+ * set nextKmer to the element that's next (in the node's FF or FR list), returning true when there is a next neighbor
+ */
+ protected boolean setNextInfo(VertexValueWritable value) {
+ if (value.getFFList().getCountOfPosition() > 0) {
+ nextKmer.setAsCopy(value.getFFList().get(0).getKey());
+ nextHead = isNodeRandomHead(nextKmer);
+ return true;
+ }
+ if (value.getFRList().getCountOfPosition() > 0) {
+ nextKmer.setAsCopy(value.getFRList().get(0).getKey());
+ nextHead = isNodeRandomHead(nextKmer);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * set prevKmer to the element that's previous (in the node's RR or RF list), returning true when there is a previous neighbor
+ */
+ protected boolean setPrevInfo(VertexValueWritable value) {
+ if (value.getRRList().getCountOfPosition() > 0) {
+ prevKmer.setAsCopy(value.getRRList().get(0).getKey());
+ prevHead = isNodeRandomHead(prevKmer);
+ return true;
+ }
+ if (value.getRFList().getCountOfPosition() > 0) {
+ prevKmer.setAsCopy(value.getRFList().get(0).getKey());
+ prevHead = isNodeRandomHead(prevKmer);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void compute(Iterator<PathMergeMessageWritable> msgIterator) {
+ initVertex();
+ if (getSuperstep() == 1)
+ startSendMsg();
+ else if (getSuperstep() == 2)
+ initState(msgIterator);
+ else if (getSuperstep() % 4 == 3){
+ outFlag |= headFlag;
+
+ outFlag |= MessageFlag.NO_MERGE;
+ setStateAsNoMerge();
+
+ // only PATH vertices are present. Find the ID's for my neighbors
+ curKmer.setAsCopy(getVertexId());
+
+ curHead = isNodeRandomHead(curKmer);
+
+ // the headFlag and tailFlag's indicate if the node is at the beginning or end of a simple path.
+ // We prevent merging towards non-path nodes
+ hasNext = setNextInfo(getVertexValue()) && (headFlag == 0 || (headFlag > 0 && headMergeDir == MessageFlag.HEAD_SHOULD_MERGEWITHNEXT));
+ hasPrev = setPrevInfo(getVertexValue()) && (headFlag == 0 || (headFlag > 0 && headMergeDir == MessageFlag.HEAD_SHOULD_MERGEWITHPREV));
+ if (hasNext || hasPrev) {
+ if (curHead) {
+ if (hasNext && !nextHead) {
+ // compress this head to the forward tail
+ sendUpdateMsgToPredecessor();
+ } else if (hasPrev && !prevHead) {
+ // compress this head to the reverse tail
+ sendUpdateMsgToSuccessor();
+ }
+ }
+ else {
+ // I'm a tail
+ if (hasNext && hasPrev) {
+ if ((!nextHead && !prevHead) && (curKmer.compareTo(nextKmer) < 0 && curKmer.compareTo(prevKmer) < 0)) {
+ // tails on both sides, and I'm the "local minimum"
+ // compress me towards the tail in forward dir
+ sendUpdateMsgToPredecessor();
+ }
+ } else if (!hasPrev) {
+ // no previous node
+ if (!nextHead && curKmer.compareTo(nextKmer) < 0) {
+ // merge towards tail in forward dir
+ sendUpdateMsgToPredecessor();
+ }
+ } else if (!hasNext) {
+ // no next node
+ if (!prevHead && curKmer.compareTo(prevKmer) < 0) {
+ // merge towards tail in reverse dir
+ sendUpdateMsgToSuccessor();
+ }
+ }
+ }
+ }
+ this.activate();
+ }
+ else if (getSuperstep() % 4 == 0){
+ //update neighber
+ while (msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ processUpdate();
+ if(isHaltNode())
+ voteToHalt();
+ else
+ this.activate();
+ }
+ } else if (getSuperstep() % 4 == 1){
+ //send message to the merge object and kill self
+ broadcastMergeMsg();
+ } else if (getSuperstep() % 4 == 2){
+ //merge tmpKmer
+ while (msgIterator.hasNext()) {
+ incomingMsg = msgIterator.next();
+ selfFlag = (byte) (State.VERTEX_MASK & getVertexValue().getState());
+ /** process merge **/
+ processMerge();
+ /** if it's a tandem repeat, which means detecting cycle **/
+ if(isTandemRepeat()){
+ for(byte d : DirectionFlag.values)
+ getVertexValue().getEdgeList(d).reset();
+ getVertexValue().setState(MessageFlag.IS_HALT);
+ voteToHalt();
+ }/** head meets head, stop **/
+ else if((getMsgFlag() == MessageFlag.IS_HEAD && selfFlag == MessageFlag.IS_HEAD)){
+ getVertexValue().setState(MessageFlag.IS_HALT);
+ voteToHalt();
+ }
+ else
+ this.activate();
+ }
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(P4ForPathMergeVertex.class.getSimpleName());
+ job.setVertexClass(P4ForPathMergeVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
new file mode 100644
index 0000000..d1da94f
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
@@ -0,0 +1,84 @@
+package edu.uci.ics.genomix.pregelix.operator.removelowcoverage;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+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.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+
+public class RemoveLowCoverageVertex extends
+ BasicGraphCleanVertex<MessageWritable> {
+ public static final String KMER_SIZE = "RemoveLowCoverageVertex.kmerSize";
+ public static final String MIN_AVERAGECOVERAGE = "RemoveLowCoverageVertex.minAverageCoverage";
+ public static int kmerSize = -1;
+ private static float minAverageCoverage = -1;
+
+ private Set<VKmerBytesWritable> deadNodeSet = new HashSet<VKmerBytesWritable>();
+ /**
+ * initiate kmerSize, length
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if(minAverageCoverage == -1)
+ minAverageCoverage = getContext().getConfiguration().getFloat(MIN_AVERAGECOVERAGE, 3);
+ if(incomingMsg == null)
+ incomingMsg = new MessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new MessageWritable();
+ else
+ outgoingMsg.reset();
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable();
+ if(fakeVertex == null){
+ fakeVertex = new VKmerBytesWritable();
+ String random = generaterRandomString(kmerSize + 1);
+ fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0);
+ }
+ }
+
+ @Override
+ public void compute(Iterator<MessageWritable> msgIterator) {
+ initVertex();
+ if(getSuperstep() == 1){
+ if(getVertexValue().getAvgCoverage() <= minAverageCoverage){
+ broadcaseKillself();
+ deadNodeSet.add(getVertexId());
+ }
+ else
+ voteToHalt();
+ } else if(getSuperstep() == 2){
+ if(deadNodeSet.contains(getVertexId()))
+ deleteVertex(getVertexId());
+ else{
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ if(isResponseKillMsg())
+ responseToDeadVertex();
+ }
+ voteToHalt();
+ }
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(RemoveLowCoverageVertex.class.getSimpleName());
+ job.setVertexClass(RemoveLowCoverageVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java
new file mode 100644
index 0000000..c155e9e
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/BFSTraverseVertex.java
@@ -0,0 +1,257 @@
+package edu.uci.ics.genomix.pregelix.operator.scaffolding;
+
+import java.util.Iterator;
+
+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.ArrayListWritable;
+import edu.uci.ics.genomix.pregelix.io.BFSTraverseMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
+import edu.uci.ics.genomix.pregelix.type.EdgeDirs;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerListWritable;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+
+public class BFSTraverseVertex extends
+ BasicGraphCleanVertex<BFSTraverseMessageWritable> {
+
+ protected VKmerBytesWritable srcNode = new VKmerBytesWritable("AAT");
+ protected VKmerBytesWritable destNode = new VKmerBytesWritable("AGA");
+ protected long commonReadId = 2;
+
+ private EdgeDirs edgeDirs = new EdgeDirs();
+ private ArrayListWritable<EdgeDirs> edgeDirsList = new ArrayListWritable<EdgeDirs>();
+
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if (maxIteration < 0)
+ maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
+ if(incomingMsg == null)
+ incomingMsg = new BFSTraverseMessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new BFSTraverseMessageWritable();
+ else
+ outgoingMsg.reset();
+ if(kmerList == null)
+ kmerList = new VKmerListWritable();
+ else
+ kmerList.reset();
+ if(fakeVertex == null){
+ fakeVertex = new VKmerBytesWritable();
+ String random = generaterRandomString(kmerSize + 1);
+ fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0);
+ }
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable(kmerSize);
+ if(tmpKmer == null)
+ tmpKmer = new VKmerBytesWritable();
+ }
+
+ public void initiateSrcAndDestNode(VKmerListWritable pairKmerList, long readId, boolean srcFlip,
+ boolean destFlip){
+ srcNode.setAsCopy(pairKmerList.getPosition(0));
+ destNode.setAsCopy(pairKmerList.getPosition(1));
+ outgoingMsg.setReadId(readId);
+ outgoingMsg.setSeekedVertexId(destNode);
+ outgoingMsg.setSrcFlip(srcFlip);
+ outgoingMsg.setDestFlip(destFlip);
+ }
+
+ public void initialBroadcaseBFSTraverse(){
+ outgoingMsg.reset();
+ outgoingMsg.setSourceVertexId(getVertexId());
+ outgoingMsg.setSeekedVertexId(incomingMsg.getSeekedVertexId());
+ outgoingMsg.setSrcFlip(incomingMsg.isSrcFlip());
+ outgoingMsg.setDestFlip(incomingMsg.isDestFlip());
+ kmerList.reset();
+ kmerList.append(getVertexId());
+ outgoingMsg.setPathList(kmerList);
+ outgoingMsg.setReadId(incomingMsg.getReadId()); //only one readId
+ if(incomingMsg.isSrcFlip())
+ sendSettledMsgToAllPrevNodes(getVertexValue());
+ else
+ sendSettledMsgToAllNextNodes(getVertexValue());
+ }
+
+ public void broadcaseBFSTraverse(){
+ outgoingMsg.reset();
+ outgoingMsg.setSourceVertexId(incomingMsg.getSourceVertexId());
+ outgoingMsg.setSeekedVertexId(incomingMsg.getSeekedVertexId());
+ outgoingMsg.setSrcFlip(incomingMsg.isSrcFlip());
+ outgoingMsg.setDestFlip(incomingMsg.isDestFlip());
+ kmerList.setCopy(incomingMsg.getPathList());
+ kmerList.append(getVertexId());
+ outgoingMsg.setPathList(kmerList);
+ outgoingMsg.setReadId(incomingMsg.getReadId()); //only one readId
+ byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ /** set edgeDirs **/
+ setEdgeDirs(meToNeighborDir, neighborToMeDir);
+ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ case MessageFlag.DIR_FR:
+ sendSettledMsgToAllPrevNodes(getVertexValue());
+ break;
+ case MessageFlag.DIR_RF:
+ case MessageFlag.DIR_RR:
+ sendSettledMsgToAllNextNodes(getVertexValue());
+ break;
+ }
+ }
+
+ public void setEdgeDirs(byte meToNeighborDir, byte neighborToMeDir){
+ edgeDirsList.clear();
+ edgeDirsList.addAll(incomingMsg.getEdgeDirsList());
+ if(edgeDirsList.isEmpty()){ //first time from srcNode
+ /** set srcNode's next dir **/
+ edgeDirs.reset();
+ edgeDirs.setNextToMeDir(meToNeighborDir);
+ edgeDirsList.add(new EdgeDirs(edgeDirs));
+ /** set curNode's prev dir **/
+ edgeDirs.reset();
+ edgeDirs.setPrevToMeDir(neighborToMeDir);
+ edgeDirsList.add(new EdgeDirs(edgeDirs));
+ } else {
+ /** set preNode's next dir **/
+ edgeDirs.set(edgeDirsList.get(edgeDirsList.size() - 1));
+ edgeDirs.setNextToMeDir(meToNeighborDir);
+ edgeDirsList.set(edgeDirsList.size() - 1, new EdgeDirs(edgeDirs));
+ /** set curNode's prev dir **/
+ edgeDirs.reset();
+ edgeDirs.setPrevToMeDir(neighborToMeDir);
+ edgeDirsList.add(new EdgeDirs(edgeDirs));
+ }
+ outgoingMsg.setEdgeDirsList(edgeDirsList);
+ }
+
+ public boolean isValidDestination(){
+ byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ if(incomingMsg.isDestFlip())
+ return neighborToMeDir == MessageFlag.DIR_RF || neighborToMeDir == MessageFlag.DIR_RR;
+ else
+ return neighborToMeDir == MessageFlag.DIR_FF || neighborToMeDir == MessageFlag.DIR_FR;
+ }
+
+ public void sendMsgToPathNodeToAddCommondReadId(){
+ outgoingMsg.reset();
+ outgoingMsg.setTraverseMsg(false);
+ outgoingMsg.setReadId(incomingMsg.getReadId());
+ int count = kmerList.getCountOfPosition();
+ for(int i = 0; i < count; i++){
+ outgoingMsg.getEdgeDirsList().clear();
+ outgoingMsg.getEdgeDirsList().add(incomingMsg.getEdgeDirsList().get(i));
+ outgoingMsg.getPathList().reset();
+ if(i == 0){
+ outgoingMsg.getPathList().append(new VKmerBytesWritable());
+ outgoingMsg.getPathList().append(kmerList.getPosition(i + 1));
+ } else if(i == count - 1){
+ outgoingMsg.getPathList().append(kmerList.getPosition(i - 1));
+ outgoingMsg.getPathList().append(new VKmerBytesWritable());
+ } else{
+ outgoingMsg.getPathList().append(kmerList.getPosition(i - 1));
+ outgoingMsg.getPathList().append(kmerList.getPosition(i + 1));
+ }
+ destVertexId.setAsCopy(kmerList.getPosition(i));
+ sendMsg(destVertexId, outgoingMsg);
+ }
+ }
+
+ public void finalProcessBFS(){
+ kmerList.setCopy(incomingMsg.getPathList());
+ kmerList.append(getVertexId());
+ incomingMsg.setPathList(kmerList);
+ byte meToNeighborDir = (byte) (incomingMsg.getFlag() & MessageFlag.DIR_MASK);
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+ setEdgeDirs(meToNeighborDir, neighborToMeDir);
+ incomingMsg.setEdgeDirsList(outgoingMsg.getEdgeDirsList());
+ }
+
+ public void appendCommonReadId(){
+ long readId = incomingMsg.getReadId();
+ //add readId to prev edge
+ byte prevToMeDir = incomingMsg.getEdgeDirsList().get(0).getPrevToMeDir();
+ tmpKmer.setAsCopy(incomingMsg.getPathList().getPosition(0));
+ if(tmpKmer.getKmerLetterLength() != 0)
+ getVertexValue().getEdgeList(prevToMeDir).getReadIDs(tmpKmer).appendReadId(readId);
+ //set readId to next edge
+ byte nextToMeDir = incomingMsg.getEdgeDirsList().get(0).getNextToMeDir();
+ tmpKmer.setAsCopy(incomingMsg.getPathList().getPosition(1));
+ if(tmpKmer.getKmerLetterLength() != 0)
+ getVertexValue().getEdgeList(nextToMeDir).getReadIDs(tmpKmer).appendReadId(readId);
+ }
+
+ @Override
+ public void compute(Iterator<BFSTraverseMessageWritable> msgIterator) {
+ initVertex();
+ if(getSuperstep() == 1){
+ addFakeVertex();
+ voteToHalt();
+ }
+ else if(getSuperstep() == 2){
+ /** for test, assign two kmer to srcNode and destNode **/
+ kmerList.append(srcNode);
+ kmerList.append(destNode);
+ /** initiate two nodes -- srcNode and destNode **/
+ initiateSrcAndDestNode(kmerList, commonReadId, false, true);
+ sendMsg(srcNode, outgoingMsg);
+
+ deleteVertex(getVertexId());
+ } else if(getSuperstep() == 3){
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ /** begin to BFS **/
+ initialBroadcaseBFSTraverse();
+ }
+ voteToHalt();
+ } else if(getSuperstep() > 3){
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ if(incomingMsg.isTraverseMsg()){
+ /** check if find destination **/
+ if(incomingMsg.getSeekedVertexId().equals(getVertexId())){
+ if(isValidDestination()){
+ /** final step to process BFS -- pathList and dirList **/
+ finalProcessBFS();
+ /** send message to all the path nodes to add this common readId **/
+ sendMsgToPathNodeToAddCommondReadId();
+ }
+ else{
+ //continue to BFS
+ broadcaseBFSTraverse();
+ }
+ } else {
+ //continue to BFS
+ broadcaseBFSTraverse();
+ }
+ } else{
+ /** append common readId to the corresponding edge **/
+ appendCommonReadId();
+ }
+ }
+ voteToHalt();
+ }
+
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(BFSTraverseVertex.class.getSimpleName());
+ job.setVertexClass(BFSTraverseVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingVertex.java
new file mode 100644
index 0000000..e817a24
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/scaffolding/ScaffoldingVertex.java
@@ -0,0 +1,204 @@
+package edu.uci.ics.genomix.pregelix.operator.scaffolding;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+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.BFSTraverseMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.type.PositionWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerListWritable;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+
+public class ScaffoldingVertex extends
+ BFSTraverseVertex{
+
+ public class KmerListAndFlagList{
+ private ArrayList<Boolean> flagList;
+ private VKmerListWritable kmerList;
+
+ public KmerListAndFlagList(){
+ flagList = new ArrayList<Boolean>();
+ kmerList = new VKmerListWritable();
+ }
+
+ public void set(KmerListAndFlagList kmerAndflag){
+ flagList.clear();
+ kmerList.reset();
+ flagList.addAll(kmerAndflag.getFlagList());
+ kmerList.appendList(kmerAndflag.getKmerList());
+ }
+
+ public int size(){
+ return flagList.size();
+ }
+
+ public ArrayList<Boolean> getFlagList() {
+ return flagList;
+ }
+
+ public void setFlagList(ArrayList<Boolean> flagList) {
+ this.flagList = flagList;
+ }
+
+ public VKmerListWritable getKmerList() {
+ return kmerList;
+ }
+
+ public void setKmerList(VKmerListWritable kmerList) {
+ this.kmerList = kmerList;
+ }
+
+ }
+ private ArrayList<Boolean> flagList = new ArrayList<Boolean>();
+ private KmerListAndFlagList kmerListAndflagList = new KmerListAndFlagList();
+ public static Map<Long, KmerListAndFlagList> scaffoldingMap = new HashMap<Long, KmerListAndFlagList>();
+
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if (maxIteration < 0)
+ maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
+ if(incomingMsg == null)
+ incomingMsg = new BFSTraverseMessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new BFSTraverseMessageWritable();
+ else
+ outgoingMsg.reset();
+ if(kmerList == null)
+ kmerList = new VKmerListWritable();
+ else
+ kmerList.reset();
+ if(fakeVertex == null){
+ fakeVertex = new VKmerBytesWritable();
+ String random = generaterRandomString(kmerSize + 1);
+ fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0);
+ }
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable(kmerSize);
+ if(tmpKmer == null)
+ tmpKmer = new VKmerBytesWritable();
+ }
+
+ public void addStartReadsToScaffoldingMap(){
+ boolean isflip = false;
+ for(PositionWritable pos : getVertexValue().getStartReads()){
+ long readId = pos.getReadId();
+ if(scaffoldingMap.containsKey(readId)){
+ kmerList.setCopy(scaffoldingMap.get(readId).getKmerList());
+ kmerList.append(getVertexId());
+ flagList.clear();
+ flagList.addAll(scaffoldingMap.get(readId).getFlagList());
+ flagList.add(isflip);
+ } else{
+ kmerList.reset();
+ kmerList.append(getVertexId());
+ flagList.clear();
+ flagList.add(isflip);
+ }
+ kmerListAndflagList.setKmerList(kmerList);
+ kmerListAndflagList.setFlagList(flagList);
+ scaffoldingMap.put(readId, kmerListAndflagList);
+ }
+ }
+
+ public void addEndReadsToScaffoldingMap(){
+ boolean isflip = true;
+ for(PositionWritable pos : getVertexValue().getEndReads()){
+ long readId = pos.getReadId();
+ if(scaffoldingMap.containsKey(readId)){
+ kmerList.setCopy(scaffoldingMap.get(readId).getKmerList());
+ kmerList.append(getVertexId());
+ flagList.clear();
+ flagList.addAll(scaffoldingMap.get(readId).getFlagList());
+ flagList.add(isflip);
+ } else{
+ kmerList.reset();
+ kmerList.append(getVertexId());
+ flagList.clear();
+ flagList.add(isflip);
+ }
+ kmerListAndflagList.setKmerList(kmerList);
+ kmerListAndflagList.setFlagList(flagList);
+ scaffoldingMap.put(readId, kmerListAndflagList);
+ }
+ }
+
+ @Override
+ public void compute(Iterator<BFSTraverseMessageWritable> msgIterator) {
+ initVertex();
+ if(getSuperstep() == 1){
+ /** add a fake vertex **/
+ addFakeVertex();
+ /** grouped by 5'/~5' readId **/
+ addStartReadsToScaffoldingMap();
+ addEndReadsToScaffoldingMap();
+
+ voteToHalt();
+ } else if(getSuperstep() == 2){
+ /** process scaffoldingMap **/
+ for(Long readId : scaffoldingMap.keySet()){
+ kmerListAndflagList.set(scaffoldingMap.get(readId));
+ if(kmerListAndflagList.size() == 2){
+ initiateSrcAndDestNode(kmerListAndflagList.kmerList, commonReadId, kmerListAndflagList.flagList.get(0),
+ kmerListAndflagList.flagList.get(1));
+ sendMsg(srcNode, outgoingMsg);
+ }
+ }
+
+ deleteVertex(getVertexId());
+ } else if(getSuperstep() == 3){
+ if(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ /** begin to BFS **/
+ initialBroadcaseBFSTraverse();
+ }
+ voteToHalt();
+ } else if(getSuperstep() > 3){
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ if(incomingMsg.isTraverseMsg()){
+ /** check if find destination **/
+ if(incomingMsg.getSeekedVertexId().equals(getVertexId())){
+ if(isValidDestination()){
+ /** final step to process BFS -- pathList and dirList **/
+ finalProcessBFS();
+ /** send message to all the path nodes to add this common readId **/
+ sendMsgToPathNodeToAddCommondReadId();
+ }
+ else{
+ //continue to BFS
+ broadcaseBFSTraverse();
+ }
+ } else {
+ //continue to BFS
+ broadcaseBFSTraverse();
+ }
+ } else{
+ /** append common readId to the corresponding edge **/
+ appendCommonReadId();
+ }
+ }
+ voteToHalt();
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(ScaffoldingVertex.class.getSimpleName());
+ job.setVertexClass(ScaffoldingVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
new file mode 100644
index 0000000..eef5ea3
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
@@ -0,0 +1,268 @@
+package edu.uci.ics.genomix.pregelix.operator.splitrepeat;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Random;
+import java.util.Set;
+
+import edu.uci.ics.genomix.pregelix.io.SplitRepeatMessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+import edu.uci.ics.genomix.type.EdgeListWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.pregelix.api.graph.Vertex;
+import edu.uci.ics.pregelix.api.util.BspUtils;
+
+public class SplitRepeatVertex extends
+ BasicGraphCleanVertex<SplitRepeatMessageWritable>{
+
+ public class DeletedEdge{
+ private byte dir;
+ private EdgeWritable edge;
+
+ public DeletedEdge(){
+ dir = 0;
+ edge = new EdgeWritable();
+ }
+
+ public byte getDir() {
+ return dir;
+ }
+
+ public void setDir(byte dir) {
+ this.dir = dir;
+ }
+
+ public EdgeWritable getEdge() {
+ return edge;
+ }
+
+ public void setEdge(EdgeWritable edge) {
+ this.edge.setAsCopy(edge);
+ }
+
+ }
+
+ private byte[][] connectedTable = new byte[][]{
+ {MessageFlag.DIR_RF, MessageFlag.DIR_FF},
+ {MessageFlag.DIR_RF, MessageFlag.DIR_FR},
+ {MessageFlag.DIR_RR, MessageFlag.DIR_FF},
+ {MessageFlag.DIR_RR, MessageFlag.DIR_FR}
+ };
+
+ public static Set<String> existKmerString = new HashSet<String>();
+ protected VKmerBytesWritable createdVertexId = null;
+ private Set<Long> incomingReadIdSet = new HashSet<Long>();
+ private Set<Long> outgoingReadIdSet = new HashSet<Long>();
+ private Set<Long> neighborEdgeIntersection = new HashSet<Long>();
+ private EdgeListWritable incomingEdgeList = null;
+ private EdgeListWritable outgoingEdgeList = null;
+ private byte incomingEdgeDir = 0;
+ private byte outgoingEdgeDir = 0;
+
+ private EdgeWritable deletedEdge = new EdgeWritable();
+ private Set<DeletedEdge> deletedEdges = new HashSet<DeletedEdge>();//A set storing deleted edges
+
+ /**
+ * initiate kmerSize, maxIteration
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if (maxIteration < 0)
+ maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
+ if(incomingMsg == null)
+ incomingMsg = new SplitRepeatMessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new SplitRepeatMessageWritable();
+ else
+ outgoingMsg.reset();
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable();
+ if(tmpKmer == null)
+ tmpKmer = new VKmerBytesWritable();
+ if(incomingEdgeList == null)
+ incomingEdgeList = new EdgeListWritable();
+ if(outgoingEdgeList == null)
+ outgoingEdgeList = new EdgeListWritable();
+ if(createdVertexId == null)
+ createdVertexId = new VKmerBytesWritable();
+ }
+
+ /**
+ * Generate random string from [ACGT]
+ */
+ public String generaterRandomString(int n){
+ char[] chars = "ACGT".toCharArray();
+ StringBuilder sb = new StringBuilder();
+ Random random = new Random();
+ while(true){
+ for (int i = 0; i < n; i++) {
+ char c = chars[random.nextInt(chars.length)];
+ sb.append(c);
+ }
+ if(!existKmerString.contains(sb.toString()))
+ break;
+ }
+ existKmerString.add(sb.toString());
+ return sb.toString();
+ }
+
+ public void randomGenerateVertexId(int numOfSuffix){
+ String newVertexId = getVertexId().toString() + generaterRandomString(numOfSuffix);;
+ createdVertexId.setByRead(kmerSize + numOfSuffix, newVertexId.getBytes(), 0);
+ }
+
+ public void setEdgeListAndEdgeDir(int i){
+ incomingEdgeList.setAsCopy(getVertexValue().getEdgeList(connectedTable[i][0]));
+ incomingEdgeDir = connectedTable[i][0];
+
+ outgoingEdgeList.setAsCopy(getVertexValue().getEdgeList(connectedTable[i][1]));
+ outgoingEdgeDir = connectedTable[i][1];
+ }
+
+ public void setNeighborEdgeIntersection(EdgeWritable incomingEdge, EdgeWritable outgoingEdge){
+ incomingReadIdSet.clear();
+ long[] incomingReadIds = incomingEdge.getReadIDs().toReadIDArray();
+ for(long readId : incomingReadIds){
+ incomingReadIdSet.add(readId);
+ }
+ outgoingReadIdSet.clear();
+ long[] outgoingReadIds = outgoingEdge.getReadIDs().toReadIDArray();
+ for(long readId : outgoingReadIds){
+ outgoingReadIdSet.add(readId);
+ }
+ neighborEdgeIntersection.clear();
+ neighborEdgeIntersection.addAll(incomingReadIdSet);
+ neighborEdgeIntersection.retainAll(outgoingReadIdSet);
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public void createNewVertex(int i, EdgeWritable incomingEdge, EdgeWritable outgoingEdge){
+ Vertex vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
+ vertex.getMsgList().clear();
+ vertex.getEdges().clear();
+ VKmerBytesWritable vertexId = new VKmerBytesWritable();
+ VertexValueWritable vertexValue = new VertexValueWritable();
+ //add the corresponding edge to new vertex
+ vertexValue.getEdgeList(connectedTable[i][0]).add(incomingEdge);
+
+ vertexValue.getEdgeList(connectedTable[i][1]).add(outgoingEdge);
+
+ vertexValue.setInternalKmer(getVertexId());
+
+ vertexId.setAsCopy(createdVertexId);
+ vertex.setVertexId(vertexId);
+ vertex.setVertexValue(vertexValue);
+
+ addVertex(vertexId, vertex);
+ }
+
+ public void sendMsgToUpdateEdge(EdgeWritable incomingEdge, EdgeWritable outgoingEdge){
+ EdgeWritable createdEdge = new EdgeWritable();
+ createdEdge.setKey(createdVertexId);
+ for(Long readId: neighborEdgeIntersection)
+ createdEdge.appendReadID(readId);
+ outgoingMsg.setCreatedEdge(createdEdge);
+// outgoingMsg.setSourceVertexId(getVertexId());
+ deletedEdge.reset();
+ deletedEdge.setKey(getVertexId());
+ deletedEdge.setReadIDs(neighborEdgeIntersection);
+ outgoingMsg.setDeletedEdge(deletedEdge);
+
+ outgoingMsg.setFlag(incomingEdgeDir);
+ destVertexId.setAsCopy(incomingEdge.getKey());
+ sendMsg(destVertexId, outgoingMsg);
+
+ outgoingMsg.setFlag(outgoingEdgeDir);
+ destVertexId.setAsCopy(outgoingEdge.getKey());
+ sendMsg(destVertexId, outgoingMsg);
+ }
+
+ public void storeDeletedEdge(int i, EdgeWritable incomingEdge, EdgeWritable outgoingEdge,
+ Set<Long> commonReadIdSet){
+ DeletedEdge deletedIncomingEdge = new DeletedEdge();
+ DeletedEdge deletedOutgoingEdge = new DeletedEdge();
+
+ deletedIncomingEdge.setDir(connectedTable[i][0]);
+ deletedIncomingEdge.setEdge(incomingEdge);
+
+ deletedOutgoingEdge.setDir(connectedTable[i][1]);
+ deletedOutgoingEdge.setEdge(outgoingEdge);
+
+ deletedEdges.add(deletedIncomingEdge);
+ deletedEdges.add(deletedOutgoingEdge);
+ }
+
+ public void deleteEdgeFromOldVertex(DeletedEdge deleteEdge){
+ getVertexValue().getEdgeList(deleteEdge.dir).removeSubEdge(deleteEdge.getEdge());
+ }
+
+ public void updateEdgeListPointToNewVertex(){
+ byte meToNeighborDir = incomingMsg.getFlag();
+ byte neighborToMeDir = mirrorDirection(meToNeighborDir);
+
+ getVertexValue().getEdgeList(neighborToMeDir).removeSubEdge(incomingMsg.getDeletedEdge());
+ getVertexValue().getEdgeList(neighborToMeDir).add(incomingMsg.getCreatedEdge());
+ }
+
+ @Override
+ public void compute(Iterator<SplitRepeatMessageWritable> msgIterator) {
+ initVertex();
+ if(getSuperstep() == 1){
+ if(getVertexValue().getDegree() > 2){
+ deletedEdges.clear();
+ /** process connectedTable **/
+ for(int i = 0; i < 4; i++){
+ /** set edgeList and edgeDir based on connectedTable **/
+ setEdgeListAndEdgeDir(i);
+
+ for(EdgeWritable incomingEdge : incomingEdgeList){
+ for(EdgeWritable outgoingEdge : outgoingEdgeList){
+ /** set neighborEdge readId intersection **/
+ setNeighborEdgeIntersection(incomingEdge, outgoingEdge);
+
+ if(!neighborEdgeIntersection.isEmpty()){
+ /** random generate vertexId of new vertex **/
+ randomGenerateVertexId(3);
+
+ /** change incomingEdge/outgoingEdge's edgeList to commondReadIdSet **/
+ incomingEdge.setReadIDs(neighborEdgeIntersection);
+ outgoingEdge.setReadIDs(neighborEdgeIntersection);
+
+ /** create new/created vertex **/
+ createNewVertex(i, incomingEdge, outgoingEdge);
+
+ /** send msg to neighbors to update their edges to new vertex **/
+ sendMsgToUpdateEdge(incomingEdge, outgoingEdge);
+
+ /** store deleted edge **/
+ storeDeletedEdge(i, incomingEdge, outgoingEdge, neighborEdgeIntersection);
+ }
+ }
+ }
+ }
+ /** delete extra edges from old vertex **/
+ for(DeletedEdge deletedEdge : deletedEdges){
+ deleteEdgeFromOldVertex(deletedEdge);
+ }
+
+ /** Old vertex delete or voteToHalt **/
+ if(getVertexValue().getDegree() == 0)//if no any edge, delete
+ deleteVertex(getVertexId());
+ else
+ voteToHalt();
+ }
+ } else if(getSuperstep() == 2){
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ /** update edgelist to new/created vertex **/
+ updateEdgeListPointToNewVertex();
+ }
+ voteToHalt();
+ }
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
new file mode 100644
index 0000000..73e4df8
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
@@ -0,0 +1,151 @@
+package edu.uci.ics.genomix.pregelix.operator.tipremove;
+
+import java.util.Iterator;
+import org.apache.hadoop.io.NullWritable;
+
+import edu.uci.ics.genomix.type.EdgeListWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.pregelix.api.graph.Vertex;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+import edu.uci.ics.pregelix.api.util.BspUtils;
+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.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.type.MessageFlag;
+
+/*
+ * vertexId: BytesWritable
+ * vertexValue: ByteWritable
+ * edgeValue: NullWritable
+ * message: MessageWritable
+ *
+ * DNA:
+ * A: 00
+ * C: 01
+ * G: 10
+ * T: 11
+ *
+ * succeed node
+ * A 00000001 1
+ * G 00000010 2
+ * C 00000100 4
+ * T 00001000 8
+ * precursor node
+ * A 00010000 16
+ * G 00100000 32
+ * C 01000000 64
+ * T 10000000 128
+ *
+ * For example, ONE LINE in input file: 00,01,10 0001,0010,
+ * That means that vertexId is ACG, its succeed node is A and its precursor node is C.
+ * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
+ * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable.
+ */
+/**
+ * Remove tip or single node when l > constant
+ */
+public class TipAddVertex extends
+ Vertex<VKmerBytesWritable, VertexValueWritable, NullWritable, MessageWritable> {
+ public static final String KMER_SIZE = "BasicGraphCleanVertex.kmerSize";
+ public static int kmerSize = -1;
+
+ private VKmerBytesWritable splitNode = new VKmerBytesWritable("CTA");
+ private VKmerBytesWritable insertedTip = new VKmerBytesWritable("AGC");
+ private byte tipToSplitDir = MessageFlag.DIR_RF;
+ /**
+ * initiate kmerSize, length
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void insertTip(byte dir, EdgeListWritable edgeList, VKmerBytesWritable insertedTip){
+ Vertex vertex = (Vertex) BspUtils.createVertex(getContext().getConfiguration());
+ vertex.getMsgList().clear();
+ vertex.getEdges().clear();
+
+ VertexValueWritable vertexValue = new VertexValueWritable(); //kmerSize
+ /**
+ * set the src vertex id
+ */
+ vertex.setVertexId(insertedTip);
+ /**
+ * set the vertex value
+ */
+ vertexValue.setEdgeList(dir, edgeList);
+ vertex.setVertexValue(vertexValue);
+
+ addVertex(insertedTip, vertex);
+ }
+
+ public EdgeListWritable getEdgeListFromKmer(VKmerBytesWritable kmer){
+ EdgeListWritable edgeList = new EdgeListWritable();
+ EdgeWritable newEdge = new EdgeWritable();
+ newEdge.setKey(kmer);
+ newEdge.appendReadID(0);
+ edgeList.add(newEdge);
+ return edgeList;
+ }
+
+ public void addEdgeToInsertedTip(byte dir, VKmerBytesWritable insertedTip){
+ EdgeWritable newEdge = new EdgeWritable();
+ newEdge.setKey(insertedTip);
+ newEdge.appendReadID(0);
+ getVertexValue().getEdgeList(dir).add(newEdge);
+ }
+
+ /**
+ * Returns the edge dir for B->A when the A->B edge is type @dir
+ */
+ public byte mirrorDirection(byte dir) {
+ switch (dir) {
+ case MessageFlag.DIR_FF:
+ return MessageFlag.DIR_RR;
+ case MessageFlag.DIR_FR:
+ return MessageFlag.DIR_FR;
+ case MessageFlag.DIR_RF:
+ return MessageFlag.DIR_RF;
+ case MessageFlag.DIR_RR:
+ return MessageFlag.DIR_FF;
+ default:
+ throw new RuntimeException("Unrecognized direction in flipDirection: " + dir);
+ }
+ }
+
+ /**
+ * create a new vertex point to split node
+ */
+ @Override
+ public void compute(Iterator<MessageWritable> msgIterator) {
+ initVertex();
+ if(getSuperstep() == 1){
+ if(getVertexId().equals(splitNode)){
+ /** add edge pointing to insertedTip **/
+ addEdgeToInsertedTip(tipToSplitDir, insertedTip);
+ /** insert tip **/
+ byte splitToTipDir = mirrorDirection(tipToSplitDir);
+ insertTip(splitToTipDir, getEdgeListFromKmer(splitNode), insertedTip);
+ }
+ }
+ voteToHalt();
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(TipAddVertex.class.getSimpleName());
+ job.setVertexClass(TipAddVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
new file mode 100644
index 0000000..506da07
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
@@ -0,0 +1,113 @@
+package edu.uci.ics.genomix.pregelix.operator.tipremove;
+
+import java.util.Iterator;
+
+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.MessageWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
+import edu.uci.ics.genomix.pregelix.util.VertexUtil;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+/*
+ * vertexId: BytesWritable
+ * vertexValue: ByteWritable
+ * edgeValue: NullWritable
+ * message: MessageWritable
+ *
+ * DNA:
+ * A: 00
+ * C: 01
+ * G: 10
+ * T: 11
+ *
+ * succeed node
+ * A 00000001 1
+ * G 00000010 2
+ * C 00000100 4
+ * T 00001000 8
+ * precursor node
+ * A 00010000 16
+ * G 00100000 32
+ * C 01000000 64
+ * T 10000000 128
+ *
+ * For example, ONE LINE in input file: 00,01,10 0001,0010,
+ * That means that vertexId is ACG, its succeed node is A and its precursor node is C.
+ * The succeed node and precursor node will be stored in vertexValue and we don't use edgeValue.
+ * The details about message are in edu.uci.ics.pregelix.example.io.MessageWritable.
+ */
+/**
+ * Remove tip or single node when l > constant
+ */
+public class TipRemoveVertex extends
+ BasicGraphCleanVertex<MessageWritable> {
+ public static final String LENGTH = "TipRemoveVertex.length";
+ private int length = -1;
+
+ /**
+ * initiate kmerSize, length
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ if(length == -1)
+ length = getContext().getConfiguration().getInt(LENGTH, kmerSize); //kmerSize + 5
+ if(incomingMsg == null)
+ incomingMsg = new MessageWritable();
+ if(outgoingMsg == null)
+ outgoingMsg = new MessageWritable();
+ else
+ outgoingMsg.reset();
+ if(destVertexId == null)
+ destVertexId = new VKmerBytesWritable();
+ }
+
+ @Override
+ public void compute(Iterator<MessageWritable> msgIterator) {
+ initVertex();
+ if(getSuperstep() == 1){
+ if(VertexUtil.isIncomingTipVertex(getVertexValue())){
+ if(getVertexValue().getKmerLength() <= length){
+ sendSettledMsgToNextNode();
+ deleteVertex(getVertexId());
+ }
+ }
+ else if(VertexUtil.isOutgoingTipVertex(getVertexValue())){
+ if(getVertexValue().getKmerLength() <= length){
+
+ sendSettledMsgToPrevNode();
+ deleteVertex(getVertexId());
+ }
+ }
+ else if(VertexUtil.isSingleVertex(getVertexValue())){
+ if(getVertexValue().getKmerLength() <= length)
+ deleteVertex(getVertexId());
+ }
+ }
+ else if(getSuperstep() == 2){
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ responseToDeadVertex();
+ }
+ }
+ voteToHalt();
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(TipRemoveVertex.class.getSimpleName());
+ job.setVertexClass(TipRemoveVertex.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
new file mode 100644
index 0000000..ffd53a9
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
@@ -0,0 +1,130 @@
+package edu.uci.ics.genomix.pregelix.operator.unrolltandemrepeat;
+
+import java.util.Iterator;
+
+import edu.uci.ics.genomix.pregelix.client.Client;
+import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
+import edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat;
+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.util.VertexUtil;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+
+public class UnrollTandemRepeat extends
+ BasicGraphCleanVertex<MessageWritable>{
+ public static final String KMER_SIZE = "BasicGraphCleanVertex.kmerSize";
+ public static int kmerSize = -1;
+
+ private EdgeWritable tmpEdge = new EdgeWritable();
+
+ /**
+ * initiate kmerSize, length
+ */
+ public void initVertex() {
+ if (kmerSize == -1)
+ kmerSize = getContext().getConfiguration().getInt(KMER_SIZE, 5);
+ outgoingMsg.reset();
+ }
+
+ /**
+ * check if this tandem repeat can be solved
+ */
+ public boolean repeatCanBeMerged(){
+ tmpValue.setAsCopy(getVertexValue());
+ tmpValue.getEdgeList(repeatDir).remove(repeatKmer);
+ boolean hasFlip = false;
+ /** pick one edge and flip **/
+ for(byte d : DirectionFlag.values){
+ for(EdgeWritable edge : tmpValue.getEdgeList(d)){
+ byte flipDir = flipDir(d);
+ tmpValue.getEdgeList(flipDir).add(edge);
+ tmpValue.getEdgeList(d).remove(edge);
+ /** setup hasFlip to go out of the loop **/
+ hasFlip = true;
+ break;
+ }
+ if(hasFlip)
+ break;
+ }
+
+ if(VertexUtil.isPathVertex(tmpValue) || VertexUtil.isTipVertex(tmpValue)
+ || VertexUtil.isSingleVertex(tmpValue))
+ return true;
+ else
+ return false;
+ }
+
+ /**
+ * merge tandem repeat
+ */
+ public void mergeTandemRepeat(){
+ getVertexValue().getInternalKmer().mergeWithKmerInDir(repeatDir, kmerSize, getVertexId());
+ getVertexValue().getEdgeList(repeatDir).remove(getVertexId());
+ boolean hasFlip = false;
+ /** pick one edge and flip **/
+ for(byte d : DirectionFlag.values){
+ for(EdgeWritable edge : getVertexValue().getEdgeList(d)){
+ byte flipDir = flipDir(d);
+ getVertexValue().getEdgeList(flipDir).add(edge);
+ getVertexValue().getEdgeList(d).remove(edge);
+ /** send flip message to node for updating edgeDir **/
+ outgoingMsg.setFlag(flipDir);
+ outgoingMsg.setSourceVertexId(getVertexId());
+ sendMsg(edge.getKey(), outgoingMsg);
+ /** setup hasFlip to go out of the loop **/
+ hasFlip = true;
+ break;
+ }
+ if(hasFlip)
+ break;
+ }
+ }
+
+ /**
+ * update edges
+ */
+ public void updateEdges(){
+ byte flipDir = flipDir(incomingMsg.getFlag());
+ byte prevNeighborToMe = mirrorDirection(flipDir);
+ byte curNeighborToMe = mirrorDirection(incomingMsg.getFlag());
+ tmpEdge.setAsCopy(getVertexValue().getEdgeList(prevNeighborToMe).getEdge(incomingMsg.getSourceVertexId()));
+ getVertexValue().getEdgeList(prevNeighborToMe).remove(incomingMsg.getSourceVertexId());
+ getVertexValue().getEdgeList(curNeighborToMe).add(tmpEdge);
+ }
+
+ @Override
+ public void compute(Iterator<MessageWritable> msgIterator) throws Exception {
+ initVertex();
+ if(getSuperstep() == 1){
+ if(isTandemRepeat() && repeatCanBeMerged()){
+ mergeTandemRepeat();
+ }
+ voteToHalt();
+ } else if(getSuperstep() == 2){
+ while(msgIterator.hasNext()){
+ incomingMsg = msgIterator.next();
+ /** update edge **/
+ updateEdges();
+ }
+ voteToHalt();
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ PregelixJob job = new PregelixJob(UnrollTandemRepeat.class.getSimpleName());
+ job.setVertexClass(UnrollTandemRepeat.class);
+ /**
+ * BinaryInput and BinaryOutput
+ */
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ Client.run(args, job);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
new file mode 100644
index 0000000..d075fe9
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
@@ -0,0 +1,125 @@
+package edu.uci.ics.genomix.pregelix.sequencefile;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.FilenameFilter;
+import java.io.IOException;
+
+import org.apache.commons.io.filefilter.WildcardFileFilter;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.io.SequenceFile;
+
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+public class GenerateTextFile {
+
+ public static void generateFromPathmergeResult(int kmerSize, String strSrcDir, String outPutDir) throws IOException {
+ Configuration conf = new Configuration();
+ FileSystem fileSys = FileSystem.getLocal(conf);
+
+ fileSys.create(new Path(outPutDir));
+ BufferedWriter bw = new BufferedWriter(new FileWriter(outPutDir));
+ File srcPath = new File(strSrcDir);
+ for (File f : srcPath.listFiles((FilenameFilter) (new WildcardFileFilter("part*")))) {
+ SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, new Path(f.getAbsolutePath()), conf);
+ VKmerBytesWritable key = new VKmerBytesWritable();
+ VertexValueWritable value = new VertexValueWritable();
+
+ while (reader.next(key, value)) {
+ if (key == null) {
+ break;
+ }
+ bw.write(key.toString() + "\t" + value.toString());
+ System.out.println(key.toString());
+ bw.newLine();
+ }
+ reader.close();
+ }
+ bw.close();
+ }
+
+ public static void generateSpecificLengthChainFromNaivePathmergeResult(int maxLength) throws IOException {
+ BufferedWriter bw = new BufferedWriter(new FileWriter("naive_text_" + maxLength));
+ Configuration conf = new Configuration();
+ FileSystem fileSys = FileSystem.get(conf);
+ for (int i = 0; i < 2; i++) {
+ Path path = new Path("/home/anbangx/genomix_result/final_naive/part-" + i);
+ SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
+ VKmerBytesWritable key = new VKmerBytesWritable();
+ VertexValueWritable value = new VertexValueWritable();
+
+ while (reader.next(key, value)) {
+ if (key == null || value == null) {
+ break;
+ }
+ if (value.getKmerLength() != -1 && value.getKmerLength() <= maxLength) {
+ bw.write(value.toString());
+ bw.newLine();
+ }
+ }
+ reader.close();
+ }
+ bw.close();
+ }
+
+ public static void generateSpecificLengthChainFromLogPathmergeResult(int maxLength) throws IOException {
+ BufferedWriter bw = new BufferedWriter(new FileWriter("log_text_" + maxLength));
+ Configuration conf = new Configuration();
+ FileSystem fileSys = FileSystem.get(conf);
+ for (int i = 0; i < 2; i++) {
+ Path path = new Path("/home/anbangx/genomix_result/improvelog2/part-" + i);
+ SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
+ VKmerBytesWritable key = new VKmerBytesWritable();
+ VertexValueWritable value = new VertexValueWritable();
+
+ while (reader.next(key, value)) {
+ if (key == null || value == null) {
+ break;
+ }
+ if (value.getKmerLength() != -1 && value.getKmerLength() <= maxLength
+ && value.getState() == State.IS_FINAL) {
+ bw.write(key.toString() + "\t" + value.toString());
+ bw.newLine();
+ }
+ }
+ reader.close();
+ }
+ bw.close();
+ }
+
+ public static void generateFromGraphbuildResult() throws IOException {
+ BufferedWriter bw = new BufferedWriter(new FileWriter("textfile"));
+ Configuration conf = new Configuration();
+ FileSystem fileSys = FileSystem.get(conf);
+ Path path = new Path("data/input/part-0-out-3000000");
+ SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
+ VKmerBytesWritable key = new VKmerBytesWritable();
+
+ while (reader.next(key, null)) {
+ if (key == null) {
+ break;
+ }
+ bw.write(key.toString());
+ bw.newLine();
+ }
+ reader.close();
+ bw.close();
+ }
+
+ /**
+ * @param args
+ * @throws IOException
+ */
+ public static void main(String[] args) throws IOException {
+ //generateFromPathmergeResult();
+ //generateFromGraphbuildResult();
+ //generateSpecificLengthChainFromPathmergeResult(68);
+ //generateSpecificLengthChainFromLogPathmergeResult(68);
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
new file mode 100644
index 0000000..f73a5de
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
@@ -0,0 +1,122 @@
+package edu.uci.ics.genomix.pregelix.testcase;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+
+public class GenerateTestInput {
+
+ /**
+ * Simple Path
+ */
+ public static String simplePath(int kmerSize, int readLength, int numLines) {
+ RandomString rs = new RandomString(kmerSize, readLength);
+ String output = "";
+ for (int i = 0; i < numLines; i++)
+ output += rs.nextString(0) + "\r\n";
+ return output;
+
+ }
+
+ /**
+ * Bridge Path
+ */
+ public static String bridgePath(int kmerSize, int headLength, int bridgeLength, int readLength) {
+ RandomString rs = new RandomString(kmerSize, readLength);
+ String s1 = rs.nextString(0);
+ rs.setLength(headLength + bridgeLength);
+ int startBridge = kmerSize + headLength;
+ rs.addString(s1.substring(0, startBridge));
+ String s2 = rs.nextString(startBridge) + s1.substring(bridgeLength + startBridge - kmerSize);
+ return s1 + "\r\n" + s2;
+ }
+
+ /**
+ * Tree Path
+ */
+ public static String treePath(int kmerSize, int x, int y, int z) {
+ RandomString rs = new RandomString(kmerSize, x + y + kmerSize - 1);
+ String s1 = rs.nextString(0);
+ rs.setLength(x + y + z + kmerSize - 1);
+ rs.addString(s1.substring(0, x));
+ String s2 = rs.nextString(x);
+ rs.setLength(x + y + z + kmerSize - 1);
+ rs.addString(s2.substring(0, x + y));
+ String s3 = rs.nextString(x + y);
+ return s1 + "\r\n" + s2 + "\r\n" + s3;
+ }
+
+ /**
+ * Cycle Path
+ */
+ public static String cyclePath(int kmerSize, int length) {
+ RandomString rs = new RandomString(kmerSize, length);
+ String s1 = rs.nextString(0);
+ String s2 = s1 + s1.substring(1, kmerSize + 1);
+ return s2;
+ }
+
+ public static void generateSimplePath(String destDir, int kmerSize, int readLength, int numLines){
+ OutputStreamWriter writer;
+ try {
+ writer = new OutputStreamWriter(new FileOutputStream(destDir));
+ writer.write(simplePath(kmerSize, readLength, numLines));
+ writer.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void generateBridgePath(String destDir, int kmerSize, int headLength, int bridgeLength, int readLength){
+ OutputStreamWriter writer;
+ try {
+ writer = new OutputStreamWriter(new FileOutputStream(destDir));
+ writer.write(bridgePath(kmerSize, headLength, bridgeLength, readLength));
+ writer.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void generateTreePath(String destDir, int kmerSize, int x, int y, int z){
+ OutputStreamWriter writer;
+ try {
+ writer = new OutputStreamWriter(new FileOutputStream(destDir));
+ writer.write(treePath(kmerSize, x, y, z));
+ writer.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void generateCyclePath(String destDir, int kmerSize, int cycleLength){
+ OutputStreamWriter writer;
+ try {
+ writer = new OutputStreamWriter(new FileOutputStream(destDir));
+ writer.write(cyclePath(kmerSize, cycleLength));
+ writer.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) {
+ int kmerSize = 3;
+ /** SimplePath **/
+ int readLength = 9;
+ int numLines = 3;
+ generateSimplePath("graph/SimplePath", kmerSize, readLength, numLines);
+ /** BridgePath **/
+ int headLength = 2;
+ int bridgeLength = 4;
+ generateBridgePath("graph/BridgePath", kmerSize, headLength, bridgeLength, readLength);
+ /** TreePath **/
+ int x = 5;
+ int y = 5;
+ int z = 5;
+ generateTreePath("graph/TreePath", kmerSize, x, y, z);
+ /** CyclePath **/
+ int cycleLength = 8;
+ generateCyclePath("graph/CyclePath", kmerSize, cycleLength);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/RandomString.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/RandomString.java
new file mode 100644
index 0000000..cd83171
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/RandomString.java
@@ -0,0 +1,59 @@
+package edu.uci.ics.genomix.pregelix.testcase;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+public class RandomString {
+
+ private static final char[] symbols = new char[4];
+
+ static {
+ symbols[0] = 'A';
+ symbols[1] = 'C';
+ symbols[2] = 'G';
+ symbols[3] = 'T';
+ }
+
+ private final Random random = new Random();
+
+ private char[] buf;
+
+ private ArrayList<String> existKmer = new ArrayList<String>();;
+
+ private int k;
+
+ public RandomString(int k, int length) {
+ if (length < 1)
+ throw new IllegalArgumentException("length < 1: " + length);
+ buf = new char[length];
+ this.k = k;
+ }
+
+ public String nextString(int startIdx) {
+ String tmp = "";
+ for (int idx = startIdx; idx < buf.length;) {
+ buf[idx] = symbols[random.nextInt(4)];
+ if (idx >= k - 1) {
+ tmp = new String(buf, idx - k + 1, k);
+ if (!existKmer.contains(tmp)) {
+ existKmer.add(tmp);
+ idx++;
+ }
+ } else
+ idx++;
+ }
+
+ return new String(buf);
+ }
+
+ public void setLength(int length) {
+ buf = new char[length];
+ }
+
+ public void addString(String s) {
+ char[] tmp = s.toCharArray();
+ for (int i = 0; i < tmp.length; i++)
+ buf[i] = tmp[i];
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/DirFlag.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/DirFlag.java
new file mode 100644
index 0000000..451810a
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/DirFlag.java
@@ -0,0 +1,12 @@
+package edu.uci.ics.genomix.pregelix.type;
+
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+
+public class DirFlag extends State{
+ public static final byte DIR_FF = 0b00 << 0;
+ public static final byte DIR_FR = 0b01 << 0;
+ public static final byte DIR_RF = 0b10 << 0;
+ public static final byte DIR_RR = 0b11 << 0;
+ public static final byte DIR_MASK = 0b11 << 0;
+ public static final byte DIR_CLEAR = 0b1111100 << 0;
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/EdgeDirs.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/EdgeDirs.java
new file mode 100644
index 0000000..2881ee1
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/EdgeDirs.java
@@ -0,0 +1,91 @@
+package edu.uci.ics.genomix.pregelix.type;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.hadoop.io.Writable;
+
+public class EdgeDirs implements Writable{
+
+ private byte prevToMeDir;
+ private byte nextToMeDir;
+ private boolean hasPrevDir;
+ private boolean hasNextDir;
+
+ public EdgeDirs(){
+ prevToMeDir = 0;
+ nextToMeDir = 0;
+ hasPrevDir = false;
+ hasNextDir = false;
+ }
+
+ public EdgeDirs(EdgeDirs other){
+ set(other);
+ }
+
+ public void set(EdgeDirs edgeDirs){
+ prevToMeDir = edgeDirs.prevToMeDir;
+ nextToMeDir = edgeDirs.nextToMeDir;
+ hasPrevDir = edgeDirs.hasPrevDir;
+ hasNextDir = edgeDirs.hasNextDir;
+ }
+
+ public void reset(){
+ prevToMeDir = 0;
+ nextToMeDir = 0;
+ hasPrevDir = false;
+ hasNextDir = false;
+ }
+
+ public byte getPrevToMeDir() {
+ return prevToMeDir;
+ }
+
+ public void setPrevToMeDir(byte prevToMeDir) {
+ this.hasPrevDir = true;
+ this.prevToMeDir = prevToMeDir;
+ }
+
+ public byte getNextToMeDir() {
+ return nextToMeDir;
+ }
+
+ public void setNextToMeDir(byte nextToMeDir) {
+ this.hasNextDir = true;
+ this.nextToMeDir = nextToMeDir;
+ }
+
+ public boolean isHasPrevDir() {
+ return hasPrevDir;
+ }
+
+ public void setHasPrevDir(boolean hasPrevDir) {
+ this.hasPrevDir = hasPrevDir;
+ }
+
+ public boolean isHasNextDir() {
+ return hasNextDir;
+ }
+
+ public void setHasNextDir(boolean hasNextDir) {
+ this.hasNextDir = hasNextDir;
+ }
+
+ @Override
+ public void readFields(DataInput in) throws IOException {
+ this.prevToMeDir = in.readByte();
+ this.nextToMeDir = in.readByte();
+ this.hasPrevDir = in.readBoolean();
+ this.hasNextDir = in.readBoolean();
+ }
+
+ @Override
+ public void write(DataOutput out) throws IOException {
+ out.writeByte(this.prevToMeDir);
+ out.writeByte(this.nextToMeDir);
+ out.writeBoolean(this.hasPrevDir);
+ out.writeBoolean(this.hasNextDir);
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
new file mode 100644
index 0000000..59a5937
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.type;
+
+public class MessageFlag extends DirFlag {
+
+ public static final byte STOP = 0b1 << 2;
+ public static final byte STOP_MASK = 0b1 << 2;
+
+ public static String getFlagAsString(byte code) {
+ // TODO: allow multiple flags to be set
+ return "ERROR_BAD_MESSAGE";
+ }
+}
+
+
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageTypeFromHead.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageTypeFromHead.java
new file mode 100644
index 0000000..5a49ee7
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageTypeFromHead.java
@@ -0,0 +1,17 @@
+package edu.uci.ics.genomix.pregelix.type;
+
+public class MessageTypeFromHead {
+ public static final byte BothMsgsFromHead = 0b0000 << 1;
+ public static final byte BothMsgsFromNonHead = 0b0001 << 1;
+ public static final byte BothMsgsFromOldHead = 0b0010 << 1;
+ public static final byte OneMsgFromHead = 0b0011 << 1;
+ public static final byte OneMsgFromNonHead = 0b0100 << 1;
+ public static final byte OneMsgFromHeadAndOneFromNonHead = 0b0101 << 1;
+ public static final byte OneMsgFromHeadToHead = 0b0110 << 1;
+ public static final byte OneMsgFromOldHeadToNonHead = 0b0111 << 1;
+ public static final byte OneMsgFromOldHeadToHead = 0b1000 << 1;
+ public static final byte OneMsgFromOldHeadAndOneFromHead = 0b1001 << 1;
+ public static final byte NO_MSG = 0b1010 << 1;
+
+ public static final byte NO_INFO = 0 << 0;
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
new file mode 100644
index 0000000..4db034e
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/util/VertexUtil.java
@@ -0,0 +1,175 @@
+package edu.uci.ics.genomix.pregelix.util;
+
+import edu.uci.ics.genomix.pregelix.io.AdjacencyListWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.type.EdgeWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+
+public class VertexUtil {
+ /**
+ * Single Vertex: in-degree = out-degree = 1
+ *
+ * @param vertexValue
+ */
+ public static boolean isPathVertex(VertexValueWritable value) {
+ return value.inDegree() == 1 && value.outDegree() == 1;
+ }
+
+ /**
+ * Head Vertex: out-degree > 0
+ */
+ public static boolean isHead(VertexValueWritable value){
+ return value.outDegree() > 0 && !isPathVertex(value);
+ }
+
+ public static boolean isHeadOrRearVertexWithDegree(VertexValueWritable value){
+ return isHeadVertexWithIndegree(value) || isRearVertexWithOutdegree(value);
+ }
+ /**
+ * Head Vertex: out-degree > 0, and has indegress
+ *
+ * @param vertexValue
+ */
+ public static boolean isHeadVertexWithIndegree(VertexValueWritable value) {
+ return isHead(value) && !isHeadWithoutIndegree(value);
+ }
+
+ /**
+ * Head Vertex without indegree: indegree = 0, outdegree = 1
+ */
+ public static boolean isHeadWithoutIndegree(VertexValueWritable value){
+ return value.inDegree() == 0 && value.outDegree() == 1;
+ }
+
+ public static boolean isHeadVertexWithOnlyOneOutgoing(VertexValueWritable value){
+ return isHead(value) && value.outDegree() == 1;
+ }
+
+ public static boolean isHeadVertexWithManyOutgoing(VertexValueWritable value){
+ return isHead(value) && value.outDegree() > 1;
+ }
+
+ /**
+ * Head Vertex: out-degree > 0
+ */
+ public static boolean isRear(VertexValueWritable value){
+ return value.inDegree() > 0 && !isPathVertex(value);
+ }
+
+ /**
+ * Rear Vertex: in-degree > 0, and has outdegree
+ *
+ * @param vertexValue
+ */
+ public static boolean isRearVertexWithOutdegree(VertexValueWritable value) {
+ return isRear(value) && !isRearWithoutOutdegree(value);
+ }
+
+ /**
+ * Rear Vertex without outdegree: indegree = 1, outdegree = 0
+ */
+ public static boolean isRearWithoutOutdegree(VertexValueWritable value){
+ return value.inDegree() == 1 && value.outDegree() == 0;
+ }
+
+
+ public static boolean isRearVertexWithOnlyOneIncoming(VertexValueWritable value){
+ return isRear(value) && value.inDegree() == 1;
+ }
+
+ public static boolean isRearVertexWithManyIncoming(VertexValueWritable value){
+ return isRear(value) && value.inDegree() > 1;
+ }
+
+ /**
+ * check if mergeChain is cycle
+ */
+ public static boolean isCycle(VKmerBytesWritable kmer, VKmerBytesWritable mergeChain, int kmerSize) {
+ String chain = mergeChain.toString().substring(1);
+ return chain.contains(kmer.toString());
+ }
+
+ /**
+ * check if vertex is a tip
+ */
+ public static boolean isTipVertex(VertexValueWritable value){
+ return isIncomingTipVertex(value) || isOutgoingTipVertex(value);
+ }
+
+ public static boolean isIncomingTipVertex(VertexValueWritable value){
+ return value.inDegree() == 0 && value.outDegree() == 1;
+ }
+
+ public static boolean isOutgoingTipVertex(VertexValueWritable value){
+ return value.inDegree() == 1 && value.outDegree() == 0;
+ }
+
+ /**
+ * check if vertex is single
+ */
+ public static boolean isSingleVertex(VertexValueWritable value){
+ return value.inDegree() == 0 && value.outDegree() == 0;
+ }
+
+ /**
+ * check if vertex is upbridge
+ */
+ public static boolean isUpBridgeVertex(VertexValueWritable value){
+ return value.inDegree() == 1 && value.outDegree() > 1;
+ }
+
+ /**
+ * check if vertex is downbridge
+ */
+ public static boolean isDownBridgeVertex(VertexValueWritable value){
+ return value.inDegree() > 1 && value.outDegree() == 1;
+ }
+
+ /**
+ * get nodeId from Ad
+ */
+ public static EdgeWritable getNodeIdFromAdjacencyList(AdjacencyListWritable adj){
+ if(adj.getForwardList().getCountOfPosition() > 0)
+ return adj.getForwardList().get(0);
+ else if(adj.getReverseList().getCountOfPosition() > 0)
+ return adj.getReverseList().get(0);
+ else
+ return null;
+ }
+
+ /**
+ * check if vertex is a valid head
+ * valid head = 1. path node || 2. only one outgoing + no path node
+ */
+ public static boolean isValidHead(VertexValueWritable value){
+ return isPathVertex(value) || (value.outDegree() == 1 && !isPathVertex(value));
+ }
+
+ /**
+ * check if vertex is a valid Rear
+ * valid head = 1. path node || 2. only one incoming + no path node
+ */
+ public static boolean isValidRear(VertexValueWritable value){
+ return isPathVertex(value) || (value.inDegree() == 1 && !isPathVertex(value));
+ }
+
+ public static boolean isVertexWithOnlyOneIncoming(VertexValueWritable value){
+ return value.inDegree() == 1 && !isPathVertex(value);
+ }
+
+ public static boolean isVertexWithOnlyOneOutgoing(VertexValueWritable value){
+ return value.outDegree() == 1 && !isPathVertex(value);
+ }
+
+ public static boolean isVertexWithManyIncoming(VertexValueWritable value){
+ return value.inDegree() > 1;
+ }
+
+ public static boolean isVertexWithManyOutgoing(VertexValueWritable value){
+ return value.outDegree() > 1;
+ }
+
+ public static boolean isActiveVertex(VertexValueWritable value){
+ return value.inDegree() == 1 || value.outDegree() == 1;
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
new file mode 100644
index 0000000..e1ae674
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
@@ -0,0 +1,322 @@
+package edu.uci.ics.genomix.pregelix.JobGen;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat;
+import edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat;
+import edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat;
+import edu.uci.ics.genomix.pregelix.format.P2PathMergeOutputFormat;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.operator.bridgeremove.BridgeAddVertex;
+import edu.uci.ics.genomix.pregelix.operator.bridgeremove.BridgeRemoveVertex;
+import edu.uci.ics.genomix.pregelix.operator.bubblemerge.BubbleAddVertex;
+import edu.uci.ics.genomix.pregelix.operator.bubblemerge.BubbleMergeVertex;
+import edu.uci.ics.genomix.pregelix.operator.pathmerge.P1ForPathMergeVertex;
+import edu.uci.ics.genomix.pregelix.operator.pathmerge.P2ForPathMergeVertex;
+import edu.uci.ics.genomix.pregelix.operator.pathmerge.MapReduceVertex;
+import edu.uci.ics.genomix.pregelix.operator.pathmerge.P4ForPathMergeVertex;
+import edu.uci.ics.genomix.pregelix.operator.removelowcoverage.RemoveLowCoverageVertex;
+import edu.uci.ics.genomix.pregelix.operator.scaffolding.BFSTraverseVertex;
+import edu.uci.ics.genomix.pregelix.operator.scaffolding.ScaffoldingVertex;
+import edu.uci.ics.genomix.pregelix.operator.splitrepeat.SplitRepeatVertex;
+import edu.uci.ics.genomix.pregelix.operator.tipremove.TipAddVertex;
+import edu.uci.ics.genomix.pregelix.operator.tipremove.TipRemoveVertex;
+import edu.uci.ics.genomix.pregelix.operator.unrolltandemrepeat.UnrollTandemRepeat;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+
+public class JobGenerator {
+
+ public static String outputBase = "src/test/resources/jobs/";
+
+ private static void generateUnrollTandemRepeatGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(UnrollTandemRepeat.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(UnrollTandemRepeat.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genUnrollTandemRepeatGraph() throws IOException {
+ generateUnrollTandemRepeatGraphJob("UnrollTandemRepeatGraph", outputBase + "UnrollTandemRepeatGraph.xml");
+ }
+
+ private static void generateMapReduceGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(MapReduceVertex.class);
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(MapReduceVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genMapReduceGraph() throws IOException {
+ generateMapReduceGraphJob("MapReduceGraph", outputBase + "MapReduceGraph.xml");
+ }
+
+ private static void generateP1ForMergeGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(P1ForPathMergeVertex.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class); //GraphCleanInputFormat
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(P1ForPathMergeVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genP1ForMergeGraph() throws IOException {
+ generateP1ForMergeGraphJob("P1ForMergeGraph", outputBase
+ + "P1ForMergeGraph.xml");
+ }
+
+ private static void generateP2ForMergeGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(P2ForPathMergeVertex.class);
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(P2PathMergeOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(P2ForPathMergeVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genP2ForMergeGraph() throws IOException {
+ generateP2ForMergeGraphJob("P2ForMergeGraph", outputBase + "P2ForMergeGraph.xml");
+ }
+//
+// private static void generateP3ForMergeGraphJob(String jobName, String outputPath) throws IOException {
+// PregelixJob job = new PregelixJob(jobName);
+// job.setVertexClass(P3ForPathMergeVertex.class);
+// job.setVertexInputFormatClass(NaiveAlgorithmForPathMergeInputFormat.class);
+// job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+// job.setDynamicVertexValueSize(true);
+// job.setOutputKeyClass(PositionWritable.class);
+// job.setOutputValueClass(VertexValueWritable.class);
+// job.getConfiguration().setInt(P3ForPathMergeVertex.KMER_SIZE, 3);
+// job.getConfiguration().setFloat(P3ForPathMergeVertex.PSEUDORATE, 0.3f);
+// job.getConfiguration().setInt(P3ForPathMergeVertex.MAXROUND, 2);
+// job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+// }
+//
+// private static void genP3ForMergeGraph() throws IOException {
+// generateP3ForMergeGraphJob("P3ForMergeGraph", outputBase
+// + "P3ForMergeGraph.xml");
+// }
+
+ private static void generateP4ForMergeGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(P4ForPathMergeVertex.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(P4ForPathMergeVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genP4ForMergeGraph() throws IOException {
+ generateP4ForMergeGraphJob("P4ForMergeGraph", outputBase
+ + "P4ForMergeGraph.xml");
+ }
+
+ private static void generateRemoveLowCoverageGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(RemoveLowCoverageVertex.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(RemoveLowCoverageVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genRemoveLowCoverageGraph() throws IOException {
+ generateRemoveLowCoverageGraphJob("RemoveLowCoverageGraph", outputBase
+ + "RemoveLowCoverageGraph.xml");
+ }
+
+ private static void generateTipAddGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(TipAddVertex.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(TipAddVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genTipAddGraph() throws IOException {
+ generateTipAddGraphJob("TipAddGraph", outputBase
+ + "TipAddGraph.xml");
+ }
+
+ private static void generateTipRemoveGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(TipRemoveVertex.class);
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(TipRemoveVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genTipRemoveGraph() throws IOException {
+ generateTipRemoveGraphJob("TipRemoveGraph", outputBase
+ + "TipRemoveGraph.xml");
+ }
+
+ private static void generateBridgeAddGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(BridgeAddVertex.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(BridgeAddVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genBridgeAddGraph() throws IOException {
+ generateBridgeAddGraphJob("BridgeAddGraph", outputBase
+ + "BridgeAddGraph.xml");
+ }
+
+ private static void generateBridgeRemoveGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(BridgeRemoveVertex.class);
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(TipRemoveVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genBridgeRemoveGraph() throws IOException {
+ generateBridgeRemoveGraphJob("BridgeRemoveGraph", outputBase
+ + "BridgeRemoveGraph.xml");
+ }
+
+ private static void generateBubbleAddGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(BubbleAddVertex.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(BubbleAddVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genBubbleAddGraph() throws IOException {
+ generateBubbleAddGraphJob("BubbleAddGraph", outputBase
+ + "BubbleAddGraph.xml");
+ }
+
+ private static void generateBubbleMergeGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(BubbleMergeVertex.class);
+ job.setVertexInputFormatClass(GraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(BubbleMergeVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genBubbleMergeGraph() throws IOException {
+ generateBubbleMergeGraphJob("BubbleMergeGraph", outputBase
+ + "BubbleMergeGraph.xml");
+ }
+
+ private static void generateSplitRepeatGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(SplitRepeatVertex.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(SplitRepeatVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genSplitRepeatGraph() throws IOException {
+ generateSplitRepeatGraphJob("SplitRepeatGraph", outputBase + "SplitRepeatGraph.xml");
+ }
+
+ private static void generateBFSTraverseGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(BFSTraverseVertex.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(BFSTraverseVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void getBFSTraverseGraph() throws IOException {
+ generateBFSTraverseGraphJob("BFSTraversegGraph", outputBase
+ + "BFSTraverseGraph.xml");
+ }
+
+ private static void generateScaffoldingGraphJob(String jobName, String outputPath) throws IOException {
+ PregelixJob job = new PregelixJob(jobName);
+ job.setVertexClass(ScaffoldingVertex.class);
+ job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+ job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+ job.setDynamicVertexValueSize(true);
+ job.setOutputKeyClass(VKmerBytesWritable.class);
+ job.setOutputValueClass(VertexValueWritable.class);
+ job.getConfiguration().setInt(ScaffoldingVertex.KMER_SIZE, 3);
+ job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+ }
+
+ private static void genScaffoldingGraph() throws IOException {
+ generateScaffoldingGraphJob("ScaffoldingGraph", outputBase
+ + "ScaffoldingGraph.xml");
+ }
+
+ public static void main(String[] args) throws IOException {
+ genUnrollTandemRepeatGraph();
+ genMapReduceGraph();
+ genP1ForMergeGraph();
+ genP2ForMergeGraph();
+ genP4ForMergeGraph();
+ genRemoveLowCoverageGraph();
+ genTipAddGraph();
+ genTipRemoveGraph();
+ genBridgeAddGraph();
+ genBridgeRemoveGraph();
+ genBubbleAddGraph();
+ genBubbleMergeGraph();
+ genSplitRepeatGraph();
+ getBFSTraverseGraph();
+ genScaffoldingGraph();
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BFSTraverseTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BFSTraverseTestSuite.java
new file mode 100644
index 0000000..f2082c9
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BFSTraverseTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class BFSTraverseTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="BFSTraverse";
+ String testSet[] = {"4"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BasicGraphCleanTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BasicGraphCleanTestSuite.java
new file mode 100644
index 0000000..9eabdbd
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BasicGraphCleanTestSuite.java
@@ -0,0 +1,229 @@
+/*
+ * 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 BasicGraphCleanTestSuite extends TestSuite {
+ private static final Logger LOGGER = Logger.getLogger(BasicGraphCleanTestSuite.class.getName());
+
+ protected static String PreFix; //parameter
+ protected static String SufFix; //parameter
+ protected static ArrayList<String> TestDir = new ArrayList<String>(); //parameter
+ protected static String PATH_TO_ONLY; //parameter
+ protected static String ACTUAL_RESULT_DIR; //parameter
+ protected static String HADOOP_CONF_PATH; //initiated by ACTUAL_RESULT_DIR
+
+ 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/";
+
+ public static final String HDFS_INPUTPATH = "/TestSet";
+
+ 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 + getTestCaseName(testDir));
+// + 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 void init(String pattern, String[] testSet){
+ PreFix = "data/TestSet/" + pattern;
+ SufFix = "bin";
+ PATH_TO_ONLY = "src/test/resources/only_" + pattern + ".txt";
+ ACTUAL_RESULT_DIR = "data/actual/" + pattern;
+ HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
+ /** Multiple Tests **/
+ TestDir.clear();
+ for(String testcase : testSet)
+ TestDir.add(PreFix + File.separator + testcase + File.separator + SufFix);
+ }
+
+ public static Test makeTestSuite(BasicGraphCleanTestSuite testSuite) throws Exception{
+ testSuite.setUp();
+ List<String> onlys = getFileList(PATH_TO_ONLY);
+ File testData = new File(PATH_TO_JOBS);
+ File[] queries = testData.listFiles();
+ 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 + getTestCaseName(testPathStr)
+ + File.separator + "bin";
+ String textFileName = ACTUAL_RESULT_DIR + File.separator + jobExtToResExt(qFile.getName())
+ + File.separator + getTestCaseName(testPathStr)
+ + File.separator + "txt" ;
+ String graphvizFileName = ACTUAL_RESULT_DIR + File.separator + jobExtToResExt(qFile.getName())
+ + File.separator + getTestCaseName(testPathStr)
+ + File.separator + "graphviz";
+ testSuite.addTest(new BasicSmallTestCase(HADOOP_CONF_PATH, qFile.getName(), qFile
+ .getAbsolutePath().toString(), dfs,
+ HDFS_INPUTPATH + File.separator + getTestCaseName(testPathStr) , resultFileName, textFileName, graphvizFileName));
+ }
+ }
+ }
+ }
+ return testSuite;
+ }
+
+// public static Test suite() throws Exception {
+// BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+// return makeTestSuite(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);
+ }
+ }
+
+ public static String getTestCaseName(String path) {
+ char separatorChar = '/';
+ int index = path.lastIndexOf(separatorChar);
+ int secindex = path.substring(0, index).lastIndexOf(separatorChar);
+ return path.substring(0, index).substring(secindex + 1);
+ }
+
+ 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/BasicSmallTestCase.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BasicSmallTestCase.java
new file mode 100644
index 0000000..70ac94f
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BasicSmallTestCase.java
@@ -0,0 +1,88 @@
+/*
+ * 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 junit.framework.TestCase;
+
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
+import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
+import org.junit.Test;
+
+import edu.uci.ics.genomix.pregelix.graph.GenerateGraphViz;
+import edu.uci.ics.genomix.pregelix.sequencefile.GenerateTextFile;
+import edu.uci.ics.pregelix.api.job.PregelixJob;
+import edu.uci.ics.pregelix.core.base.IDriver.Plan;
+import edu.uci.ics.pregelix.core.driver.Driver;
+import edu.uci.ics.pregelix.core.util.PregelixHyracksIntegrationUtil;
+
+public class BasicSmallTestCase extends TestCase {
+ private final PregelixJob job;
+ private final String resultFileDir;
+ private final String textFileDir;
+ private final String graphvizFileDir;
+ private final String jobFile;
+ private final Driver driver = new Driver(this.getClass());
+ private final FileSystem dfs;
+
+ public BasicSmallTestCase(String hadoopConfPath, String jobName, String jobFile, FileSystem dfs,
+ String hdfsInput, String resultFile, String textFile, String graphvizFile) throws Exception {
+ super("test");
+ this.jobFile = jobFile;
+ this.job = new PregelixJob("test");
+ this.job.getConfiguration().addResource(new Path(jobFile));
+ this.job.getConfiguration().addResource(new Path(hadoopConfPath));
+ FileInputFormat.setInputPaths(job, hdfsInput);
+ FileOutputFormat.setOutputPath(job, new Path(hdfsInput + "_result"));
+ job.setJobName(jobName);
+ this.resultFileDir = resultFile;
+ this.textFileDir = textFile;
+ this.graphvizFileDir = graphvizFile;
+
+ this.dfs = dfs;
+ }
+
+ private void waitawhile() throws InterruptedException {
+ synchronized (this) {
+ this.wait(20);
+ }
+ }
+
+ @Test
+ public void test() throws Exception {
+ setUp();
+ Plan[] plans = new Plan[] { Plan.OUTER_JOIN };
+ for (Plan plan : plans) {
+ driver.runJob(job, plan, PregelixHyracksIntegrationUtil.CC_HOST,
+ PregelixHyracksIntegrationUtil.TEST_HYRACKS_CC_CLIENT_PORT, false);
+ }
+ compareResults();
+ tearDown();
+ waitawhile();
+ }
+
+ private void compareResults() throws Exception {
+ dfs.copyToLocalFile(FileOutputFormat.getOutputPath(job), new Path(resultFileDir));
+ GenerateTextFile.generateFromPathmergeResult(3, resultFileDir, textFileDir);
+ GenerateGraphViz.convertGraphCleanOutputToGraphViz(resultFileDir, graphvizFileDir);
+ }
+
+ public String toString() {
+ return jobFile;
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeAddTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeAddTestSuite.java
new file mode 100644
index 0000000..94a5159
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeAddTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class BridgeAddTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="BridgeAdd";
+ String testSet[] = {"TwoLines"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeRemoveTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeRemoveTestSuite.java
new file mode 100644
index 0000000..f4a3b1a
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BridgeRemoveTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class BridgeRemoveTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="BridgeRemove";
+ String testSet[] = {"GTA_up(FR)_down(RF)"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleAddTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleAddTestSuite.java
new file mode 100644
index 0000000..9f062af
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/BubbleAddTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class BubbleAddTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="BubbleAdd";
+ String testSet[] = {"5"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
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);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/MapReduceTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/MapReduceTestSuite.java
new file mode 100644
index 0000000..307aa69
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/MapReduceTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class MapReduceTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="MapReduce";
+ String testSet[] = {"TwoBubbles"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java
new file mode 100644
index 0000000..58bbdcc
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java
@@ -0,0 +1,23 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class PathMergeTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="PathMerge";
+ String testSet[] = {"2", "3", "4", "5", "6", "7", "8", "9", "head_6", "head_7",
+ "LeftAdj", "RightAdj",
+ "FR", "RF", "head_FR", "head_RF", "twohead_FR", "twohead_RF",
+ "SelfTandemRepeat", "TandemRepeatWithMergeEdge",
+ "TandemRepeatWithUnmergeEdge", "ComplexTandemRepeat",
+ "SimplePath", "ThreeDuplicate",
+ "SimpleBridgePath", "BridgePathWithTandemRepeat",
+ "RingPath", "CyclePath",
+ "SimpleTreePath", "ComplexTreePath"
+ };
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RemoveLowCoverageTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RemoveLowCoverageTestSuite.java
new file mode 100644
index 0000000..709b7c9
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RemoveLowCoverageTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class RemoveLowCoverageTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="RemoveLowCoverage";
+ String testSet[] = {"MaxCoverage_6"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/ScaffoldingTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/ScaffoldingTestSuite.java
new file mode 100644
index 0000000..1dc816a
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/ScaffoldingTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class ScaffoldingTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="Scaffolding";
+ String testSet[] = {"PairedEnd"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/SplitRepeatTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/SplitRepeatTestSuite.java
new file mode 100644
index 0000000..15b4db9
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/SplitRepeatTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class SplitRepeatTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="SplitRepeat";
+ String testSet[] = {"2to1"};//{"SimpleSplitManyTimes", "ComplexSplitManyTimes"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipAddTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipAddTestSuite.java
new file mode 100644
index 0000000..7420b30
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipAddTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class TipAddTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="TipAdd";
+ String testSet[] = {"5"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveTestSuite.java
new file mode 100644
index 0000000..1b5f9c0
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/TipRemoveTestSuite.java
@@ -0,0 +1,14 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class TipRemoveTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="TipRemove";
+ String testSet[] = {"RF_Tip"};
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/UnrollTandemRepeatTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/UnrollTandemRepeatTestSuite.java
new file mode 100644
index 0000000..3450ac8
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/UnrollTandemRepeatTestSuite.java
@@ -0,0 +1,16 @@
+package edu.uci.ics.genomix.pregelix.JobRun;
+
+import junit.framework.Test;
+
+public class UnrollTandemRepeatTestSuite extends BasicGraphCleanTestSuite{
+
+ public static Test suite() throws Exception {
+ String pattern ="UnrollTandemRepeat";
+ String testSet[] = {"BridgePath"
+// , "SelfPath"
+ };
+ init(pattern, testSet);
+ BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
+ return makeTestSuite(testSuite);
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/ResultGen/ReportGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/ResultGen/ReportGenerator.java
new file mode 100644
index 0000000..f5f42fc
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/ResultGen/ReportGenerator.java
@@ -0,0 +1,53 @@
+package edu.uci.ics.genomix.pregelix.ResultGen;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.text.DecimalFormat;
+
+import org.apache.commons.io.FileUtils;
+
+public class ReportGenerator {
+ public static final String PATH_TO_REPORT = "report";
+ public static final String PATH_TO_LOGINFO = "log";
+
+ public static void generateReportFromLoginfo(String fileName) throws Exception {
+ DecimalFormat df = new DecimalFormat("0.0000");
+ BufferedReader br = new BufferedReader(new FileReader(PATH_TO_LOGINFO + "/" + fileName));
+ BufferedWriter bw = new BufferedWriter(new FileWriter(new File(PATH_TO_REPORT + "/" + fileName)));
+ String line;
+ int i = 0;
+ double totalTime = 0;
+ line = br.readLine();
+ do {
+ line = br.readLine();
+ String[] tokens = line.split(" ");
+ for (i = 1; i < tokens.length - 1; i++) {
+ bw.write(tokens[i] + " ");
+ }
+ String subString = tokens[i].substring(0, tokens[i].length() - 2);
+ double ms = Double.parseDouble(subString) / 60000;
+ totalTime += ms;
+ bw.write(df.format(ms) + "m");
+ bw.newLine();
+ } while ((line = br.readLine()) != null);
+ bw.write("The total time is " + df.format(totalTime) + "m");
+ bw.close();
+ br.close();
+ }
+
+ public static void main(String[] args) throws Exception {
+ FileUtils.forceMkdir(new File(PATH_TO_REPORT));
+ FileUtils.cleanDirectory(new File(PATH_TO_REPORT));
+ generateReportFromLoginfo("log_nc4");
+ generateReportFromLoginfo("log_nc8");
+ generateReportFromLoginfo("naive_nc4");
+ generateReportFromLoginfo("naive_nc4_vertex16");
+ generateReportFromLoginfo("log_nc4_vertex16");
+ generateReportFromLoginfo("naive_nc8_outerjoin");
+ generateReportFromLoginfo("naive_nc8_outerjoin_2");
+ generateReportFromLoginfo("naive_nc8_innerjoin");
+ }
+}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/example/util/TestUtils.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/example/util/TestUtils.java
new file mode 100644
index 0000000..8ac1b09
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/example/util/TestUtils.java
@@ -0,0 +1,98 @@
+/*
+ * 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.example.util;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+
+public class TestUtils {
+
+ public static void compareWithResultDir(File expectedFileDir, File actualFileDir) throws Exception {
+ String[] fileNames = expectedFileDir.list();
+ for (String fileName : fileNames) {
+ compareWithResult(new File(expectedFileDir, fileName), new File(actualFileDir, fileName));
+ }
+ }
+
+ public static void compareWithResult(File expectedFile, File actualFile) throws Exception {
+ BufferedReader readerExpected = new BufferedReader(new FileReader(expectedFile));
+ BufferedReader readerActual = new BufferedReader(new FileReader(actualFile));
+ String lineExpected, lineActual;
+ int num = 1;
+ try {
+ while ((lineExpected = readerExpected.readLine()) != null) {
+ lineActual = readerActual.readLine();
+ if (lineActual == null) {
+ throw new Exception("Actual result changed at line " + num + ":\n< " + lineExpected + "\n> ");
+ }
+ if (!equalStrings(lineExpected, lineActual)) {
+ throw new Exception("Result for changed at line " + num + ":\n< " + lineExpected + "\n> "
+ + lineActual);
+ }
+ ++num;
+ }
+ lineActual = readerActual.readLine();
+ if (lineActual != null) {
+ throw new Exception("Actual result changed at line " + num + ":\n< \n> " + lineActual);
+ }
+ } finally {
+ readerExpected.close();
+ readerActual.close();
+ }
+ }
+
+ private static boolean equalStrings(String s1, String s2) {
+ String[] rowsOne = s1.split("\n");
+ String[] rowsTwo = s2.split("\n");
+
+ if (rowsOne.length != rowsTwo.length)
+ return false;
+
+ for (int i = 0; i < rowsOne.length; i++) {
+ String row1 = rowsOne[i];
+ String row2 = rowsTwo[i];
+
+ if (row1.equals(row2))
+ continue;
+
+ boolean spaceOrTab = false;
+ spaceOrTab = row1.contains(" ");
+ String[] fields1 = spaceOrTab ? row1.split(" ") : row1.split("\t");
+ String[] fields2 = spaceOrTab ? row2.split(" ") : row2.split("\t");
+
+ for (int j = 0; j < fields1.length; j++) {
+ if (fields1[j].equals(fields2[j])) {
+ continue;
+ } else if (fields1[j].indexOf('.') < 0) {
+ return false;
+ } else {
+ Double double1 = Double.parseDouble(fields1[j]);
+ Double double2 = Double.parseDouble(fields2[j]);
+ float float1 = (float) double1.doubleValue();
+ float float2 = (float) double2.doubleValue();
+
+ if (Math.abs(float1 - float2) < 1.0e-7)
+ continue;
+ else {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+}
diff --git a/genomix/genomix-pregelix/src/test/resources/cluster/cluster.properties b/genomix/genomix-pregelix/src/test/resources/cluster/cluster.properties
new file mode 100644
index 0000000..0c6abd1
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/cluster/cluster.properties
@@ -0,0 +1,37 @@
+#The CC port for Hyracks clients
+CC_CLIENTPORT=3099
+
+#The CC port for Hyracks cluster management
+CC_CLUSTERPORT=1099
+
+#The directory of hyracks binaries
+HYRACKS_HOME=../../../../hyracks
+
+#The tmp directory for cc to install jars
+CCTMP_DIR=/tmp/t1
+
+#The tmp directory for nc to install jars
+NCTMP_DIR=/tmp/t2
+
+#The directory to put cc logs
+CCLOGS_DIR=$CCTMP_DIR/logs
+
+#The directory to put nc logs
+NCLOGS_DIR=$NCTMP_DIR/logs
+
+#Comma separated I/O directories for the spilling of external sort
+IO_DIRS="/tmp/t3,/tmp/t4,/tmp/t5,/tmp/t6"
+
+#The JAVA_HOME
+JAVA_HOME=$JAVA_HOME
+
+#The frame size of the internal dataflow engine
+FRAME_SIZE=131072
+
+#CC JAVA_OPTS
+CCJAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=7001,server=y,suspend=n -Xmx3g -Djava.util.logging.config.file=logging.properties"
+# Yourkit option: -agentpath:/grid/0/dev/vborkar/tools/yjp-10.0.4/bin/linux-x86-64/libyjpagent.so=port=20001"
+
+#NC JAVA_OPTS
+NCJAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=7002,server=y,suspend=n -Xmx3g -Djava.util.logging.config.file=genomix-pregelix/src/test/resources/logging.properties"
+
diff --git a/genomix/genomix-pregelix/src/test/resources/cluster/stores.properties b/genomix/genomix-pregelix/src/test/resources/cluster/stores.properties
new file mode 100644
index 0000000..2daf1ee
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/cluster/stores.properties
@@ -0,0 +1 @@
+store=teststore1,teststore2,teststore3,teststore4,
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/data/webmap/text.txt b/genomix/genomix-pregelix/src/test/resources/data/webmap/text.txt
new file mode 100755
index 0000000..01c49e5
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/data/webmap/text.txt
@@ -0,0 +1,6 @@
+1 AATAGAAG
+2 AATAGCTT
+3 AATAGAAG
+4 AATAGCTT
+5 AATAGAAG
+6 AGAAGAAG
diff --git a/genomix/genomix-pregelix/src/test/resources/hadoop/conf/core-site.xml b/genomix/genomix-pregelix/src/test/resources/hadoop/conf/core-site.xml
new file mode 100644
index 0000000..47dfac5
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/hadoop/conf/core-site.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+<property>
+ <name>fs.default.name</name>
+ <value>hdfs://127.0.0.1:31888</value>
+</property>
+<property>
+ <name>hadoop.tmp.dir</name>
+ <value>/tmp/hadoop</value>
+</property>
+
+
+</configuration>
diff --git a/genomix/genomix-pregelix/src/test/resources/hadoop/conf/hdfs-site.xml b/genomix/genomix-pregelix/src/test/resources/hadoop/conf/hdfs-site.xml
new file mode 100644
index 0000000..a36b6d7
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/hadoop/conf/hdfs-site.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+<property>
+ <name>dfs.replication</name>
+ <value>1</value>
+</property>
+
+<property>
+ <name>dfs.block.size</name>
+ <value>655360</value>
+</property>
+
+</configuration>
diff --git a/genomix/genomix-pregelix/src/test/resources/hadoop/conf/log4j.properties b/genomix/genomix-pregelix/src/test/resources/hadoop/conf/log4j.properties
new file mode 100755
index 0000000..d5e6004
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/hadoop/conf/log4j.properties
@@ -0,0 +1,94 @@
+# Define some default values that can be overridden by system properties
+hadoop.root.logger=FATAL,console
+hadoop.log.dir=.
+hadoop.log.file=hadoop.log
+
+# Define the root logger to the system property "hadoop.root.logger".
+log4j.rootLogger=${hadoop.root.logger}, EventCounter
+
+# Logging Threshold
+log4j.threshhold=FATAL
+
+#
+# Daily Rolling File Appender
+#
+
+log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Rollver at midnight
+log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
+
+# 30-day backup
+#log4j.appender.DRFA.MaxBackupIndex=30
+log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
+
+# Pattern format: Date LogLevel LoggerName LogMessage
+log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+# Debugging Pattern format
+#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+
+#
+# console
+# Add "console" to rootlogger above if you want to use this
+#
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.err
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
+
+#
+# TaskLog Appender
+#
+
+#Default values
+hadoop.tasklog.taskid=null
+hadoop.tasklog.noKeepSplits=4
+hadoop.tasklog.totalLogFileSize=100
+hadoop.tasklog.purgeLogSplits=true
+hadoop.tasklog.logsRetainHours=12
+
+log4j.appender.TLA=org.apache.hadoop.mapred.TaskLogAppender
+log4j.appender.TLA.taskId=${hadoop.tasklog.taskid}
+log4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}
+
+log4j.appender.TLA.layout=org.apache.log4j.PatternLayout
+log4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+
+#
+# Rolling File Appender
+#
+
+#log4j.appender.RFA=org.apache.log4j.RollingFileAppender
+#log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Logfile size and and 30-day backups
+#log4j.appender.RFA.MaxFileSize=1MB
+#log4j.appender.RFA.MaxBackupIndex=30
+
+#log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+#
+# FSNamesystem Audit logging
+# All audit events are logged at INFO level
+#
+log4j.logger.org.apache.hadoop.fs.FSNamesystem.audit=WARN
+
+# Custom Logging levels
+
+#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG
+#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG
+#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG
+
+# Jets3t library
+log4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR
+
+#
+# Event Counter Appender
+# Sends counts of logging messages at different severity levels to Hadoop Metrics.
+#
+log4j.appender.EventCounter=org.apache.hadoop.metrics.jvm.EventCounter
diff --git a/genomix/genomix-pregelix/src/test/resources/hadoop/conf/mapred-site.xml b/genomix/genomix-pregelix/src/test/resources/hadoop/conf/mapred-site.xml
new file mode 100644
index 0000000..f75b072
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/hadoop/conf/mapred-site.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
+
+<!-- Put site-specific property overrides in this file. -->
+
+<configuration>
+
+ <property>
+ <name>mapred.job.tracker</name>
+ <value>localhost:29007</value>
+ </property>
+ <property>
+ <name>mapred.tasktracker.map.tasks.maximum</name>
+ <value>20</value>
+ </property>
+ <property>
+ <name>mapred.tasktracker.reduce.tasks.maximum</name>
+ <value>20</value>
+ </property>
+ <property>
+ <name>mapred.max.split.size</name>
+ <value>128000</value>
+ </property>
+
+</configuration>
diff --git a/genomix/genomix-pregelix/src/test/resources/hyracks-deployment.properties b/genomix/genomix-pregelix/src/test/resources/hyracks-deployment.properties
new file mode 100644
index 0000000..9c42b89
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/hyracks-deployment.properties
@@ -0,0 +1,2 @@
+#cc.bootstrap.class=edu.uci.ics.asterix.hyracks.bootstrap.CCBootstrapImpl
+nc.bootstrap.class=edu.uci.ics.pregelix.runtime.bootstrap.NCBootstrapImpl
diff --git a/genomix/genomix-pregelix/src/test/resources/ignore.txt b/genomix/genomix-pregelix/src/test/resources/ignore.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/ignore.txt
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/BFSTraverseGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/BFSTraverseGraph.xml
new file mode 100644
index 0000000..16b13c7
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/BFSTraverseGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>BFSTraversegGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.scaffolding.BFSTraverseVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/BridgeAddGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/BridgeAddGraph.xml
new file mode 100644
index 0000000..a67fff5
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/BridgeAddGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>BridgeAddGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.bridgeremove.BridgeAddVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/BridgeRemoveGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/BridgeRemoveGraph.xml
new file mode 100644
index 0000000..7a6d7f0
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/BridgeRemoveGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>BridgeRemoveGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.bridgeremove.BridgeRemoveVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/BubbleAddGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/BubbleAddGraph.xml
new file mode 100644
index 0000000..2b63a94
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/BubbleAddGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>BubbleAddGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.bubblemerge.BubbleAddVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/BubbleMergeGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/BubbleMergeGraph.xml
new file mode 100644
index 0000000..8a32e92
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/BubbleMergeGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>BubbleMergeGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.bubblemerge.BubbleMergeVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/MapReduceGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/MapReduceGraph.xml
new file mode 100644
index 0000000..1be9ee1
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/MapReduceGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>MapReduceGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.pathmerge.MapReduceVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/P1ForMergeGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/P1ForMergeGraph.xml
new file mode 100644
index 0000000..951173a
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/P1ForMergeGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>P1ForMergeGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.pathmerge.P1ForPathMergeVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/P2ForMergeGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/P2ForMergeGraph.xml
new file mode 100644
index 0000000..4311d02
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/P2ForMergeGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>P2ForMergeGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.pathmerge.P2ForPathMergeVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.P2PathMergeOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/P4ForMergeGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/P4ForMergeGraph.xml
new file mode 100644
index 0000000..16e0c69
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/P4ForMergeGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>P4ForMergeGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.pathmerge.P4ForPathMergeVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/RemoveLowCoverageGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/RemoveLowCoverageGraph.xml
new file mode 100644
index 0000000..77d1f6f
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/RemoveLowCoverageGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>RemoveLowCoverageVertex.kmerSize</name><value>3</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>RemoveLowCoverageGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.removelowcoverage.RemoveLowCoverageVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/ScaffoldingGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/ScaffoldingGraph.xml
new file mode 100644
index 0000000..2b46291
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/ScaffoldingGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>ScaffoldingGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.scaffolding.ScaffoldingVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/SplitRepeatGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/SplitRepeatGraph.xml
new file mode 100644
index 0000000..09f3f5c
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/SplitRepeatGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>SplitRepeatGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.splitrepeat.SplitRepeatVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/TipAddGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/TipAddGraph.xml
new file mode 100644
index 0000000..2b4a14a
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/TipAddGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>TipAddGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.tipremove.TipAddVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/TipRemoveGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/TipRemoveGraph.xml
new file mode 100644
index 0000000..3305468
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/TipRemoveGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>TipRemoveGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.tipremove.TipRemoveVertex</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/jobs/UnrollTandemRepeatGraph.xml b/genomix/genomix-pregelix/src/test/resources/jobs/UnrollTandemRepeatGraph.xml
new file mode 100644
index 0000000..ba1f6b8
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/jobs/UnrollTandemRepeatGraph.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><configuration>
+<property><name>mapred.tasktracker.dns.nameserver</name><value>default</value></property>
+<property><name>mapred.queue.default.acl-administer-jobs</name><value>*</value></property>
+<property><name>mapred.skip.map.auto.incr.proc.count</name><value>true</value></property>
+<property><name>mapred.jobtracker.instrumentation</name><value>org.apache.hadoop.mapred.JobTrackerMetricsInst</value></property>
+<property><name>mapred.skip.reduce.auto.incr.proc.count</name><value>true</value></property>
+<property><name>fs.hsftp.impl</name><value>org.apache.hadoop.hdfs.HsftpFileSystem</value></property>
+<property><name>mapred.submit.replication</name><value>10</value></property>
+<property><name>ipc.server.tcpnodelay</name><value>false</value></property>
+<property><name>fs.checkpoint.dir</name><value>${hadoop.tmp.dir}/dfs/namesecondary</value></property>
+<property><name>mapred.output.compression.type</name><value>RECORD</value></property>
+<property><name>mapred.job.shuffle.merge.percent</name><value>0.66</value></property>
+<property><name>mapred.child.java.opts</name><value>-Xmx200m</value></property>
+<property><name>mapred.queue.default.acl-submit-job</name><value>*</value></property>
+<property><name>keep.failed.task.files</name><value>false</value></property>
+<property><name>mapred.jobtracker.job.history.block.size</name><value>3145728</value></property>
+<property><name>mapred.output.value.class</name><value>edu.uci.ics.genomix.pregelix.io.VertexValueWritable</value></property>
+<property><name>io.bytes.per.checksum</name><value>512</value></property>
+<property><name>mapred.task.tracker.report.address</name><value>127.0.0.1:0</value></property>
+<property><name>hadoop.util.hash.type</name><value>murmur</value></property>
+<property><name>fs.hdfs.impl</name><value>org.apache.hadoop.hdfs.DistributedFileSystem</value></property>
+<property><name>fs.ramfs.impl</name><value>org.apache.hadoop.fs.InMemoryFileSystem</value></property>
+<property><name>mapred.jobtracker.restart.recover</name><value>false</value></property>
+<property><name>fs.hftp.impl</name><value>org.apache.hadoop.hdfs.HftpFileSystem</value></property>
+<property><name>fs.checkpoint.period</name><value>3600</value></property>
+<property><name>mapred.child.tmp</name><value>./tmp</value></property>
+<property><name>mapred.local.dir.minspacekill</name><value>0</value></property>
+<property><name>map.sort.class</name><value>org.apache.hadoop.util.QuickSort</value></property>
+<property><name>hadoop.logfile.count</name><value>10</value></property>
+<property><name>ipc.client.connection.maxidletime</name><value>10000</value></property>
+<property><name>io.map.index.skip</name><value>0</value></property>
+<property><name>mapred.tasktracker.expiry.interval</name><value>600000</value></property>
+<property><name>mapred.output.compress</name><value>false</value></property>
+<property><name>io.seqfile.lazydecompress</name><value>true</value></property>
+<property><name>mapred.reduce.parallel.copies</name><value>5</value></property>
+<property><name>fs.checkpoint.size</name><value>67108864</value></property>
+<property><name>mapred.job.reduce.input.buffer.percent</name><value>0.0</value></property>
+<property><name>mapred.job.name</name><value>UnrollTandemRepeatGraph</value></property>
+<property><name>local.cache.size</name><value>10737418240</value></property>
+<property><name>fs.s3n.impl</name><value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value></property>
+<property><name>mapred.userlog.limit.kb</name><value>0</value></property>
+<property><name>fs.file.impl</name><value>org.apache.hadoop.fs.LocalFileSystem</value></property>
+<property><name>mapred.task.tracker.http.address</name><value>0.0.0.0:50060</value></property>
+<property><name>mapred.task.timeout</name><value>600000</value></property>
+<property><name>fs.kfs.impl</name><value>org.apache.hadoop.fs.kfs.KosmosFileSystem</value></property>
+<property><name>mapred.max.tracker.blacklists</name><value>4</value></property>
+<property><name>fs.s3.buffer.dir</name><value>${hadoop.tmp.dir}/s3</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.dir</name><value>/jobtracker/jobsInfo</value></property>
+<property><name>ipc.client.kill.max</name><value>10</value></property>
+<property><name>mapred.tasktracker.instrumentation</name><value>org.apache.hadoop.mapred.TaskTrackerMetricsInst</value></property>
+<property><name>mapred.reduce.tasks.speculative.execution</name><value>true</value></property>
+<property><name>io.sort.record.percent</name><value>0.05</value></property>
+<property><name>hadoop.security.authorization</name><value>false</value></property>
+<property><name>mapred.max.tracker.failures</name><value>4</value></property>
+<property><name>mapred.jobtracker.taskScheduler</name><value>org.apache.hadoop.mapred.JobQueueTaskScheduler</value></property>
+<property><name>mapred.tasktracker.dns.interface</name><value>default</value></property>
+<property><name>mapred.map.tasks</name><value>2</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.hours</name><value>0</value></property>
+<property><name>fs.s3.sleepTimeSeconds</name><value>10</value></property>
+<property><name>fs.default.name</name><value>file:///</value></property>
+<property><name>mapred.output.key.class</name><value>edu.uci.ics.genomix.type.VKmerBytesWritable</value></property>
+<property><name>tasktracker.http.threads</name><value>40</value></property>
+<property><name>mapred.tasktracker.taskmemorymanager.monitoring-interval</name><value>5000</value></property>
+<property><name>hadoop.rpc.socket.factory.class.default</name><value>org.apache.hadoop.net.StandardSocketFactory</value></property>
+<property><name>mapred.reduce.tasks</name><value>1</value></property>
+<property><name>topology.node.switch.mapping.impl</name><value>org.apache.hadoop.net.ScriptBasedMapping</value></property>
+<property><name>pregelix.vertexClass</name><value>edu.uci.ics.genomix.pregelix.operator.unrolltandemrepeat.UnrollTandemRepeat</value></property>
+<property><name>mapred.skip.reduce.max.skip.groups</name><value>0</value></property>
+<property><name>io.file.buffer.size</name><value>4096</value></property>
+<property><name>mapred.jobtracker.maxtasks.per.job</name><value>-1</value></property>
+<property><name>mapred.tasktracker.indexcache.mb</name><value>10</value></property>
+<property><name>mapred.tasktracker.map.tasks.maximum</name><value>2</value></property>
+<property><name>fs.har.impl.disable.cache</name><value>true</value></property>
+<property><name>mapred.task.profile.maps</name><value>0-2</value></property>
+<property><name>hadoop.native.lib</name><value>true</value></property>
+<property><name>fs.s3.block.size</name><value>67108864</value></property>
+<property><name>mapred.job.reuse.jvm.num.tasks</name><value>1</value></property>
+<property><name>mapred.job.tracker.http.address</name><value>0.0.0.0:50030</value></property>
+<property><name>mapred.tasktracker.reduce.tasks.maximum</name><value>2</value></property>
+<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec</value></property>
+<property><name>mapred.job.shuffle.input.buffer.percent</name><value>0.70</value></property>
+<property><name>io.seqfile.compress.blocksize</name><value>1000000</value></property>
+<property><name>mapred.queue.names</name><value>default</value></property>
+<property><name>fs.har.impl</name><value>org.apache.hadoop.fs.HarFileSystem</value></property>
+<property><name>io.mapfile.bloom.error.rate</name><value>0.005</value></property>
+<property><name>mapred.job.tracker</name><value>local</value></property>
+<property><name>BasicGraphCleanVertex.kmerSize</name><value>3</value></property>
+<property><name>io.skip.checksum.errors</name><value>false</value></property>
+<property><name>mapred.reduce.max.attempts</name><value>4</value></property>
+<property><name>fs.s3.maxRetries</name><value>4</value></property>
+<property><name>ipc.server.listen.queue.size</name><value>128</value></property>
+<property><name>fs.trash.interval</name><value>0</value></property>
+<property><name>mapred.local.dir.minspacestart</name><value>0</value></property>
+<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3.S3FileSystem</value></property>
+<property><name>io.seqfile.sorter.recordlimit</name><value>1000000</value></property>
+<property><name>io.mapfile.bloom.size</name><value>1048576</value></property>
+<property><name>io.sort.mb</name><value>100</value></property>
+<property><name>mapred.local.dir</name><value>${hadoop.tmp.dir}/mapred/local</value></property>
+<property><name>io.sort.factor</name><value>10</value></property>
+<property><name>mapred.task.profile</name><value>false</value></property>
+<property><name>job.end.retry.interval</name><value>30000</value></property>
+<property><name>mapred.tasktracker.procfsbasedprocesstree.sleeptime-before-sigkill</name><value>5000</value></property>
+<property><name>mapred.jobtracker.completeuserjobs.maximum</name><value>100</value></property>
+<property><name>mapred.task.profile.reduces</name><value>0-2</value></property>
+<property><name>webinterface.private.actions</name><value>false</value></property>
+<property><name>hadoop.tmp.dir</name><value>/tmp/hadoop-${user.name}</value></property>
+<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.skip.attempts.to.start.skipping</name><value>2</value></property>
+<property><name>mapred.temp.dir</name><value>${hadoop.tmp.dir}/mapred/temp</value></property>
+<property><name>mapred.merge.recordsBeforeProgress</name><value>10000</value></property>
+<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.DefaultCodec</value></property>
+<property><name>mapred.compress.map.output</name><value>false</value></property>
+<property><name>io.sort.spill.percent</name><value>0.80</value></property>
+<property><name>fs.checkpoint.edits.dir</name><value>${fs.checkpoint.dir}</value></property>
+<property><name>mapred.userlog.retain.hours</name><value>24</value></property>
+<property><name>mapred.system.dir</name><value>${hadoop.tmp.dir}/mapred/system</value></property>
+<property><name>mapred.line.input.format.linespermap</name><value>1</value></property>
+<property><name>job.end.retry.attempts</name><value>0</value></property>
+<property><name>ipc.client.idlethreshold</name><value>4000</value></property>
+<property><name>pregelix.vertexOutputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.GraphCleanOutputFormat</value></property>
+<property><name>mapred.reduce.copy.backoff</name><value>300</value></property>
+<property><name>mapred.map.tasks.speculative.execution</name><value>true</value></property>
+<property><name>mapred.inmem.merge.threshold</name><value>1000</value></property>
+<property><name>hadoop.logfile.size</name><value>10000000</value></property>
+<property><name>pregelix.vertexInputFormatClass</name><value>edu.uci.ics.genomix.pregelix.format.InitialGraphCleanInputFormat</value></property>
+<property><name>mapred.job.queue.name</name><value>default</value></property>
+<property><name>mapred.job.tracker.persist.jobstatus.active</name><value>false</value></property>
+<property><name>pregelix.incStateLength</name><value>true</value></property>
+<property><name>mapred.reduce.slowstart.completed.maps</name><value>0.05</value></property>
+<property><name>topology.script.number.args</name><value>100</value></property>
+<property><name>mapred.skip.map.max.skip.records</name><value>0</value></property>
+<property><name>fs.ftp.impl</name><value>org.apache.hadoop.fs.ftp.FTPFileSystem</value></property>
+<property><name>mapred.task.cache.levels</name><value>2</value></property>
+<property><name>mapred.job.tracker.handler.count</name><value>10</value></property>
+<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value></property>
+<property><name>ipc.client.connect.max.retries</name><value>10</value></property>
+<property><name>mapred.min.split.size</name><value>0</value></property>
+<property><name>mapred.map.max.attempts</name><value>4</value></property>
+<property><name>jobclient.output.filter</name><value>FAILED</value></property>
+<property><name>ipc.client.tcpnodelay</name><value>false</value></property>
+<property><name>mapred.acls.enabled</name><value>false</value></property>
+</configuration>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/log4j.properties b/genomix/genomix-pregelix/src/test/resources/log4j.properties
new file mode 100755
index 0000000..d5e6004
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/log4j.properties
@@ -0,0 +1,94 @@
+# Define some default values that can be overridden by system properties
+hadoop.root.logger=FATAL,console
+hadoop.log.dir=.
+hadoop.log.file=hadoop.log
+
+# Define the root logger to the system property "hadoop.root.logger".
+log4j.rootLogger=${hadoop.root.logger}, EventCounter
+
+# Logging Threshold
+log4j.threshhold=FATAL
+
+#
+# Daily Rolling File Appender
+#
+
+log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.DRFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Rollver at midnight
+log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
+
+# 30-day backup
+#log4j.appender.DRFA.MaxBackupIndex=30
+log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
+
+# Pattern format: Date LogLevel LoggerName LogMessage
+log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+# Debugging Pattern format
+#log4j.appender.DRFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+
+#
+# console
+# Add "console" to rootlogger above if you want to use this
+#
+
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.target=System.err
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
+
+#
+# TaskLog Appender
+#
+
+#Default values
+hadoop.tasklog.taskid=null
+hadoop.tasklog.noKeepSplits=4
+hadoop.tasklog.totalLogFileSize=100
+hadoop.tasklog.purgeLogSplits=true
+hadoop.tasklog.logsRetainHours=12
+
+log4j.appender.TLA=org.apache.hadoop.mapred.TaskLogAppender
+log4j.appender.TLA.taskId=${hadoop.tasklog.taskid}
+log4j.appender.TLA.totalLogFileSize=${hadoop.tasklog.totalLogFileSize}
+
+log4j.appender.TLA.layout=org.apache.log4j.PatternLayout
+log4j.appender.TLA.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n
+
+#
+# Rolling File Appender
+#
+
+#log4j.appender.RFA=org.apache.log4j.RollingFileAppender
+#log4j.appender.RFA.File=${hadoop.log.dir}/${hadoop.log.file}
+
+# Logfile size and and 30-day backups
+#log4j.appender.RFA.MaxFileSize=1MB
+#log4j.appender.RFA.MaxBackupIndex=30
+
+#log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} - %m%n
+#log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+
+#
+# FSNamesystem Audit logging
+# All audit events are logged at INFO level
+#
+log4j.logger.org.apache.hadoop.fs.FSNamesystem.audit=WARN
+
+# Custom Logging levels
+
+#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG
+#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG
+#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG
+
+# Jets3t library
+log4j.logger.org.jets3t.service.impl.rest.httpclient.RestS3Service=ERROR
+
+#
+# Event Counter Appender
+# Sends counts of logging messages at different severity levels to Hadoop Metrics.
+#
+log4j.appender.EventCounter=org.apache.hadoop.metrics.jvm.EventCounter
diff --git a/genomix/genomix-pregelix/src/test/resources/logging.properties b/genomix/genomix-pregelix/src/test/resources/logging.properties
new file mode 100644
index 0000000..0ed3dfc
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/logging.properties
@@ -0,0 +1,67 @@
+############################################################
+# 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= SEVERE
+# .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 = FINEST
+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:
+
+edu.uci.ics.genomix.pregelix = INFO
+#edu.uci.ics.asterix.level = FINE
+#edu.uci.ics.algebricks.level = FINE
+edu.uci.ics.hyracks.level = SEVERE
+#edu.uci.ics.hyracks.control.nc.net.level = FINE
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/resources/only.txt b/genomix/genomix-pregelix/src/test/resources/only.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only.txt
diff --git a/genomix/genomix-pregelix/src/test/resources/only_BFSTraverse.txt b/genomix/genomix-pregelix/src/test/resources/only_BFSTraverse.txt
new file mode 100644
index 0000000..78f6f12
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_BFSTraverse.txt
@@ -0,0 +1 @@
+BFSTraverseGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_BridgeAdd.txt b/genomix/genomix-pregelix/src/test/resources/only_BridgeAdd.txt
new file mode 100644
index 0000000..f172e3c
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_BridgeAdd.txt
@@ -0,0 +1 @@
+BridgeAddGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_BridgeRemove.txt b/genomix/genomix-pregelix/src/test/resources/only_BridgeRemove.txt
new file mode 100644
index 0000000..53537cb
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_BridgeRemove.txt
@@ -0,0 +1 @@
+BridgeRemoveGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_BubbleAdd.txt b/genomix/genomix-pregelix/src/test/resources/only_BubbleAdd.txt
new file mode 100644
index 0000000..a4c7fc8
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_BubbleAdd.txt
@@ -0,0 +1 @@
+BubbleAddGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_BubbleMerge.txt b/genomix/genomix-pregelix/src/test/resources/only_BubbleMerge.txt
new file mode 100644
index 0000000..417161c
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_BubbleMerge.txt
@@ -0,0 +1 @@
+BubbleMergeGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_MapReduce.txt b/genomix/genomix-pregelix/src/test/resources/only_MapReduce.txt
new file mode 100644
index 0000000..710a096
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_MapReduce.txt
@@ -0,0 +1 @@
+MapReduceGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_PathMerge.txt b/genomix/genomix-pregelix/src/test/resources/only_PathMerge.txt
new file mode 100644
index 0000000..3d007d2
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_PathMerge.txt
@@ -0,0 +1 @@
+P4ForMergeGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_RemoveLowCoverage.txt b/genomix/genomix-pregelix/src/test/resources/only_RemoveLowCoverage.txt
new file mode 100644
index 0000000..77ff8f0
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_RemoveLowCoverage.txt
@@ -0,0 +1 @@
+RemoveLowCoverageGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_Scaffolding.txt b/genomix/genomix-pregelix/src/test/resources/only_Scaffolding.txt
new file mode 100644
index 0000000..fed8efd
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_Scaffolding.txt
@@ -0,0 +1 @@
+ScaffoldingGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_SplitRepeat.txt b/genomix/genomix-pregelix/src/test/resources/only_SplitRepeat.txt
new file mode 100644
index 0000000..824d7e1
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_SplitRepeat.txt
@@ -0,0 +1 @@
+SplitRepeatGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_TipAdd.txt b/genomix/genomix-pregelix/src/test/resources/only_TipAdd.txt
new file mode 100644
index 0000000..53eecdd
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_TipAdd.txt
@@ -0,0 +1 @@
+TipAddGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_TipRemove.txt b/genomix/genomix-pregelix/src/test/resources/only_TipRemove.txt
new file mode 100644
index 0000000..7392b4e
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_TipRemove.txt
@@ -0,0 +1 @@
+TipRemoveGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/only_UnrollTandemRepeat.txt b/genomix/genomix-pregelix/src/test/resources/only_UnrollTandemRepeat.txt
new file mode 100644
index 0000000..209ed36
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/only_UnrollTandemRepeat.txt
@@ -0,0 +1 @@
+UnrollTandemRepeatGraph.xml
diff --git a/genomix/genomix-pregelix/src/test/resources/topology.xml b/genomix/genomix-pregelix/src/test/resources/topology.xml
new file mode 100755
index 0000000..2a6c380
--- /dev/null
+++ b/genomix/genomix-pregelix/src/test/resources/topology.xml
@@ -0,0 +1,7 @@
+<cluster-topology>
+ <network-switch name="Global">
+ <network-switch name="local">
+ <terminal name="127.1.0.1"/>
+ </network-switch>
+ </network-switch>
+</cluster-topology>
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/text/BridgePath/log_BridgePath b/genomix/genomix-pregelix/text/BridgePath/log_BridgePath
new file mode 100644
index 0000000..cab1281
--- /dev/null
+++ b/genomix/genomix-pregelix/text/BridgePath/log_BridgePath
@@ -0,0 +1,6 @@
+TTCCA T|C
+CCGTG CT|
+TCCAC T|CT
+CCACC T|G 9 CCACCCCGT 5
+TTTCC |A
+CCACT T|G 9 CCACTCCGT 5
diff --git a/genomix/genomix-pregelix/text/BridgePath/naive_BridgePath b/genomix/genomix-pregelix/text/BridgePath/naive_BridgePath
new file mode 100644
index 0000000..c669dba
--- /dev/null
+++ b/genomix/genomix-pregelix/text/BridgePath/naive_BridgePath
@@ -0,0 +1,6 @@
+TTCCA T|C 5 TTCCA 1
+CCGTG CT|
+TCCAC T|CT
+CCACC T|G 9 CCACCCCGT 1
+TTTCC |A
+CCACT T|C
diff --git a/genomix/genomix-pregelix/text/CyclePath/log_CyclePath b/genomix/genomix-pregelix/text/CyclePath/log_CyclePath
new file mode 100644
index 0000000..d0ee84f
--- /dev/null
+++ b/genomix/genomix-pregelix/text/CyclePath/log_CyclePath
@@ -0,0 +1,3 @@
+GCAAC |T
+AACTT C|T 12 AACTTCATCAAC 5
+CAACT GT|T
diff --git a/genomix/genomix-pregelix/text/CyclePath/naive_CyclePath b/genomix/genomix-pregelix/text/CyclePath/naive_CyclePath
new file mode 100644
index 0000000..5cdb7c2
--- /dev/null
+++ b/genomix/genomix-pregelix/text/CyclePath/naive_CyclePath
@@ -0,0 +1,3 @@
+GCAAC |T
+AACTT C|T 12 AACTTCATCAAC 1
+CAACT GT|T
diff --git a/genomix/genomix-pregelix/text/LongPath/log_LongPath b/genomix/genomix-pregelix/text/LongPath/log_LongPath
new file mode 100644
index 0000000..98cb21e
--- /dev/null
+++ b/genomix/genomix-pregelix/text/LongPath/log_LongPath
@@ -0,0 +1,3 @@
+GCCTC G|G 15 GCCTCAGTACGCCCG 5
+CCCGG G|
+GGCCT |C
diff --git a/genomix/genomix-pregelix/text/LongPath/naive_LongPath b/genomix/genomix-pregelix/text/LongPath/naive_LongPath
new file mode 100644
index 0000000..c1a472e
--- /dev/null
+++ b/genomix/genomix-pregelix/text/LongPath/naive_LongPath
@@ -0,0 +1,3 @@
+GCCTC G|G 15 GCCTCAGTACGCCCG 1
+CCCGG G|
+GGCCT |C
diff --git a/genomix/genomix-pregelix/text/Path/log_Path b/genomix/genomix-pregelix/text/Path/log_Path
new file mode 100644
index 0000000..3a46528
--- /dev/null
+++ b/genomix/genomix-pregelix/text/Path/log_Path
@@ -0,0 +1,3 @@
+GCCTC G|G 10 GCCTCAGTAC 5
+GGCCT |C
+GTACG A|
diff --git a/genomix/genomix-pregelix/text/Path/naive_Path b/genomix/genomix-pregelix/text/Path/naive_Path
new file mode 100644
index 0000000..b8d2aeb
--- /dev/null
+++ b/genomix/genomix-pregelix/text/Path/naive_Path
@@ -0,0 +1,3 @@
+GCCTC G|G 10 GCCTCAGTAC 1
+GGCCT |C
+GTACG A|
diff --git a/genomix/genomix-pregelix/text/SimplePath/log_SimplePath b/genomix/genomix-pregelix/text/SimplePath/log_SimplePath
new file mode 100644
index 0000000..5c149ac
--- /dev/null
+++ b/genomix/genomix-pregelix/text/SimplePath/log_SimplePath
@@ -0,0 +1,9 @@
+CGGCA G|A 8 CGGCAAGA 5
+AGCAC C|
+AAGAC |A
+GCGGC |A
+GCATC C|
+ATATC |G
+TATCG A|C 8 TATCGCAT 5
+AAGAA C|
+AGACA A|C 8 AGACAGCA 5
diff --git a/genomix/genomix-pregelix/text/SimplePath/naive_SimplePath b/genomix/genomix-pregelix/text/SimplePath/naive_SimplePath
new file mode 100644
index 0000000..cf53cc8
--- /dev/null
+++ b/genomix/genomix-pregelix/text/SimplePath/naive_SimplePath
@@ -0,0 +1,9 @@
+CGGCA G|A 8 CGGCAAGA 1
+AGCAC C|
+AAGAC |A
+GCGGC |A
+GCATC C|
+ATATC |G
+TATCG A|C 8 TATCGCAT 1
+AAGAA C|
+AGACA A|C 8 AGACAGCA 1
diff --git a/genomix/genomix-pregelix/text/SinglePath/log_SinglePath b/genomix/genomix-pregelix/text/SinglePath/log_SinglePath
new file mode 100644
index 0000000..f1371ec
--- /dev/null
+++ b/genomix/genomix-pregelix/text/SinglePath/log_SinglePath
@@ -0,0 +1,3 @@
+ACAGT A|
+GACAA A|T 8 GACAACAG 5
+AGACA |A
diff --git a/genomix/genomix-pregelix/text/SinglePath/naive_SinglePath b/genomix/genomix-pregelix/text/SinglePath/naive_SinglePath
new file mode 100644
index 0000000..b736667
--- /dev/null
+++ b/genomix/genomix-pregelix/text/SinglePath/naive_SinglePath
@@ -0,0 +1,3 @@
+ACAGT A|
+GACAA A|T 8 GACAACAG 1
+AGACA |A
diff --git a/genomix/genomix-pregelix/text/TreePath/log_TreePath b/genomix/genomix-pregelix/text/TreePath/log_TreePath
new file mode 100644
index 0000000..0b9f198
--- /dev/null
+++ b/genomix/genomix-pregelix/text/TreePath/log_TreePath
@@ -0,0 +1,9 @@
+CAGTA T|AC
+AGTAC C|G 10 AGTACGCCCG 5
+ATCCC T|
+GCCTC G|A 8 GCCTCAGT 5
+CCCGG G|
+GGCCT |CG
+AGTAA C|C 10 AGTAACTAAA 5
+TAAAC C|
+GCCTG G|C 12 GCCTGGCTATCC 5
diff --git a/genomix/genomix-pregelix/text/TreePath/naive_TreePath b/genomix/genomix-pregelix/text/TreePath/naive_TreePath
new file mode 100644
index 0000000..39dcbaa
--- /dev/null
+++ b/genomix/genomix-pregelix/text/TreePath/naive_TreePath
@@ -0,0 +1,9 @@
+CAGTA T|AC
+AGTAC C|G 10 AGTACGCCCG 1
+ATCCC T|
+GCCTC G|A 8 GCCTCAGT 1
+CCCGG G|
+GGCCT |CG
+AGTAA C|C 10 AGTAACTAAA 1
+TAAAC C|
+GCCTG G|C 12 GCCTGGCTATCC 1
diff --git a/genomix/pom.xml b/genomix/pom.xml
new file mode 100644
index 0000000..4460942
--- /dev/null
+++ b/genomix/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>edu.uci.ics.hyracks</groupId>
+ <artifactId>genomix</artifactId>
+ <version>0.2.10-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>genomix</name>
+
+ <distributionManagement>
+ <repository>
+ <id>hyracks-releases</id>
+ <url>http://obelix.ics.uci.edu/nexus/content/repositories/hyracks-releases/</url>
+ </repository>
+ <snapshotRepository>
+ <id>hyracks-snapshots</id>
+ <url>http://obelix.ics.uci.edu/nexus/content/repositories/hyracks-snapshots/</url>
+ </snapshotRepository>
+ </distributionManagement>
+
+ <repositories>
+ <repository>
+ <id>hyracks-public</id>
+ <url>http://obelix.ics.uci.edu/nexus/content/groups/hyracks-public/</url>
+ </repository>
+ <repository>
+ <id>jboss-public</id>
+ <url>https://repository.jboss.org/nexus/content/groups/public/</url>
+ </repository>
+ </repositories>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>hyracks-public</id>
+ <url>http://obelix.ics.uci.edu/nexus/content/groups/hyracks-public/</url>
+ <releases>
+ <updatePolicy>always</updatePolicy>
+ </releases>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <modules>
+ <module>genomix-data</module>
+ <module>genomix-hyracks</module>
+ <module>genomix-hadoop</module>
+ <module>genomix-pregelix</module>
+ </modules>
+</project>
diff --git a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/partitions/MaterializingPipelinedPartition.java b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/partitions/MaterializingPipelinedPartition.java
index 15db1fe..e292a34 100644
--- a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/partitions/MaterializingPipelinedPartition.java
+++ b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/edu/uci/ics/hyracks/control/nc/partitions/MaterializingPipelinedPartition.java
@@ -177,4 +177,4 @@
manager.updatePartitionState(pid, taId, this, PartitionState.COMMITTED);
}
}
-}
\ No newline at end of file
+}
diff --git a/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/preclustered/PreclusteredGroupWriter.java b/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/preclustered/PreclusteredGroupWriter.java
index 7773765..002aa3b 100644
--- a/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/preclustered/PreclusteredGroupWriter.java
+++ b/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/group/preclustered/PreclusteredGroupWriter.java
@@ -163,4 +163,4 @@
aggregateState.close();
writer.close();
}
-}
\ No newline at end of file
+}
diff --git a/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/PrinterOperatorDescriptor.java b/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/PrinterOperatorDescriptor.java
index 9569a7b..4f9f6ec 100644
--- a/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/PrinterOperatorDescriptor.java
+++ b/hyracks/hyracks-dataflow-std/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/PrinterOperatorDescriptor.java
@@ -66,4 +66,4 @@
return new DeserializedOperatorNodePushable(ctx, new PrinterOperator(),
recordDescProvider.getInputRecordDescriptor(getActivityId(), 0));
}
-}
\ No newline at end of file
+}
diff --git a/hyracks/hyracks-hdfs/hyracks-hdfs-core/pom.xml b/hyracks/hyracks-hdfs/hyracks-hdfs-core/pom.xml
index b51d41d..2eaf190 100644
--- a/hyracks/hyracks-hdfs/hyracks-hdfs-core/pom.xml
+++ b/hyracks/hyracks-hdfs/hyracks-hdfs-core/pom.xml
@@ -44,6 +44,18 @@
</configuration>
</plugin>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.2</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
<configuration>
diff --git a/patch.diff b/patch.diff
new file mode 100644
index 0000000..a333970
--- /dev/null
+++ b/patch.diff
@@ -0,0 +1,245 @@
+From 9e006501f9e33467a8428199bd94b71dbff063ef Mon Sep 17 00:00:00 2001
+From: Anbang Xu <anbangx@gmail.com>
+Date: Fri, 26 Jul 2013 14:10:33 -0700
+Subject: [PATCH] p2 pass all the tests except 9
+
+---
+ .../genomix/data/test/KmerBytesWritableTest.java | 76 +++++++++++++++++++++-
+ .../genomix/pregelix/io/VertexValueWritable.java | 2 +-
+ .../operator/pathmerge/BasicPathMergeVertex.java | 35 +++++-----
+ .../pathmerge/LogAlgorithmForPathMergeVertex.java | 8 +--
+ .../pregelix/JobRun/PathMergeSmallTestSuite.java | 2 +-
+ 5 files changed, 98 insertions(+), 25 deletions(-)
+
+diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
+index bda73e5..fbfbeeb 100644
+--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
++++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
+@@ -229,14 +229,34 @@ public class KmerBytesWritableTest {
+ merge.mergeWithRFKmer(i, kmer2);
+ Assert.assertEquals("GGCACAACAACCC", merge.toString());
+
+- String test1 = "CTA";
+- String test2 = "AGA";
++ String test1;
++ String test2;
++ test1 = "CTA";
++ test2 = "AGA";
+ KmerBytesWritable k1 = new KmerBytesWritable(3);
+ KmerBytesWritable k2 = new KmerBytesWritable(3);
+ k1.setByRead(test1.getBytes(), 0);
+ k2.setByRead(test2.getBytes(), 0);
+ k1.mergeWithRFKmer(3, k2);
+ Assert.assertEquals("TCTA", k1.toString());
++
++ test1 = "CTA";
++ test2 = "ATA"; //TAT
++ k1 = new KmerBytesWritable(3);
++ k2 = new KmerBytesWritable(3);
++ k1.setByRead(test1.getBytes(), 0);
++ k2.setByRead(test2.getBytes(), 0);
++ k1.mergeWithFRKmer(3, k2);
++ Assert.assertEquals("CTAT", k1.toString());
++
++ test1 = "ATA";
++ test2 = "CTA"; //TAT
++ k1 = new KmerBytesWritable(3);
++ k2 = new KmerBytesWritable(3);
++ k1.setByRead(test1.getBytes(), 0);
++ k2.setByRead(test2.getBytes(), 0);
++ k1.mergeWithFRKmer(3, k2);
++ Assert.assertEquals("ATAG", k1.toString());
+ }
+
+
+@@ -281,5 +301,55 @@ public class KmerBytesWritableTest {
+ }
+ }
+ }
+-
++
++ @Test
++ public void TestFinalMerge() {
++ String selfString;
++ String match;
++ String msgString;
++ int index;
++ KmerBytesWritable kmer = new KmerBytesWritable();
++ int kmerSize = 3;
++
++ String F1 = "AATAG";
++ String F2 = "TAGAA";
++ String R1 = "CTATT";
++ String R2 = "TTCTA";
++
++ //FF test
++ selfString = F1;
++ match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
++ msgString = F2;
++ index = msgString.indexOf(match);
++ kmer.reset(msgString.length() - index);
++ kmer.setByRead(msgString.substring(index).getBytes(), 0);
++ System.out.println(kmer.toString());
++
++ //FR test
++ selfString = F1;
++ match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
++ msgString = GeneCode.reverseComplement(R2);
++ index = msgString.indexOf(match);
++ kmer.reset(msgString.length() - index);
++ kmer.setByRead(msgString.substring(index).getBytes(), 0);
++ System.out.println(kmer.toString());
++
++ //RF test
++ selfString = R1;
++ match = selfString.substring(0,kmerSize - 1);
++ msgString = GeneCode.reverseComplement(F2);
++ index = msgString.lastIndexOf(match) + kmerSize - 2;
++ kmer.reset(index + 1);
++ kmer.setByReadReverse(msgString.substring(0, index + 1).getBytes(), 0);
++ System.out.println(kmer.toString());
++
++ //RR test
++ selfString = R1;
++ match = selfString.substring(0,kmerSize - 1);
++ msgString = R2;
++ index = msgString.lastIndexOf(match) + kmerSize - 2;
++ kmer.reset(index + 1);
++ kmer.setByRead(msgString.substring(0, index + 1).getBytes(), 0);
++ System.out.println(kmer.toString());
++ }
+ }
+diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
+index 6d4f683..065bfd5 100644
+--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
++++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
+@@ -32,7 +32,7 @@ public class VertexValueWritable implements WritableComparable<VertexValueWritab
+ public static final byte SHOULD_MERGEWITHNEXT = 0b01 << 3;
+ public static final byte SHOULD_MERGEWITHPREV = 0b10 << 3;
+ public static final byte SHOULD_MERGE_MASK = 0b11 << 3;
+- public static final byte SHOULD_MERGE_CLEAR = 0b1110011;
++ public static final byte SHOULD_MERGE_CLEAR = 0b1100111;
+ }
+
+ private PositionListWritable nodeIdList;
+diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
+index b7b0814..ec608c5 100644
+--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
++++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
+@@ -495,6 +495,7 @@ public class BasicPathMergeVertex extends
+
+ public void setStateAsMergeWithNext(){
+ byte state = getVertexValue().getState();
++ state &= State.SHOULD_MERGE_CLEAR;
+ state |= State.SHOULD_MERGEWITHNEXT;
+ getVertexValue().setState(state);
+ }
+@@ -512,6 +513,7 @@ public class BasicPathMergeVertex extends
+
+ public void setStateAsMergeWithPrev(){
+ byte state = getVertexValue().getState();
++ state &= State.SHOULD_MERGE_CLEAR;
+ state |= State.SHOULD_MERGEWITHPREV;
+ getVertexValue().setState(state);
+ }
+@@ -638,7 +640,7 @@ public class BasicPathMergeVertex extends
+ String match;
+ String msgString;
+ int index;
+- switch(neighborToMergeDir){
++ switch(neighborToMeDir){
+ case MessageFlag.DIR_FF:
+ selfString = getVertexValue().getKmer().toString();
+ match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
+@@ -648,28 +650,29 @@ public class BasicPathMergeVertex extends
+ kmer.setByRead(msgString.substring(index).getBytes(), 0);
+ break;
+ case MessageFlag.DIR_FR:
+- selfString = getVertexId().toString();
+- match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
++ selfString = getVertexValue().getKmer().toString();
++ match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
+ msgString = GeneCode.reverseComplement(msg.getKmer().toString());
+ index = msgString.indexOf(match);
+ kmer.reset(msgString.length() - index);
+- kmer.setByRead(msgString.substring(index).getBytes(), 0);
++ kmer.setByReadReverse(msgString.substring(index).getBytes(), 0);
+ break;
+ case MessageFlag.DIR_RF:
+- selfString = GeneCode.reverseComplement(getVertexValue().getKmer().toString());
+- match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
+- msgString = msg.getKmer().toString();
+- index = msgString.indexOf(match);
+- kmer.reset(msgString.length() - index);
+- kmer.setByRead(msgString.substring(index).getBytes(), 0);
++ selfString = getVertexValue().getKmer().toString();
++ match = selfString.substring(0,kmerSize - 1);
++ msgString = GeneCode.reverseComplement(msg.getKmer().toString());
++ index = msgString.lastIndexOf(match) + kmerSize - 2;
++ kmer.reset(index + 1);
++ kmer.setByReadReverse(msgString.substring(0, index + 1).getBytes(), 0);
+ break;
+ case MessageFlag.DIR_RR:
+- selfString = GeneCode.reverseComplement(getVertexValue().getKmer().toString());
+- match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length());
+- msgString = GeneCode.reverseComplement(msg.getKmer().toString());
+- index = msgString.indexOf(match);
+- kmer.reset(msgString.length() - index);
+- kmer.setByRead(msgString.substring(index).getBytes(), 0);
++ selfString = getVertexValue().getKmer().toString();
++ match = selfString.substring(0,kmerSize - 1);
++ msgString = msg.getKmer().toString();
++ index = msgString.lastIndexOf(match) + kmerSize - 2;
++ kmer.reset(index + 1);
++ kmer.setByRead(msgString.substring(0, index + 1).getBytes(), 0);
++ System.out.println(kmer.toString());
+ break;
+ }
+
+diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/LogAlgorithmForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/LogAlgorithmForPathMergeVertex.java
+index a68b646..3b5a782 100644
+--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/LogAlgorithmForPathMergeVertex.java
++++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/LogAlgorithmForPathMergeVertex.java
+@@ -170,22 +170,22 @@ public class LogAlgorithmForPathMergeVertex extends
+ case MessageFromHead.BothMsgsFromHead:
+ case MessageFromHead.OneMsgFromOldHeadAndOneFromHead:
+ for(int i = 0; i < 2; i++)
+- processMerge(receivedMsgList.get(i));
++ processFinalMerge(receivedMsgList.get(i)); //processMerge()
+ getVertexValue().setState(State.IS_FINAL);
+ voteToHalt();
+ break;
+ case MessageFromHead.OneMsgFromHeadAndOneFromNonHead:
+ for(int i = 0; i < 2; i++)
+- processMerge(receivedMsgList.get(i));
++ processFinalMerge(receivedMsgList.get(i));
+ getVertexValue().setState(State .IS_HEAD);
+ break;
+ case MessageFromHead.BothMsgsFromNonHead:
+ for(int i = 0; i < 2; i++)
+- processMerge(receivedMsgList.get(i));
++ processFinalMerge(receivedMsgList.get(i));
+ break;
+ case MessageFromHead.NO_MSG:
+ //halt
+- deleteVertex(getVertexId());
++ voteToHalt(); //deleteVertex(getVertexId());
+ break;
+ }
+ }
+diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
+index 9f96b5a..1578dfc 100644
+--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
++++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
+@@ -52,7 +52,7 @@ public class PathMergeSmallTestSuite extends TestSuite {
+ // + "6", PreFix + File.separator
+ // + "7", PreFix + File.separator
+ // + "8", PreFix + File.separator
+- + "5"};
++ + "9"};
+ private static final String ACTUAL_RESULT_DIR = "data/actual/pathmerge";
+ 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";
+--
+1.7.11.1
+
diff --git a/pom.xml b/pom.xml
index a851758..810152e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,5 +82,6 @@
<module>algebricks</module>
<module>pregelix</module>
<module>hivesterix</module>
+ <module>genomix</module>
</modules>
</project>