forked from genometools/genometools-scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gt-bequeath
executable file
·47 lines (40 loc) · 1.02 KB
/
gt-bequeath
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env gt
function usage()
io.stderr:write("Adds a given parent attribute to all child features.\n")
io.stderr:write(string.format("Usage: %s <attribute> < <GFF>\n" , arg[0]))
os.exit(1)
end
if #arg < 1 then
usage()
end
function apply_to_child(root, attr, value)
for v in root:direct_children() do
local a = v:get_attribute(attr)
if a then
value = a
end
if value and not a then
v:set_attribute(attr, value)
end
apply_to_child(v, attr, value)
end
end
add_child_visitor = gt.custom_visitor_new()
function add_child_visitor:visit_feature(fn)
apply_to_child(fn, arg[1], fn:get_attribute(arg[1]))
end
vis_stream = gt.custom_stream_new_unsorted()
function vis_stream:next_tree()
local node = self.instream:next_tree()
if node then
node:accept(add_child_visitor)
end
return node
end
in_stream = gt.gff3_in_stream_new_sorted()
vis_stream.instream = in_stream
out_stream = gt.gff3_out_stream_new(vis_stream)
local gn = out_stream:next_tree()
while (gn) do
gn = out_stream:next_tree()
end