1
2
3
4
5
6
7 """Genome Diagram Feature cross-link module
8 """
9
10 from reportlab.lib import colors
14 """Hold information for drawing a cross link between features.
15 """
16 - def __init__(self, featureA, featureB,
17 color=colors.lightgreen, border=None, flip=False):
18 """Create a new cross link.
19
20 Arguments featureA and featureB should GenomeDiagram feature objects,
21 or 3-tuples (track object, start, end), and currently must be on
22 different tracks.
23
24 The color and border arguments should be ReportLab colour objects, or
25 for border use a boolean False for no border, otherwise it defaults to
26 the same as the main colour.
27
28 The flip argument draws an inverted cross link, useful for showing a
29 mapping where one sequence has been reversed. It is conventional to
30 also use a different colour (e.g. red for simple links, blue for any
31 flipped links).
32 """
33
34 self.featureA = featureA
35 self.featureB = featureB
36 self.color = color
37 self.border = border
38 self.flip = flip
39
40 @property
42 try:
43 return self.featureA.start
44 except AttributeError:
45 track, start, end = self.featureA
46 return start
47
48 @property
50 try:
51 return self.featureA.end
52 except AttributeError:
53 track, start, end = self.featureA
54 return end
55
57 try:
58 track, start, end = self.featureA
59 assert track in tracks
60 return track
61 except:
62 for track in tracks:
63 for feature_set in track.get_sets():
64 if hasattr(feature_set, "features"):
65 if self.featureA in feature_set.features.values():
66 return track
67 return None
68
69 @property
71 try:
72 return self.featureB.start
73 except AttributeError:
74 track, start, end = self.featureB
75 return start
76
77 @property
79 try:
80 return self.featureB.end
81 except AttributeError:
82 track, start, end = self.featureB
83 return end
84
86 try:
87 track, start, end = self.featureB
88 assert track in tracks
89 return track
90 except:
91 for track in tracks:
92 for feature_set in track.get_sets():
93 if hasattr(feature_set, "features"):
94 if self.featureB in feature_set.features.values():
95 return track
96 return None
97