normalizeUnkownJoins

Normalizes unknown joins such that they join contigs or are removed as applicable.

normalizeUnkownJoins
(
T
)

Examples

1 alias J = Join!int;
2 alias S = Scaffold!int;
3 alias CN = ContigNode;
4 alias CP = ContigPart;
5 
6 //  Case 1:
7 //
8 //      o        oxxxxo        o   =>   o        o    o        o
9 //                                 =>
10 //        o -- o        o -- o     =>     o -- oxxxxxxxxo -- o
11 auto scaffold1 = buildScaffold!(sumPayloads!int, int)(2, [
12     getUnkownJoin!int(1, 2, 1),
13 ]).normalizeUnkownJoins!int;
14 assert(getDefaultJoin!int(1) in scaffold1);
15 assert(getDefaultJoin!int(2) in scaffold1);
16 assert(J(CN(1, CP.end), CN(2, CP.begin)) in scaffold1);
17 assert(scaffold1.edges.walkLength == 3);
18 
19 //  Case 2:
20 //
21 //      o        oxxxxo        o  =>  o        o   xxxo        o
22 //                     \          =>              /    \
23 //        o -- o        o -- o    =>    o -- oxxxx      o -- o
24 auto scaffold2 = buildScaffold!(sumPayloads!int, int)(2, [
25     getUnkownJoin!int(1, 2, 1),
26     J(CN(2, CP.pre), CN(2, CP.begin), 1),
27 ]).normalizeUnkownJoins!int;
28 assert(getDefaultJoin!int(1) in scaffold2);
29 assert(getDefaultJoin!int(2) in scaffold2);
30 assert(J(CN(1, CP.end), CN(2, CP.pre)) in scaffold2);
31 assert(J(CN(2, CP.pre), CN(2, CP.begin)) in scaffold2);
32 assert(scaffold2.edges.walkLength == 4);
33 
34 //  Case 3:
35 //
36 //      o        oxxxxo        o  =>  o        o    o        o
37 //                                =>
38 //        o -- o        o -- o    =>    o -- o        o -- o
39 //                      |         =>                  |
40 //                      o -- o    =>                  o -- o
41 //                                =>
42 //                    o        o  =>                o        o
43 auto scaffold3 = buildScaffold!(sumPayloads!int, int)(3, [
44     getUnkownJoin!int(1, 2, 1),
45     J(CN(2, CP.begin), CN(3, CP.begin), 1),
46 ]).normalizeUnkownJoins!int;
47 assert(getDefaultJoin!int(1) in scaffold3);
48 assert(getDefaultJoin!int(2) in scaffold3);
49 assert(getDefaultJoin!int(3) in scaffold3);
50 assert(J(CN(2, CP.begin), CN(3, CP.begin)) in scaffold3);
51 assert(scaffold3.edges.walkLength == 4);
52 
53 //  Case 4:
54 //
55 //      o        oxxxxo        o  =>  o        oxxx   o        o
56 //              /                 =>          /    \
57 //        o -- o        o -- o    =>    o -- o      xxxxo -- o
58 auto scaffold4 = buildScaffold!(sumPayloads!int, int)(2, [
59     getUnkownJoin!int(1, 2, 1),
60     J(CN(1, CP.end), CN(1, CP.post), 1),
61 ]).normalizeUnkownJoins!int;
62 assert(getDefaultJoin!int(1) in scaffold4);
63 assert(getDefaultJoin!int(2) in scaffold4);
64 assert(J(CN(1, CP.post), CN(2, CP.begin)) in scaffold4);
65 assert(J(CN(1, CP.end), CN(1, CP.post)) in scaffold4);
66 assert(scaffold4.edges.walkLength == 4);
67 
68 //  Case 5:
69 //
70 //      o        oxxxxo        o
71 //              /      \
72 //        o -- o        o -- o
73 auto scaffold5 = buildScaffold!(sumPayloads!int, int)(2, [
74     getUnkownJoin!int(1, 2, 1),
75     J(CN(1, CP.end), CN(1, CP.post), 1),
76     J(CN(2, CP.pre), CN(2, CP.begin), 1),
77 ]).normalizeUnkownJoins!int;
78 assert(getDefaultJoin!int(1) in scaffold5);
79 assert(getDefaultJoin!int(2) in scaffold5);
80 assert(getUnkownJoin!int(1, 2, 1) in scaffold5);
81 assert(J(CN(1, CP.end), CN(1, CP.post)) in scaffold5);
82 assert(J(CN(2, CP.pre), CN(2, CP.begin)) in scaffold5);
83 assert(scaffold5.edges.walkLength == 5);
84 
85 //  Case 6:
86 //
87 //      o        oxxxxo        o  =>  o        o    o        o
88 //              /                 =>          /
89 //        o -- o        o -- o    =>    o -- o        o -- o
90 //                      |         =>                  |
91 //                      o -- o    =>                  o -- o
92 //                                =>
93 //                    o        o  =>                o        o
94 auto scaffold6 = buildScaffold!(sumPayloads!int, int)(3, [
95     getUnkownJoin!int(1, 2, 1),
96     J(CN(1, CP.end), CN(1, CP.post), 1),
97     J(CN(2, CP.begin), CN(3, CP.begin), 1),
98 ]).normalizeUnkownJoins!int;
99 assert(getDefaultJoin!int(1) in scaffold6);
100 assert(getDefaultJoin!int(2) in scaffold6);
101 assert(getDefaultJoin!int(3) in scaffold6);
102 assert(J(CN(1, CP.end), CN(1, CP.post)) in scaffold6);
103 assert(J(CN(2, CP.begin), CN(3, CP.begin)) in scaffold6);
104 assert(scaffold6.edges.walkLength == 5);
105 
106 //  Case 7:
107 //
108 //      o        oxxxxo        o  =>  o        o    o        o
109 //                                =>
110 //        o -- o        o -- o    =>    o -- o        o -- o
111 //             |                  =>         |
112 //        o -- o                  =>    o -- o
113 //                                =>
114 //      o        o                =>  o        o
115 auto scaffold7 = buildScaffold!(sumPayloads!int, int)(3, [
116     getUnkownJoin!int(1, 2, 1),
117     J(CN(1, CP.end), CN(3, CP.end), 1),
118 ]).normalizeUnkownJoins!int;
119 assert(getDefaultJoin!int(1) in scaffold7);
120 assert(getDefaultJoin!int(2) in scaffold7);
121 assert(getDefaultJoin!int(3) in scaffold7);
122 assert(J(CN(1, CP.end), CN(3, CP.end)) in scaffold7);
123 assert(scaffold7.edges.walkLength == 4);
124 
125 //  Case 8:
126 //
127 //      o        oxxxxo        o  =>  o        o    o        o
128 //                     \          =>                 \
129 //        o -- o        o -- o    =>    o -- o        o -- o
130 //             |                  =>         |
131 //        o -- o                  =>    o -- o
132 //                                =>
133 //      o        o                =>  o        o
134 auto scaffold8 = buildScaffold!(sumPayloads!int, int)(3, [
135     getUnkownJoin!int(1, 2, 1),
136     J(CN(1, CP.end), CN(3, CP.end), 1),
137     J(CN(2, CP.pre), CN(2, CP.begin), 1),
138 ]).normalizeUnkownJoins!int;
139 assert(getDefaultJoin!int(1) in scaffold8);
140 assert(getDefaultJoin!int(2) in scaffold8);
141 assert(getDefaultJoin!int(3) in scaffold8);
142 assert(J(CN(1, CP.end), CN(3, CP.end)) in scaffold8);
143 assert(J(CN(2, CP.pre), CN(2, CP.begin)) in scaffold8);
144 assert(scaffold8.edges.walkLength == 5);
145 
146 //  Case 9:
147 //
148 //      o        oxxxxo        o  =>  o        o    o        o
149 //                                =>
150 //        o -- o        o -- o    =>    o -- o        o -- o
151 //             |        |         =>         |        |
152 //             o ------ o         =>         o ------ o
153 //                                =>
154 //           o            o       =>       o            o
155 auto scaffold9 = buildScaffold!(sumPayloads!int, int)(3, [
156     getUnkownJoin!int(1, 2, 1),
157     J(CN(1, CP.end), CN(3, CP.begin), 1),
158     J(CN(2, CP.begin), CN(3, CP.end), 1),
159 ]).normalizeUnkownJoins!int;
160 assert(getDefaultJoin!int(1) in scaffold9);
161 assert(getDefaultJoin!int(2) in scaffold9);
162 assert(getDefaultJoin!int(3) in scaffold9);
163 assert(J(CN(1, CP.end), CN(3, CP.begin)) in scaffold9);
164 assert(J(CN(2, CP.begin), CN(3, CP.end)) in scaffold9);
165 assert(scaffold9.edges.walkLength == 5);

Meta