bio-graphics 1.0 → 1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/doc/classes/Bio/Graphics.html +11 -1
- data/doc/classes/Bio/Graphics/Panel.html +5 -2
- data/doc/classes/Bio/Graphics/Panel.src/M000005.html +4 -4
- data/doc/classes/Bio/Graphics/Panel.src/M000006.html +3 -3
- data/doc/classes/Bio/Graphics/Panel.src/M000007.html +6 -5
- data/doc/classes/Bio/Graphics/Panel/Ruler.html +16 -16
- data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000014.html +6 -14
- data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000015.html +10 -41
- data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000016.html +59 -0
- data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000017.html +20 -0
- data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000018.html +28 -0
- data/doc/classes/Bio/Graphics/Panel/Ruler.src/M000019.html +59 -0
- data/doc/classes/Bio/Graphics/Panel/Track.html +30 -15
- data/doc/classes/Bio/Graphics/Panel/Track.src/M000008.html +8 -5
- data/doc/classes/Bio/Graphics/Panel/Track.src/M000009.html +2 -2
- data/doc/classes/Bio/Graphics/Panel/Track.src/M000010.html +12 -245
- data/doc/classes/Bio/Graphics/Panel/Track/Feature.html +109 -0
- data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000011.html +1 -1
- data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000012.html +39 -0
- data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000013.html +27 -0
- data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000014.html +209 -49
- data/doc/classes/Bio/Graphics/Panel/Track/Feature.src/M000015.html +48 -0
- data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.html +5 -5
- data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000013.html +18 -0
- data/doc/classes/Bio/Graphics/Panel/Track/Feature/PixelRange.src/M000016.html +18 -0
- data/doc/created.rid +1 -1
- data/doc/files/README_DEV.html +7 -11
- data/doc/files/TUTORIAL.html +3 -3
- data/doc/files/lib/bio-graphics_rb.html +3 -1
- data/doc/files/lib/bio/graphics/feature_rb.html +6 -11
- data/doc/files/lib/bio/graphics/image_map_rb.html +1 -1
- data/doc/files/lib/bio/graphics/panel_rb.html +1 -1
- data/doc/files/lib/bio/graphics/ruler_rb.html +1 -1
- data/doc/files/lib/bio/graphics/track_rb.html +1 -1
- data/doc/fr_method_index.html +8 -4
- data/doc/images/example_labels.png +0 -0
- data/doc/images/glyph_showcase.png +0 -0
- data/doc/images/terms.png +0 -0
- data/doc/index.html +2 -2
- data/images/example_labels.png +0 -0
- data/images/glyph_showcase.png +0 -0
- data/images/terms.png +0 -0
- data/images/terms.svg +146 -132
- data/lib/bio-graphics.rb +2 -1
- data/lib/bio/graphics/feature.rb +304 -0
- data/lib/bio/graphics/panel.rb +15 -11
- data/lib/bio/graphics/ruler.rb +1 -1
- data/lib/bio/graphics/track.rb +23 -254
- data/samples/arkdb_features.rb +8 -8
- data/samples/glyph_showcase.rb +10 -6
- data/test/unit/test_creation.rb +51 -0
- metadata +14 -2
@@ -127,17 +127,22 @@ documentation for explanation of interplay between different classes.
|
|
127
127
|
<div class="name-list">
|
128
128
|
<table>
|
129
129
|
<tr class="top-aligned-row context-row">
|
130
|
-
<td class="context-item-name">
|
130
|
+
<td class="context-item-name">colour</td>
|
131
131
|
<td class="context-item-value"> [RW] </td>
|
132
132
|
<td class="context-item-desc"></td>
|
133
133
|
</tr>
|
134
134
|
<tr class="top-aligned-row context-row">
|
135
|
-
<td class="context-item-name">
|
135
|
+
<td class="context-item-name">features</td>
|
136
136
|
<td class="context-item-value"> [RW] </td>
|
137
137
|
<td class="context-item-desc"></td>
|
138
138
|
</tr>
|
139
139
|
<tr class="top-aligned-row context-row">
|
140
|
-
<td class="context-item-name">
|
140
|
+
<td class="context-item-name">glyph</td>
|
141
|
+
<td class="context-item-value"> [RW] </td>
|
142
|
+
<td class="context-item-desc"></td>
|
143
|
+
</tr>
|
144
|
+
<tr class="top-aligned-row context-row">
|
145
|
+
<td class="context-item-name">grid</td>
|
141
146
|
<td class="context-item-value"> [RW] </td>
|
142
147
|
<td class="context-item-desc"></td>
|
143
148
|
</tr>
|
@@ -152,7 +157,7 @@ documentation for explanation of interplay between different classes.
|
|
152
157
|
<td class="context-item-desc"></td>
|
153
158
|
</tr>
|
154
159
|
<tr class="top-aligned-row context-row">
|
155
|
-
<td class="context-item-name">
|
160
|
+
<td class="context-item-name">number_of_feature_rows</td>
|
156
161
|
<td class="context-item-value"> [RW] </td>
|
157
162
|
<td class="context-item-desc"></td>
|
158
163
|
</tr>
|
@@ -161,6 +166,16 @@ documentation for explanation of interplay between different classes.
|
|
161
166
|
<td class="context-item-value"> [RW] </td>
|
162
167
|
<td class="context-item-desc"></td>
|
163
168
|
</tr>
|
169
|
+
<tr class="top-aligned-row context-row">
|
170
|
+
<td class="context-item-name">show_label</td>
|
171
|
+
<td class="context-item-value"> [RW] </td>
|
172
|
+
<td class="context-item-desc"></td>
|
173
|
+
</tr>
|
174
|
+
<tr class="top-aligned-row context-row">
|
175
|
+
<td class="context-item-name">vertical_offset</td>
|
176
|
+
<td class="context-item-value"> [RW] </td>
|
177
|
+
<td class="context-item-desc"></td>
|
178
|
+
</tr>
|
164
179
|
</table>
|
165
180
|
</div>
|
166
181
|
</div>
|
@@ -177,7 +192,7 @@ documentation for explanation of interplay between different classes.
|
|
177
192
|
<div class="method-heading">
|
178
193
|
<a href="Track.src/M000008.html" target="Code" class="method-signature"
|
179
194
|
onclick="popupCode('Track.src/M000008.html');return false;">
|
180
|
-
<span class="method-name">new</span><span class="method-args">(panel, name,
|
195
|
+
<span class="method-name">new</span><span class="method-args">(panel, name, label = true, colour = [0,0,1], glyph = :generic)</span>
|
181
196
|
</a>
|
182
197
|
</div>
|
183
198
|
|
@@ -200,6 +215,10 @@ belongs to
|
|
200
215
|
<li><em>name</em> (required) :: Name of the track to be displayed (e.g.
|
201
216
|
‘genes’)
|
202
217
|
|
218
|
+
</li>
|
219
|
+
<li><em>label</em> :: Boolean: should the label for each feature be drawn or
|
220
|
+
not
|
221
|
+
|
203
222
|
</li>
|
204
223
|
<li><em>colour</em> :: Colour to be used to <a
|
205
224
|
href="Track.html#M000010">draw</a> the features within the track. Default =
|
@@ -207,11 +226,11 @@ href="Track.html#M000010">draw</a> the features within the track. Default =
|
|
207
226
|
|
208
227
|
</li>
|
209
228
|
<li><em>glyph</em> :: Glyph to use for drawing the features. Options are:
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
229
|
+
:generic, :directed_generic, :spliced, :directed_spliced, :line and
|
230
|
+
:triangle. Triangles can be used for features whose start and stop
|
231
|
+
positions are the same (e.g. SNPs). If you try to <a
|
232
|
+
href="Track.html#M000010">draw</a> a feature that is longer with triangles,
|
233
|
+
an error will be shown.
|
215
234
|
|
216
235
|
</li>
|
217
236
|
</ul>
|
@@ -297,7 +316,7 @@ added. If it should be only partly visible, it is added completely.
|
|
297
316
|
<div class="method-heading">
|
298
317
|
<a href="Track.src/M000010.html" target="Code" class="method-signature"
|
299
318
|
onclick="popupCode('Track.src/M000010.html');return false;">
|
300
|
-
<span class="method-name">draw</span><span class="method-args">(panel_drawing
|
319
|
+
<span class="method-name">draw</span><span class="method-args">(panel_drawing)</span>
|
301
320
|
</a>
|
302
321
|
</div>
|
303
322
|
|
@@ -313,10 +332,6 @@ href="../Panel.html#M000007">Bio::Graphics::Panel.draw</a>
|
|
313
332
|
<ul>
|
314
333
|
<li><em>paneldrawing</em> (required) :: the panel cairo object
|
315
334
|
|
316
|
-
</li>
|
317
|
-
<li><em>verticaloffset</em> (required) :: number of pixels to offset the track
|
318
|
-
downwards, based on the height of other tracks that were drawn above it
|
319
|
-
|
320
335
|
</li>
|
321
336
|
</ul>
|
322
337
|
<table>
|
@@ -10,14 +10,17 @@
|
|
10
10
|
<link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
11
|
</head>
|
12
12
|
<body class="standalone-code">
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">panel</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line 39</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">panel</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">label</span> = <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">colour</span> = [<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">1</span>], <span class="ruby-identifier">glyph</span> = <span class="ruby-identifier">:generic</span>)
|
15
15
|
<span class="ruby-ivar">@panel</span> = <span class="ruby-identifier">panel</span>
|
16
16
|
<span class="ruby-ivar">@name</span> = <span class="ruby-identifier">name</span>
|
17
|
-
<span class="ruby-ivar">@
|
18
|
-
<span class="ruby-ivar">@
|
17
|
+
<span class="ruby-ivar">@show_label</span> = <span class="ruby-identifier">label</span>
|
18
|
+
<span class="ruby-ivar">@colour</span> = <span class="ruby-identifier">colour</span>
|
19
|
+
<span class="ruby-ivar">@glyph</span> = <span class="ruby-identifier">glyph</span>
|
19
20
|
<span class="ruby-ivar">@features</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
20
|
-
<span class="ruby-ivar">@
|
21
|
+
<span class="ruby-ivar">@number_of_feature_rows</span> = <span class="ruby-value">0</span>
|
22
|
+
<span class="ruby-ivar">@vertical_offset</span> = <span class="ruby-value">0</span>
|
23
|
+
<span class="ruby-ivar">@grid</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>
|
21
24
|
<span class="ruby-keyword kw">end</span></pre>
|
22
25
|
</body>
|
23
26
|
</html>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
11
|
</head>
|
12
12
|
<body class="standalone-code">
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line 80</span>
|
14
14
|
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_feature</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">location_string</span> = <span class="ruby-value str">'1..'</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@panel</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">link</span> = <span class="ruby-keyword kw">nil</span>)
|
15
15
|
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">link</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
|
16
16
|
<span class="ruby-identifier">link</span> = <span class="ruby-keyword kw">nil</span>
|
@@ -29,7 +29,7 @@
|
|
29
29
|
<span class="ruby-comment cmt"># looking at, don't bother storing the stuff. I think this makes huge
|
30
30
|
<span class="ruby-comment cmt"># speed and memory differences if you've got a chromosome with
|
31
31
|
<span class="ruby-comment cmt"># thousands of features.
|
32
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stop</span> <span class="ruby-operator"><=</span> <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_start</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">start</span> <span class="ruby-operator">>=</span> <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_stop</span>
|
32
|
+
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">stop</span> <span class="ruby-operator"><=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_start</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">start</span> <span class="ruby-operator">>=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_stop</span>
|
33
33
|
<span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
|
34
34
|
<span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt">#elsif start >= panel.display_start and stop <= panel.display_stop
|
35
35
|
<span class="ruby-ivar">@features</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">Bio</span><span class="ruby-operator">::</span><span class="ruby-constant">Graphics</span><span class="ruby-operator">::</span><span class="ruby-constant">Panel</span><span class="ruby-operator">::</span><span class="ruby-constant">Track</span><span class="ruby-operator">::</span><span class="ruby-constant">Feature</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">location_object</span>, <span class="ruby-identifier">link</span>))
|
@@ -10,274 +10,41 @@
|
|
10
10
|
<link rel="stylesheet" href="../../../../.././rdoc-style.css" type="text/css" media="screen" />
|
11
11
|
</head>
|
12
12
|
<body class="standalone-code">
|
13
|
-
<pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line
|
14
|
-
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">draw</span>(<span class="ruby-identifier">panel_drawing</span
|
13
|
+
<pre><span class="ruby-comment cmt"># File lib/bio/graphics/track.rb, line 115</span>
|
14
|
+
<span class="ruby-keyword kw">def</span> <span class="ruby-identifier">draw</span>(<span class="ruby-identifier">panel_drawing</span>)
|
15
15
|
<span class="ruby-identifier">track_drawing</span> = <span class="ruby-constant">Cairo</span><span class="ruby-operator">::</span><span class="ruby-constant">Context</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">panel_drawing</span>)
|
16
16
|
|
17
17
|
<span class="ruby-comment cmt"># Draw thin line above title
|
18
18
|
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-value">0</span><span class="ruby-value">.75</span>,<span class="ruby-value">0</span><span class="ruby-value">.75</span>,<span class="ruby-value">0</span><span class="ruby-value">.75</span>)
|
19
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">vertical_offset</span>)
|
20
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">width</span>, <span class="ruby-identifier">vertical_offset</span>)
|
19
|
+
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-value">0</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">vertical_offset</span>)
|
20
|
+
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">width</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">vertical_offset</span>)
|
21
21
|
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
|
22
22
|
|
23
23
|
<span class="ruby-comment cmt"># Draw track title
|
24
24
|
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-value">0</span>,<span class="ruby-value">0</span>,<span class="ruby-value">0</span>)
|
25
|
-
|
25
|
+
<span class="ruby-comment cmt"># track_drawing.select_font_face('Georgia',1,1)
|
26
|
+
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">select_font_face</span>(<span class="ruby-operator">*</span>(<span class="ruby-constant">FONT</span>))
|
26
27
|
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_font_size</span>(<span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
|
27
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-value">0</span>,<span class="ruby-constant">TRACK_HEADER_HEIGHT</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-value">10</span>)
|
28
|
+
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-value">0</span>,<span class="ruby-constant">TRACK_HEADER_HEIGHT</span> <span class="ruby-operator">+</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-value">10</span>)
|
28
29
|
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">show_text</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">name</span>)
|
29
30
|
|
30
31
|
<span class="ruby-comment cmt"># Draw the features
|
31
|
-
<span class="ruby-identifier">grid</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>
|
32
|
-
|
33
32
|
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">save</span> <span class="ruby-keyword kw">do</span>
|
34
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">translate</span>(<span class="ruby-value">0</span>, <span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
|
35
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-ivar">@
|
33
|
+
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">translate</span>(<span class="ruby-value">0</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">TRACK_HEADER_HEIGHT</span>)
|
34
|
+
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">set_source_rgb</span>(<span class="ruby-ivar">@colour</span>)
|
36
35
|
|
37
|
-
<span class="ruby-
|
38
|
-
<span class="ruby-comment cmt"># These are the basic steps:
|
39
|
-
<span class="ruby-comment cmt"># A. find out what row to draw it on
|
40
|
-
<span class="ruby-comment cmt"># B. see if we want to change the glyph type from directed to
|
41
|
-
<span class="ruby-comment cmt"># undirected
|
42
|
-
<span class="ruby-comment cmt"># C. draw the thing
|
43
|
-
<span class="ruby-ivar">@features</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">feature</span><span class="ruby-operator">|</span>
|
36
|
+
<span class="ruby-ivar">@features</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">start</span>}.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">feature</span><span class="ruby-operator">|</span>
|
44
37
|
<span class="ruby-comment cmt"># Don't even bother if the feature is not in the view
|
45
38
|
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">stop</span> <span class="ruby-operator"><=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_start</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">start</span> <span class="ruby-operator">>=</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">display_stop</span>
|
46
39
|
<span class="ruby-keyword kw">next</span>
|
47
40
|
<span class="ruby-keyword kw">else</span>
|
48
|
-
<span class="ruby-identifier">
|
49
|
-
|
50
|
-
<span class="ruby-comment cmt"># A. find out what row to draw it on
|
51
|
-
<span class="ruby-identifier">feature_range</span> = (<span class="ruby-identifier">feature</span>.<span class="ruby-identifier">start</span>.<span class="ruby-identifier">floor</span><span class="ruby-operator">..</span><span class="ruby-identifier">feature</span>.<span class="ruby-identifier">stop</span>.<span class="ruby-identifier">ceil</span>)
|
52
|
-
<span class="ruby-identifier">row</span> = <span class="ruby-value">1</span>
|
53
|
-
<span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">true</span>
|
54
|
-
<span class="ruby-keyword kw">until</span> <span class="ruby-identifier">feature_drawn</span>
|
55
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">nil?</span>
|
56
|
-
<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">covered</span><span class="ruby-operator">|</span>
|
57
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">covered</span>.<span class="ruby-identifier">first</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">covered</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">feature_range</span>.<span class="ruby-identifier">first</span>)
|
58
|
-
<span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">false</span>
|
59
|
-
<span class="ruby-keyword kw">end</span>
|
60
|
-
<span class="ruby-keyword kw">end</span>
|
61
|
-
<span class="ruby-keyword kw">end</span>
|
62
|
-
|
63
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">row_available</span>
|
64
|
-
<span class="ruby-identifier">row</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
|
65
|
-
<span class="ruby-identifier">row_available</span> = <span class="ruby-keyword kw">true</span>
|
66
|
-
<span class="ruby-keyword kw">else</span>
|
67
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">nil?</span>
|
68
|
-
<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
69
|
-
<span class="ruby-keyword kw">end</span>
|
70
|
-
<span class="ruby-identifier">grid</span>[<span class="ruby-identifier">row</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">feature_range</span>)
|
71
|
-
|
72
|
-
<span class="ruby-comment cmt"># B. see if we want to change the glyph type from directed to
|
73
|
-
<span class="ruby-comment cmt"># undirected
|
74
|
-
<span class="ruby-comment cmt"># There are 2 cases where we don't want to draw arrows on
|
75
|
-
<span class="ruby-comment cmt"># features:
|
76
|
-
<span class="ruby-comment cmt"># (a) when the picture is really zoomed out, features are
|
77
|
-
<span class="ruby-comment cmt"># so small that the arrow itself is too big
|
78
|
-
<span class="ruby-comment cmt"># (b) if a directed feature on the fw strand extends beyond
|
79
|
-
<span class="ruby-comment cmt"># the end of the picture, the arrow is out of view. This
|
80
|
-
<span class="ruby-comment cmt"># is the same as considering the feature as undirected.
|
81
|
-
<span class="ruby-comment cmt"># The same obviously goes for features on the reverse
|
82
|
-
<span class="ruby-comment cmt"># strand that extend beyond the left side of the image.
|
83
|
-
<span class="ruby-comment cmt">#
|
84
|
-
<span class="ruby-comment cmt"># (a) Zoomed out
|
85
|
-
<span class="ruby-identifier">replace_directed_with_undirected</span> = <span class="ruby-keyword kw">false</span>
|
86
|
-
<span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">feature</span>.<span class="ruby-identifier">stop</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">start</span>).<span class="ruby-identifier">to_f</span><span class="ruby-operator">/</span><span class="ruby-identifier">panel</span>.<span class="ruby-identifier">rescale_factor</span>.<span class="ruby-identifier">to_f</span> <span class="ruby-operator"><</span> <span class="ruby-value">2</span>
|
87
|
-
<span class="ruby-identifier">replace_directed_with_undirected</span> = <span class="ruby-keyword kw">true</span>
|
88
|
-
<span class="ruby-keyword kw">end</span>
|
89
|
-
<span class="ruby-comment cmt"># (b) Extending beyond borders picture
|
90
|
-
<span class="ruby-keyword kw">if</span> ( <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">chopped_at_stop</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">strand</span> = <span class="ruby-value">1</span> ) <span class="ruby-keyword kw">or</span> ( <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">chopped_at_start</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">strand</span> = <span class="ruby-value">-1</span> )
|
91
|
-
<span class="ruby-identifier">replace_directed_with_undirected</span> = <span class="ruby-keyword kw">true</span>
|
92
|
-
<span class="ruby-keyword kw">end</span>
|
93
|
-
|
94
|
-
<span class="ruby-identifier">local_feature_glyph</span> = <span class="ruby-keyword kw">nil</span>
|
95
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature_glyph</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'directed_generic'</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">replace_directed_with_undirected</span>
|
96
|
-
<span class="ruby-identifier">local_feature_glyph</span> = <span class="ruby-value str">'generic'</span>
|
97
|
-
<span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">feature_glyph</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'directed_spliced'</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">replace_directed_with_undirected</span>
|
98
|
-
<span class="ruby-identifier">local_feature_glyph</span> = <span class="ruby-value str">'spliced'</span>
|
99
|
-
<span class="ruby-keyword kw">else</span>
|
100
|
-
<span class="ruby-identifier">local_feature_glyph</span> = <span class="ruby-identifier">feature_glyph</span>
|
101
|
-
<span class="ruby-keyword kw">end</span>
|
102
|
-
|
103
|
-
<span class="ruby-comment cmt"># C. And draw the thing.
|
104
|
-
<span class="ruby-identifier">top_pixel_of_feature</span> = <span class="ruby-constant">FEATURE_V_DISTANCE</span> <span class="ruby-operator">+</span> (<span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_V_DISTANCE</span>)<span class="ruby-operator">*</span><span class="ruby-identifier">row</span>
|
105
|
-
<span class="ruby-identifier">bottom_pixel_of_feature</span> = <span class="ruby-identifier">top_pixel_of_feature</span> <span class="ruby-operator">+</span> <span class="ruby-constant">FEATURE_HEIGHT</span>
|
106
|
-
|
107
|
-
<span class="ruby-keyword kw">case</span> <span class="ruby-identifier">local_feature_glyph</span>
|
108
|
-
<span class="ruby-comment cmt"># triangles are typical for features which have a 1 bp position (start == stop)
|
109
|
-
<span class="ruby-keyword kw">when</span> <span class="ruby-value str">'triangle'</span>
|
110
|
-
<span class="ruby-identifier">raise</span> <span class="ruby-value str">"Start and stop are not the same (necessary if you want triangle glyphs)"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">start</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">stop</span>
|
111
|
-
|
112
|
-
<span class="ruby-comment cmt"># Need to get this for the imagemap
|
113
|
-
<span class="ruby-identifier">left_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-value">3</span>
|
114
|
-
<span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">+</span> <span class="ruby-value">3</span>
|
115
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">left_pixel_of_feature</span> <span class="ruby-operator">+</span> <span class="ruby-value">3</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
|
116
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-value">-3</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>)
|
117
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-value">6</span>, <span class="ruby-value">0</span>)
|
118
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">close_path</span>.<span class="ruby-identifier">fill</span>
|
119
|
-
|
120
|
-
<span class="ruby-keyword kw">when</span> <span class="ruby-value str">'directed_generic'</span>
|
121
|
-
<span class="ruby-comment cmt"># Need to get this for the imagemap
|
122
|
-
<span class="ruby-identifier">left_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>
|
123
|
-
<span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">-1</span>].<span class="ruby-identifier">stop_pixel</span>
|
124
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">strand</span> <span class="ruby-operator">==</span> <span class="ruby-value">-1</span> <span class="ruby-comment cmt"># Reverse strand
|
125
|
-
<span class="ruby-comment cmt"># Draw main box
|
126
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">left_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">right_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">left_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
|
127
|
-
|
128
|
-
<span class="ruby-comment cmt"># Draw arrow
|
129
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">left_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
|
130
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
131
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
132
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">close_path</span>.<span class="ruby-identifier">fill</span>
|
133
|
-
|
134
|
-
<span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt">#default is forward strand
|
135
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">left_pixel_of_feature</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">right_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">left_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
|
136
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">right_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
|
137
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
138
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
139
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">close_path</span>.<span class="ruby-identifier">fill</span>
|
140
|
-
<span class="ruby-keyword kw">end</span>
|
141
|
-
<span class="ruby-keyword kw">when</span> <span class="ruby-value str">'spliced'</span>
|
142
|
-
<span class="ruby-identifier">gap_starts</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
143
|
-
<span class="ruby-identifier">gap_stops</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
144
|
-
|
145
|
-
<span class="ruby-comment cmt"># Need to get this for the imagemap
|
146
|
-
<span class="ruby-identifier">left_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>
|
147
|
-
<span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">-1</span>].<span class="ruby-identifier">stop_pixel</span>
|
148
|
-
|
149
|
-
<span class="ruby-comment cmt"># First draw the parts
|
150
|
-
<span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span>
|
151
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, (<span class="ruby-identifier">pr</span>.<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>), <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
|
152
|
-
<span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">pr</span>.<span class="ruby-identifier">stop_pixel</span>)
|
153
|
-
<span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>)
|
154
|
-
<span class="ruby-keyword kw">end</span>
|
155
|
-
|
156
|
-
<span class="ruby-comment cmt"># And then draw the connections in the gaps
|
157
|
-
<span class="ruby-comment cmt"># Start with removing the very first start and the very last stop.
|
158
|
-
<span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">sort!</span>.<span class="ruby-identifier">pop</span>
|
159
|
-
<span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">sort!</span>.<span class="ruby-identifier">shift</span>
|
160
|
-
|
161
|
-
<span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">gap_number</span><span class="ruby-operator">|</span>
|
162
|
-
<span class="ruby-identifier">from</span> = <span class="ruby-identifier">gap_starts</span>[<span class="ruby-identifier">gap_number</span>].<span class="ruby-identifier">to_f</span>
|
163
|
-
<span class="ruby-identifier">to</span> = <span class="ruby-identifier">gap_stops</span>[<span class="ruby-identifier">gap_number</span>].<span class="ruby-identifier">to_f</span>
|
164
|
-
<span class="ruby-identifier">middle</span> = <span class="ruby-identifier">from</span> <span class="ruby-operator">+</span> ((<span class="ruby-identifier">to</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">from</span>)<span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
165
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>)
|
166
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">middle</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">7</span>)
|
167
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>)
|
168
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
|
169
|
-
<span class="ruby-keyword kw">end</span>
|
170
|
-
|
171
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">hidden_subfeatures_at_stop</span>
|
172
|
-
<span class="ruby-identifier">from</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">-1</span>].<span class="ruby-identifier">stop_pixel</span>
|
173
|
-
<span class="ruby-identifier">to</span> = <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">width</span>
|
174
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
|
175
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
|
176
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
|
177
|
-
<span class="ruby-keyword kw">end</span>
|
178
|
-
|
179
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">hidden_subfeatures_at_start</span>
|
180
|
-
<span class="ruby-identifier">from</span> = <span class="ruby-value">1</span>
|
181
|
-
<span class="ruby-identifier">to</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>
|
182
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
|
183
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
|
184
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
|
185
|
-
<span class="ruby-keyword kw">end</span>
|
186
|
-
|
187
|
-
<span class="ruby-keyword kw">when</span> <span class="ruby-value str">'directed_spliced'</span>
|
188
|
-
<span class="ruby-identifier">gap_starts</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
189
|
-
<span class="ruby-identifier">gap_stops</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
|
190
|
-
<span class="ruby-comment cmt"># First draw the parts
|
191
|
-
<span class="ruby-identifier">locations</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">location</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">from</span>}
|
192
|
-
|
193
|
-
<span class="ruby-comment cmt"># Need to get this for the imagemap
|
194
|
-
<span class="ruby-identifier">left_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>
|
195
|
-
<span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">-1</span>].<span class="ruby-identifier">stop_pixel</span>
|
196
|
-
|
197
|
-
<span class="ruby-comment cmt"># Start with the one with the arrow
|
198
|
-
<span class="ruby-identifier">pixel_ranges</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}
|
199
|
-
<span class="ruby-identifier">range_with_arrow</span> = <span class="ruby-keyword kw">nil</span>
|
200
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">strand</span> <span class="ruby-operator">==</span> <span class="ruby-value">-1</span> <span class="ruby-comment cmt"># reverse strand => box with arrow is first one
|
201
|
-
<span class="ruby-identifier">range_with_arrow</span> = <span class="ruby-identifier">pixel_ranges</span>.<span class="ruby-identifier">shift</span>
|
202
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>((<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span>)<span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
|
203
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span><span class="ruby-operator">+</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
|
204
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
205
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
206
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">close_path</span>.<span class="ruby-identifier">fill</span>
|
207
|
-
<span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt"># forward strand => box with arrow is last one
|
208
|
-
<span class="ruby-identifier">range_with_arrow</span> = <span class="ruby-identifier">pixel_ranges</span>.<span class="ruby-identifier">pop</span>
|
209
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span><span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
|
210
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">stop_pixel</span><span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-identifier">top_pixel_of_feature</span>)
|
211
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
212
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rel_line_to</span>(<span class="ruby-operator">-</span><span class="ruby-constant">FEATURE_ARROW_LENGTH</span>, <span class="ruby-constant">FEATURE_HEIGHT</span><span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
213
|
-
<span class="ruby-keyword kw">end</span>
|
214
|
-
<span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">stop_pixel</span>)
|
215
|
-
<span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">range_with_arrow</span>.<span class="ruby-identifier">start_pixel</span>)
|
216
|
-
|
217
|
-
<span class="ruby-comment cmt"># And then add the others
|
218
|
-
<span class="ruby-identifier">pixel_ranges</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">range</span><span class="ruby-operator">|</span>
|
219
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">range</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, <span class="ruby-identifier">range</span>.<span class="ruby-identifier">stop_pixel</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">range</span>.<span class="ruby-identifier">start_pixel</span>, <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
|
220
|
-
<span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">range</span>.<span class="ruby-identifier">stop_pixel</span>)
|
221
|
-
<span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">range</span>.<span class="ruby-identifier">start_pixel</span>)
|
222
|
-
<span class="ruby-keyword kw">end</span>
|
223
|
-
|
224
|
-
<span class="ruby-comment cmt"># And then draw the connections in the gaps
|
225
|
-
<span class="ruby-comment cmt"># Start with removing the very first start and the very last stop.
|
226
|
-
<span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">sort!</span>.<span class="ruby-identifier">pop</span>
|
227
|
-
<span class="ruby-identifier">gap_stops</span>.<span class="ruby-identifier">sort!</span>.<span class="ruby-identifier">shift</span>
|
228
|
-
|
229
|
-
<span class="ruby-identifier">gap_starts</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">gap_number</span><span class="ruby-operator">|</span>
|
230
|
-
<span class="ruby-identifier">from</span> = <span class="ruby-identifier">gap_starts</span>[<span class="ruby-identifier">gap_number</span>].<span class="ruby-identifier">to_f</span>
|
231
|
-
<span class="ruby-identifier">to</span> = <span class="ruby-identifier">gap_stops</span>[<span class="ruby-identifier">gap_number</span>].<span class="ruby-identifier">to_f</span>
|
232
|
-
<span class="ruby-identifier">middle</span> = <span class="ruby-identifier">from</span> <span class="ruby-operator">+</span> ((<span class="ruby-identifier">to</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">from</span>)<span class="ruby-operator">/</span><span class="ruby-value">2</span>)
|
233
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>)
|
234
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">middle</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">7</span>)
|
235
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">2</span>)
|
236
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
|
237
|
-
<span class="ruby-keyword kw">end</span>
|
238
|
-
|
239
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">hidden_subfeatures_at_stop</span>
|
240
|
-
<span class="ruby-identifier">from</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">-1</span>].<span class="ruby-identifier">stop_pixel</span>
|
241
|
-
<span class="ruby-identifier">to</span> = <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">width</span>
|
242
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
|
243
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
|
244
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
|
245
|
-
<span class="ruby-keyword kw">end</span>
|
246
|
-
|
247
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">hidden_subfeatures_at_start</span>
|
248
|
-
<span class="ruby-identifier">from</span> = <span class="ruby-value">1</span>
|
249
|
-
<span class="ruby-identifier">to</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>.<span class="ruby-identifier">sort_by</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">pr</span><span class="ruby-operator">|</span> <span class="ruby-identifier">pr</span>.<span class="ruby-identifier">start_pixel</span>}[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>
|
250
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">move_to</span>(<span class="ruby-identifier">from</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
|
251
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">line_to</span>(<span class="ruby-identifier">to</span>, <span class="ruby-identifier">top_pixel_of_feature</span><span class="ruby-operator">+</span><span class="ruby-value">5</span>)
|
252
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">stroke</span>
|
253
|
-
<span class="ruby-keyword kw">end</span>
|
254
|
-
|
255
|
-
<span class="ruby-keyword kw">else</span> <span class="ruby-comment cmt">#treat as 'generic'
|
256
|
-
<span class="ruby-identifier">left_pixel_of_feature</span>, <span class="ruby-identifier">right_pixel_of_feature</span> = <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">start_pixel</span>, <span class="ruby-identifier">feature</span>.<span class="ruby-identifier">pixel_range_collection</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">stop_pixel</span>
|
257
|
-
<span class="ruby-identifier">track_drawing</span>.<span class="ruby-identifier">rectangle</span>(<span class="ruby-identifier">left_pixel_of_feature</span>, <span class="ruby-identifier">top_pixel_of_feature</span>, (<span class="ruby-identifier">right_pixel_of_feature</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">left_pixel_of_feature</span>), <span class="ruby-constant">FEATURE_HEIGHT</span>).<span class="ruby-identifier">fill</span>
|
258
|
-
<span class="ruby-keyword kw">end</span>
|
259
|
-
|
260
|
-
<span class="ruby-comment cmt"># And add the region to the image map
|
261
|
-
<span class="ruby-keyword kw">if</span> <span class="ruby-identifier">panel</span>.<span class="ruby-identifier">clickable</span>
|
262
|
-
<span class="ruby-comment cmt"># Comment: we have to add the vertical_offset and TRACK_HEADER_HEIGHT!
|
263
|
-
<span class="ruby-identifier">panel</span>.<span class="ruby-identifier">image_map</span>.<span class="ruby-identifier">elements</span>.<span class="ruby-identifier">push</span>(<span class="ruby-constant">ImageMap</span><span class="ruby-operator">::</span><span class="ruby-constant">ImageMapElement</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">left_pixel_of_feature</span>,
|
264
|
-
<span class="ruby-identifier">top_pixel_of_feature</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">TRACK_HEADER_HEIGHT</span>,
|
265
|
-
<span class="ruby-identifier">right_pixel_of_feature</span>,
|
266
|
-
<span class="ruby-identifier">bottom_pixel_of_feature</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">vertical_offset</span> <span class="ruby-operator">+</span> <span class="ruby-constant">TRACK_HEADER_HEIGHT</span>,
|
267
|
-
<span class="ruby-identifier">feature</span>.<span class="ruby-identifier">link</span>
|
268
|
-
))
|
269
|
-
<span class="ruby-keyword kw">end</span>
|
270
|
-
|
271
|
-
|
272
|
-
<span class="ruby-identifier">feature_drawn</span> = <span class="ruby-keyword kw">true</span>
|
273
|
-
<span class="ruby-keyword kw">end</span>
|
274
|
-
<span class="ruby-keyword kw">end</span>
|
41
|
+
<span class="ruby-identifier">feature</span>.<span class="ruby-identifier">draw</span>(<span class="ruby-identifier">track_drawing</span>)
|
275
42
|
<span class="ruby-keyword kw">end</span>
|
276
43
|
<span class="ruby-keyword kw">end</span>
|
277
44
|
|
278
45
|
<span class="ruby-keyword kw">end</span>
|
279
46
|
|
280
|
-
<span class="ruby-ivar">@
|
47
|
+
<span class="ruby-ivar">@number_of_feature_rows</span> = ( <span class="ruby-ivar">@grid</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> ) <span class="ruby-operator">?</span> <span class="ruby-value">1</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@grid</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">max</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
|
281
48
|
|
282
49
|
<span class="ruby-keyword kw">return</span> <span class="ruby-identifier">panel_drawing</span>
|
283
50
|
<span class="ruby-keyword kw">end</span></pre>
|
@@ -99,6 +99,10 @@ features.
|
|
99
99
|
<h3 class="section-bar">Methods</h3>
|
100
100
|
|
101
101
|
<div class="name-list">
|
102
|
+
<a href="#M000012">arrow</a>
|
103
|
+
<a href="#M000013">connector</a>
|
104
|
+
<a href="#M000014">draw</a>
|
105
|
+
<a href="#M000015">find_row</a>
|
102
106
|
<a href="#M000011">new</a>
|
103
107
|
</div>
|
104
108
|
</div>
|
@@ -272,6 +276,111 @@ strand
|
|
272
276
|
<table>
|
273
277
|
<tr><td valign="top"><b>Returns</b>:</td><td>Bio::Graphics::Track::Feature object
|
274
278
|
|
279
|
+
</td></tr>
|
280
|
+
</table>
|
281
|
+
</div>
|
282
|
+
</div>
|
283
|
+
|
284
|
+
<h3 class="section-bar">Public Instance methods</h3>
|
285
|
+
|
286
|
+
<div id="method-M000012" class="method-detail">
|
287
|
+
<a name="M000012"></a>
|
288
|
+
|
289
|
+
<div class="method-heading">
|
290
|
+
<a href="Feature.src/M000012.html" target="Code" class="method-signature"
|
291
|
+
onclick="popupCode('Feature.src/M000012.html');return false;">
|
292
|
+
<span class="method-name">arrow</span><span class="method-args">(track,direction,x,y,size)</span>
|
293
|
+
</a>
|
294
|
+
</div>
|
295
|
+
|
296
|
+
<div class="method-description">
|
297
|
+
<p>
|
298
|
+
Method to <a href="Feature.html#M000014">draw</a> the arrows of directed
|
299
|
+
glyphs. Not to be used directly, but called by <a
|
300
|
+
href="Feature.html#M000014">Feature#draw</a>.
|
301
|
+
</p>
|
302
|
+
</div>
|
303
|
+
</div>
|
304
|
+
|
305
|
+
<div id="method-M000013" class="method-detail">
|
306
|
+
<a name="M000013"></a>
|
307
|
+
|
308
|
+
<div class="method-heading">
|
309
|
+
<a href="Feature.src/M000013.html" target="Code" class="method-signature"
|
310
|
+
onclick="popupCode('Feature.src/M000013.html');return false;">
|
311
|
+
<span class="method-name">connector</span><span class="method-args">(track,from,to,top, color)</span>
|
312
|
+
</a>
|
313
|
+
</div>
|
314
|
+
|
315
|
+
<div class="method-description">
|
316
|
+
<p>
|
317
|
+
Method to <a href="Feature.html#M000014">draw</a> the connections (introns)
|
318
|
+
of spliced glyphs. Not to be used directly, but called by <a
|
319
|
+
href="Feature.html#M000014">Feature#draw</a>.
|
320
|
+
</p>
|
321
|
+
</div>
|
322
|
+
</div>
|
323
|
+
|
324
|
+
<div id="method-M000014" class="method-detail">
|
325
|
+
<a name="M000014"></a>
|
326
|
+
|
327
|
+
<div class="method-heading">
|
328
|
+
<a href="Feature.src/M000014.html" target="Code" class="method-signature"
|
329
|
+
onclick="popupCode('Feature.src/M000014.html');return false;">
|
330
|
+
<span class="method-name">draw</span><span class="method-args">(track_drawing)</span>
|
331
|
+
</a>
|
332
|
+
</div>
|
333
|
+
|
334
|
+
<div class="method-description">
|
335
|
+
<p>
|
336
|
+
Adds the feature to the track cairo context. This method should not be used
|
337
|
+
directly by the user, but is called by <a
|
338
|
+
href="../Track.html#M000010">Bio::Graphics::Panel::Track.draw</a>
|
339
|
+
</p>
|
340
|
+
<hr size="1"></hr><p>
|
341
|
+
<b>Arguments</b>:
|
342
|
+
</p>
|
343
|
+
<ul>
|
344
|
+
<li><em>trackdrawing</em> (required) :: the track cairo object
|
345
|
+
|
346
|
+
</li>
|
347
|
+
<li><em>row</em> (required) :: row within the track that this feature has
|
348
|
+
|
349
|
+
<pre>
|
350
|
+
been bumped to
|
351
|
+
</pre>
|
352
|
+
</li>
|
353
|
+
</ul>
|
354
|
+
<table>
|
355
|
+
<tr><td valign="top"><b>Returns</b>:</td><td>FIXME: I don‘t know
|
356
|
+
|
357
|
+
</td></tr>
|
358
|
+
</table>
|
359
|
+
</div>
|
360
|
+
</div>
|
361
|
+
|
362
|
+
<div id="method-M000015" class="method-detail">
|
363
|
+
<a name="M000015"></a>
|
364
|
+
|
365
|
+
<div class="method-heading">
|
366
|
+
<a href="Feature.src/M000015.html" target="Code" class="method-signature"
|
367
|
+
onclick="popupCode('Feature.src/M000015.html');return false;">
|
368
|
+
<span class="method-name">find_row</span><span class="method-args">()</span>
|
369
|
+
</a>
|
370
|
+
</div>
|
371
|
+
|
372
|
+
<div class="method-description">
|
373
|
+
<p>
|
374
|
+
Calculates the row within the track where this feature should be drawn.
|
375
|
+
This method should not be used directly by the user, but is called by <a
|
376
|
+
href="Feature.html#M000014">Bio::Graphics::Panel::Track::Feature.draw</a>
|
377
|
+
</p>
|
378
|
+
<hr size="1"></hr><table>
|
379
|
+
<tr><td valign="top"><b>Arguments</b>:</td><td>none
|
380
|
+
|
381
|
+
</td></tr>
|
382
|
+
<tr><td valign="top"><b>Returns</b>:</td><td>row number
|
383
|
+
|
275
384
|
</td></tr>
|
276
385
|
</table>
|
277
386
|
</div>
|