Mercurial > repos > lsong10 > psiclass
comparison PsiCLASS-1.0.2/samtools-0.1.19/misc/r2plot.lua @ 0:903fc43d6227 draft default tip
Uploaded
author | lsong10 |
---|---|
date | Fri, 26 Mar 2021 16:52:45 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:903fc43d6227 |
---|---|
1 #!/usr/bin/env luajit | |
2 | |
3 function string:split(sep, n) | |
4 local a, start = {}, 1; | |
5 sep = sep or "%s+"; | |
6 repeat | |
7 local b, e = self:find(sep, start); | |
8 if b == nil then | |
9 table.insert(a, self:sub(start)); | |
10 break | |
11 end | |
12 a[#a+1] = self:sub(start, b - 1); | |
13 start = e + 1; | |
14 if n and #a == n then | |
15 table.insert(a, self:sub(start)); | |
16 break | |
17 end | |
18 until start > #self; | |
19 return a; | |
20 end | |
21 | |
22 function io.xopen(fn, mode) | |
23 mode = mode or 'r'; | |
24 if fn == nil then return io.stdin; | |
25 elseif fn == '-' then return (mode == 'r' and io.stdin) or io.stdout; | |
26 elseif fn:sub(-3) == '.gz' then return (mode == 'r' and io.popen('gzip -dc ' .. fn, 'r')) or io.popen('gzip > ' .. fn, 'w'); | |
27 elseif fn:sub(-4) == '.bz2' then return (mode == 'r' and io.popen('bzip2 -dc ' .. fn, 'r')) or io.popen('bgzip2 > ' .. fn, 'w'); | |
28 else return io.open(fn, mode) end | |
29 end | |
30 | |
31 local eps = {}; | |
32 | |
33 function eps.func(fp) | |
34 fp = fp or io.stdout | |
35 fp:write("/C { dup 255 and 255 div exch dup -8 bitshift 255 and 255 div 3 1 roll -16 bitshift 255 and 255 div 3 1 roll setrgbcolor } bind def\n") | |
36 fp:write("/L { 4 2 roll moveto lineto } bind def\n") | |
37 fp:write("/LX { dup 4 -1 roll exch moveto lineto } bind def\n") | |
38 fp:write("/LY { dup 4 -1 roll moveto exch lineto } bind def\n") | |
39 fp:write("/LS { 3 1 roll moveto show } bind def\n") | |
40 fp:write("/RS { dup stringwidth pop 4 -1 roll exch sub 3 -1 roll moveto show } bind def\n") | |
41 fp:write("/B { 4 copy 3 1 roll exch 6 2 roll 8 -2 roll moveto lineto lineto lineto closepath } bind def\n") | |
42 end | |
43 | |
44 function eps.font(ft, size, fp) | |
45 fp = fp or io.stdout | |
46 fp:write(string.format('/FS %d def\n', size)); | |
47 fp:write('/FS4 FS 4 div def\n'); | |
48 fp:write('/' .. ft .. ' findfont FS scalefont setfont\n'); | |
49 end | |
50 | |
51 local scale = 8; | |
52 | |
53 if #arg == 0 then | |
54 print("Usage: r2plot.lua <in.txt>"); | |
55 os.exit(1) | |
56 end | |
57 | |
58 local fp = io.xopen(arg[1]); | |
59 local n = tonumber(fp:read()); | |
60 | |
61 print('%!PS-Adobe-3.0 EPSF-3.0'); | |
62 print('%%' .. string.format('BoundingBox: -%d -%d %.3f %.3f\n', 10*scale, scale, (n+1)*scale, (n+1)*scale)); | |
63 print(string.format('%.3f setlinewidth', scale)); | |
64 print(string.format('/plot { setgray moveto 0 %d rlineto } def', scale)); | |
65 print(string.format('/plothalf { setgray moveto 0 %.2f rlineto } def', scale/2)); | |
66 eps.func(); | |
67 eps.font('Helvetica', scale-1); | |
68 | |
69 local i = 1; | |
70 for l in fp:lines() do | |
71 local t = l:split('\t'); | |
72 print(string.format("%d %d FS4 add (%s) RS", (i-1)*scale-2, (i-1)*scale, t[1])); | |
73 for j = 2, #t do | |
74 if tonumber(t[j]) > 0.01 then | |
75 print(string.format('%.2f %.2f %.2f plot stroke', (i-1+.5)*scale, (j-2)*scale, 1.-t[j])); | |
76 end | |
77 end | |
78 i = i + 1; | |
79 end | |
80 for j = 1, 21 do | |
81 print(string.format('%.2f %.2f %.2f plothalf stroke', -8*scale, (j-1) * scale/2, 1.-(j-1)/20)); | |
82 end | |
83 print('showpage'); |