File: run2tex.rb

package info (click to toggle)
genometools 1.6.6%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 50,576 kB
  • sloc: ansic: 271,876; ruby: 29,930; python: 5,106; sh: 3,083; makefile: 1,213; perl: 219; pascal: 159; haskell: 37; sed: 5
file content (165 lines) | stat: -rwxr-xr-x 3,129 bytes parent folder | download | duplicates (9)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/usr/bin/env ruby

def usage()
  STDERR.puts "Usage: #{$0} space|time <runfile>"
  exit 1
end

def puthline
  puts "\\\\\\hline"
end

def makehashkey(filename,parms)
  return filename + ' ' + parms
end

def checkvalues(filename,parms)
  if filename == ''
    STDERR.puts "filename is undefined"
    exit 1
  end
  if parms == ''
    STDERR.puts "parms is undefined"
    exit 1
  end
end

def orderedkeys(ht)
  return ht.keys.sort
end

def makebestlist(ftab,ptab,tab)
  bestlist = Hash.new()
  ftab.each_key do |filename|
    tl = []
    ptab.each_key do |parms|
      t = tab[makehashkey(filename,parms)]
      if t
        tl.push t
      end
    end
    bestlist[filename] = tl.min
  end
  return bestlist
end

def maketab(filenametab,parmstab,datestring,valuehash)
  numoffiles=filenametab.length
  puts "\\begin{sidewaystable}"
  puts "\\begin{center}"
  puts "\\begin{small}"
  puts "\\begin{tabular}{|l|*{#{numoffiles}}{r|}}\\hline"
  puts "parameter & \\multicolumn{#{numoffiles}}{c|}{files}"
  puthline
  orderedkeys(filenametab).each do |filename|
    print "&#{filename}"
  end
  puthline
  bestlist=makebestlist(filenametab,parmstab,valuehash)
  orderedkeys(parmstab).each do |parms|
    print "\\texttt{#{parms}}"
    orderedkeys(filenametab).each do |filename|
	print "&"
	v = valuehash[makehashkey(filename,parms)]
	if v
	  if v == bestlist[filename]
	    printf("\\textbf{%.2f}",v)
	  else
	    printf("%.2f",v)
	  end
	end
    end
    puthline
  end
  print <<'TEXT'
  \end{tabular}
  \end{small}
  \end{center}
TEXT
  puts "\\caption{run at #{datestring}}"
  puts "\\end{sidewaystable}"
end

if ARGV.length != 2
  usage()
end

showtime=false
showspace=false
if ARGV[0] == 'time'
  settime=true
elsif ARGV[0] == 'space'
  setspace=true
elsif ARGV[0] == 'time+space'
  settime=true
  setspace=true
else
  usage()
end
fname=ARGV[1]

begin
  f = File.open(fname,"r")
rescue => err
 STDERR.print "#{$0}: cannot open file \"#{fname}\": #{err}\n"
 exit 1
end

filenametab = Hash.new()
parmstab = Hash.new()
runtimes = Hash.new()
spacereq = Hash.new()
datestring=''

parms=''
filename=''
f.each_line do |line|
  m = line.match(/# RUN ([a-zA-Z0-9\.:]*) (.*)/)
  if m
    filename = m[1]
    filenametab[filename] = true
    parms = m[2]
    if parms == ''
      parms='nothing'
    end
    parmstab[parms] = true
  else
    t = line.match(/# TIME overall ([0-9\.]*)/)
    if t
      checkvalues(filename,parms)
      timeresult=t[1].to_f
      runtimes[makehashkey(filename,parms)] = timeresult
    else
      s = line.match(/# combined space peak in megabytes: ([0-9\.]*)/)
      if s
        checkvalues(filename,parms)
        space=s[1]
        spacereq[makehashkey(filename,parms)] = space.to_f
      else
        d = line.match(/# DATE ([0-9\-\:]*)/)
        if d
          datestring=d[1]
        end
      end
    end
  end
end

print <<'TEXT'
\documentclass[11pt]{article}
\usepackage{rotating}
\usepackage{a4wide}
\begin{document}
TEXT

if settime
  maketab(filenametab,parmstab,datestring,runtimes)
end

if setspace
  maketab(filenametab,parmstab,datestring,spacereq)
end

print <<'TEXT'
\end{document}
TEXT