Closed jeanluct closed 5 years ago
Working on this in branch iss143-extract-tt-map
.
This turned out to be easier than I expected: tntype
was already using Toby's code directly. I renamed it to train
, and changed the output to a structure. Then I called the graph
method TransitionMatrix
from Toby's code, choosing trains::raw
output. The output is a row of strings, since it can also be used to output LaTex or Maple, but this was easily converted to a Matlab matrix.
Ok, the fields transmat
and ttmap
as output by train
are implemented in d71d450f! Now let's do some testing, and see if maybe it isn't worth adding other fields to the struct, while we're at it.
Looking at the output of frontend
might suggest some things to add to braid.train
's struct:
Enter number of braid strings: 4
Enter braid generators separated by spaces, ending with 0:
1 2 -3 0
> train
Now have an efficient fibred surface: Growth 2.29663, Entropy 0.831443
Isotopy class is Pseudo-Anosov
> print
Graph on surface with 4 peripheral loops:
Vertex number 1 with image vertex 2:
Edges at vertex are: 1 -1 7
Region 1
Vertex number 2 with image vertex 4:
Edges at vertex are: 4 -4 -6
Region 3
Vertex number 3 with image vertex 1:
Edges at vertex are: -2 8 2
Region 1
Vertex number 4 with image vertex 3:
Edges at vertex are: -3 -5 6 3
Region 2
Vertex number 5 with image vertex 5:
Edges at vertex are: -7 5 -8
Region 1
Edge number 1 from vertex 1 to vertex 1:
Type: Peripheral about puncture number 1
Image is: 4
Path (1 -> 1): 1 -1
Edge number 2 from vertex 3 to vertex 3:
Type: Peripheral about puncture number 2
Image is: 1
Path (1 -> 1): -2 2
Edge number 3 from vertex 4 to vertex 4:
Type: Peripheral about puncture number 3
Image is: 2
Path (2 -> 2): -3 3
Edge number 4 from vertex 2 to vertex 2:
Type: Peripheral about puncture number 4
Image is: 3
Path (3 -> 3): -4 4
Edge number 5 from vertex 5 to vertex 4:
Type: Main
Image is: -8
Path (1 -> 2): -2
Edge number 6 from vertex 4 to vertex 2:
Type: Main
Image is: 8 5 -3 6 -4 -6
Path (2 -> 3): -3
Edge number 7 from vertex 1 to vertex 5:
Type: Main
Image is: -6 3 -5
Path (1 -> 1):
Edge number 8 from vertex 3 to vertex 5:
Type: Main
Image is: 7
Path (1 -> 1):
Pseudo-Anosov Isotopy class
Vertex 1:
Gates are: {-1}, {7}, {1}
Infinitesimal edges join -1 to 7, 1 to 7
Vertex 2:
Gates are: {-4}, {-6}, {4}
Infinitesimal edges join -6 to -4, -6 to 4
Vertex 3:
Gates are: {8}, {2}, {-2}
Infinitesimal edges join -2 to 8, 2 to 8
Vertex 4:
Gates are: {-5, 6}, {3}, {-3}
Infinitesimal edges join -5 to -3, -5 to 3
Vertex 5:
Gates are: {5}, {-8}, {-7}
Infinitesimal edges join -8 to 5, -8 to -7, -7 to 5
What could be relevant to return:
n
peripheral edges for n
punctures? The edges of the trigon are collapsed to a point.braid_fiads
. This could be useful to return. It's used to prove efficiency, but does it really carry useful information beyond that?trains/graph.h
:
//Reducible1 means transition matrix reducible, Reducible2 have efficient fibred surface
Right now the two are replaced by just "reducible," but the distinction could be important.
Let's try a reducible braid:
> braid
Enter number of braid strings: 4
Enter braid generators separated by spaces, ending with 0:
1 -2 0
> train
Isotopy class is Reducible
> print
Graph on surface with 4 peripheral loops:
Vertex number 1 with image vertex 2:
Edges at vertex are: 1 -1 5
Region 1
Vertex number 2 with image vertex 4:
Edges at vertex are: 3 -3 7 -6
Region 2
Vertex number 3 with image vertex 3:
Edges at vertex are: 4 -4 -7
Region 3
Vertex number 4 with image vertex 1:
Edges at vertex are: -2 -5 6 2
Region 1
Edge number 1 from vertex 1 to vertex 1:
Type: Peripheral about puncture number 1
Image is: 3
Path (1 -> 1): 1 -1
Edge number 2 from vertex 4 to vertex 4:
Type: Peripheral about puncture number 2
Image is: 1
Path (1 -> 1): -2 2
Edge number 3 from vertex 2 to vertex 2:
Type: Peripheral about puncture number 3
Image is: 2
Path (2 -> 2): -3 3
Edge number 4 from vertex 3 to vertex 3:
Type: Peripheral about puncture number 4
Image is: 4
Path (3 -> 3): -4 4
Edge number 5 from vertex 1 to vertex 4:
Type: Main
Image is: -6 2 -5
Path (1 -> 1):
Edge number 6 from vertex 4 to vertex 2:
Type: Main
Image is: 5 -2 6 -3 -6
Path (1 -> 2): -2
Edge number 7 from vertex 2 to vertex 3:
Type: Main
Image is: 6 3 7
Path (2 -> 3): 3
Reducible Isotopy class
The following main edges and their images constitute an invariant subgraph:
5 6
The new info is the invariant subgraph. That's certainly worth outputting, if there is one (more than one?).
I also tried a finite-order example, but it doesn't seem to give new info.
There are also many other commands in frontend
that could give useful info. Make sure to check those out.
For now, I guess the only thing would be to add the invariant subgraph?
Some hints about the difference between Reducible1
and Reducible2
:
> help gates
GATES
=====
If the graph map held in memory has been found to represent a pseudo-Anosov
isotopy class, or a reducible class for which reducibility has been detected
because there is an efficient fibred surface with a vertex at which not all
of the gates are connected by infinitesimal edges, then this command will
display lists of gates and infinitesimal edges at each vertex. The gates
are listed in cyclic (anticlockwise) order around the vertex.
This is a description of Reducible2
, I think.
Finally got around to adding this to the guide and merging into develop.
Closed branch iss143-extract-tt-map
.
Could re-open this later if we decide to return more information from Toby's train code.
John Lynch and I have been discussing the best way to take the output of
trains
in order to get the train track map. There are a few ways to go.Add a command
MatlabPrint
inGraphset.cpp
andGraphset.h
, which would output the TT map in a format that can be read by Matlab directly. This also requires modifyingedgevert.cpp
. So this requires quite a few changes to the C++ code.Parse the text output. This is the easiest thing to do but is perhaps a bit hackey. Nevertheless, if we choose to do it differently later it'll be invisible to the user. Try to think of the best language to do this text processing with (probably not Matlab?).