@@ -6,6 +6,11 @@ struct OrientedHubbardTree <: AbstractHubbardTree
6
6
boundary:: Vector{Sequence}
7
7
end
8
8
9
+ function Base. show (io:: IO ,H:: OrientedHubbardTree )
10
+ println (io," Oriented Hubbard tree with adjacency dictionary" )
11
+ return display (H. adj)
12
+ end
13
+
9
14
function forwardimages (htree:: Dict )
10
15
return Dict ([Pair (key,[shift (key)]) for key in keys (htree)])
11
16
end
@@ -100,23 +105,21 @@ function characteristicorbits(H)
100
105
end
101
106
102
107
function OrientedHubbardTree (AIA:: AngledInternalAddress )
108
+ # Construct the unoriented Hubbard tree from the internal address ignoring the angles
103
109
H = HubbardTree (AIA. addr)
104
110
111
+ # Find the boundary between the '0' region and the '1' region as the path between the beta fixed point and its preimage
105
112
(H,boundary) = addboundary (H)
106
113
107
- nums = Int[]
108
- for angle in AIA. angles
109
- if denominator (angle) > 2
110
- push! (nums,numerator (angle))
111
- end
112
- end
114
+ # Filter the angles for those describing the characteristic points
115
+ charangles = filter (x -> denominator (x) != 2 , AIA. angles)
113
116
117
+ # create empty oriented tree.
114
118
orientedH = Dict {Sequence{Char}, Vector{Sequence{Char}}} ()
115
119
116
120
charorbits = characteristicorbits (H)
117
-
118
- for (node, num) in zip (charorbits,nums)
119
- merge! (orientedH,orientpreimages (H. adj,node[2 ],orientcharacteristic (H, node[1 ],num)))
121
+ for (node, ang) in zip (charorbits,charangles)
122
+ merge! (orientedH,orientpreimages (H. adj,node[2 ],orientcharacteristic (H, node[1 ],ang)))
120
123
end
121
124
122
125
# Deal with the critical orbit
@@ -169,13 +172,19 @@ function orientnode(H,source::Sequence{Char},target::Pair{Sequence{Char}, Vector
169
172
end
170
173
171
174
# SKETCHY SKETCHY
172
- function orientcharacteristic (H,node,num)
175
+ function orientcharacteristic (H,node,ang)
176
+ num = numerator (ang)
177
+ den = denominator (ang)
173
178
glarms = globalarms (H. adj,node)
174
179
zero = H. zero
175
180
per = period (zero)
176
181
c = shift (zero)
177
182
q = length (glarms)
178
183
n = period (node)
184
+
185
+ if den != q
186
+ error (" the denominator of the characteristic angle does not match the order of the branch point" )
187
+ end
179
188
180
189
# the characteristic point has arms towards 1-n,1,1+n,1+2n, where n is the period of the characteristic point
181
190
# the numerator tells us the arm towards 1 is in position num
@@ -407,6 +416,11 @@ function allanglesof(theta::Rational)
407
416
return allanglesof (OZ,OH)
408
417
end
409
418
419
+ function allanglesof (H:: OrientedHubbardTree )
420
+ OZ = labelonezero (H)
421
+ return allanglesof (OZ,H)
422
+ end
423
+
410
424
function angle_echo (theta:: Rational )
411
425
aia = AngledInternalAddress (theta)
412
426
return criticalanglesof (aia)
0 commit comments