ruby-grads 1.0.0 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +67 -1
- data/Rakefile +14 -0
- data/bin/ncdef2ctl +107 -0
- data/lib/grads/binary.rb +735 -0
- data/lib/grads/command.rb +428 -11
- data/lib/grads/gridded.rb +83 -14
- data/lib/grads/lib/axis_xtime.rb +217 -0
- data/lib/grads/lib/makecpt.rb +24 -54
- data/lib/grads.rb +1 -0
- data/ruby-grads.gemspec +3 -3
- data/ruby-grads.gemspec~ +23 -0
- metadata +10 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0b6eae68b2dc36f40e411ff360d69854c620a8361df085b4e72644ea9d9656c
|
4
|
+
data.tar.gz: 30df69dc58078253b892ca61498c15149286e54ba3488b56acfbc86ee8e60b69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a96c6334bc2f1533563f8cb629e98e026b30ebc206ac32d9e1ebba7f59613b91a4bfc725443e4f69f8eb3527057d8e6f2a0377359d9013f7334b33e0be0af439
|
7
|
+
data.tar.gz: 926e01734a641fc5184100f2aaff85dec01295f24a133a90bab23b8f870829eb2c2fe2ae816215400219b22a838a69223028fb578a3f15e9b1ec32fc8708c125
|
data/README.md
CHANGED
@@ -15,7 +15,6 @@ Execute grads command sequence
|
|
15
15
|
GrADS#exec filename
|
16
16
|
GrADS#exec_string text
|
17
17
|
|
18
|
-
|
19
18
|
### CArray -> GrADS variable
|
20
19
|
|
21
20
|
Write block as GrADS::Gridded::Writer definition
|
@@ -27,5 +26,72 @@ Write block as GrADS::Gridded::Writer definition
|
|
27
26
|
|
28
27
|
GrADS#save_image(filename, size="640", dpi=300)
|
29
28
|
|
29
|
+
### parea, vpage
|
30
|
+
|
31
|
+
parea(x1, x2, y1, y2) { |area|
|
32
|
+
|
33
|
+
}
|
34
|
+
|
35
|
+
vpage(x1, x2, y1, y2) { |area|
|
36
|
+
|
37
|
+
}
|
38
|
+
|
39
|
+
### plot
|
40
|
+
|
41
|
+
plot (expr, type) {
|
42
|
+
... CONFIG ...
|
43
|
+
}
|
44
|
+
|
45
|
+
### axis
|
46
|
+
|
47
|
+
axis (dummy_expr) {
|
48
|
+
... CONFIG ...
|
49
|
+
}
|
50
|
+
|
51
|
+
#### axis_xtime
|
52
|
+
|
53
|
+
require "grads/lib/axis_xtime"
|
54
|
+
axis_xtime (dummy_expr, OPTIONS) {
|
55
|
+
... CONFIG__
|
56
|
+
}
|
57
|
+
|
58
|
+
OPTIONS:
|
59
|
+
offset: TIME OFFSET in seconds
|
60
|
+
skip: TIME axis interval to skip labels
|
61
|
+
|
62
|
+
#### time_skip
|
63
|
+
|
64
|
+
Use with axis_xtime to calculate skip for x-time in vector plot.
|
65
|
+
|
66
|
+
skp = time_skip()
|
67
|
+
plot("skip(u,1,#{skp});v", :vector) {
|
68
|
+
...
|
69
|
+
}
|
70
|
+
|
71
|
+
### axis label
|
72
|
+
|
73
|
+
draw_ylabel(text, area: area, color: 1, just: "bc", thickness: 3, rot 0, offset: STRING, side: "l")
|
74
|
+
draw_xlabel(text, area: area, color: 1, just: "bc", thickness: 3, rot: 0, offset: STRING, side: "b")
|
75
|
+
|
76
|
+
### COLOR NAMES
|
77
|
+
|
78
|
+
COLOR(COLOR_NAME)
|
30
79
|
|
80
|
+
"background" => 0,
|
81
|
+
"foregraound" => 1,
|
82
|
+
"red" => 2,
|
83
|
+
"green" => 3,
|
84
|
+
"dark blue" => 4,
|
85
|
+
"light blue" => 5,
|
86
|
+
"magenta" => 6,
|
87
|
+
"yellow" => 7,
|
88
|
+
"orange" => 8,
|
89
|
+
"purple" => 9,
|
90
|
+
"yellow green" => 10,
|
91
|
+
"medium blue" => 11,
|
92
|
+
"dark yellow" => 12,
|
93
|
+
"aqua" => 13,
|
94
|
+
"dark purple" => 14,
|
95
|
+
"gray" => 15,
|
96
|
+
|
31
97
|
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
GEMSPEC = "ruby-grads.gemspec"
|
3
|
+
|
4
|
+
# gem install #{spec.full_name}.gem -- --with-gnuplotting-palette
|
5
|
+
|
6
|
+
task :install do
|
7
|
+
spec = eval File.read(GEMSPEC)
|
8
|
+
system %{
|
9
|
+
gem build #{GEMSPEC}; gem install --no-document #{spec.full_name}.gem
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'rspec/core/rake_task'
|
14
|
+
RSpec::Core::RakeTask.new
|
data/bin/ncdef2ctl
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "grads"
|
4
|
+
require "stringio"
|
5
|
+
|
6
|
+
def scan_vars (vars)
|
7
|
+
items = {:namelist=>[]}
|
8
|
+
nvars = nil
|
9
|
+
vars.each_line do |line|
|
10
|
+
case line
|
11
|
+
when /\A\s*\*/, /\A\s*\Z/
|
12
|
+
next
|
13
|
+
when /\A\s*vars\s+(\d+)/i
|
14
|
+
nvars = $1.to_i
|
15
|
+
when /\A\s*endvars/i
|
16
|
+
break
|
17
|
+
when /\A\s*(\w+)\s*(.*)\Z/
|
18
|
+
name = $1
|
19
|
+
items[:namelist].push(name)
|
20
|
+
items[name] = line
|
21
|
+
end
|
22
|
+
end
|
23
|
+
if items[:namelist].size != nvars
|
24
|
+
raise "invalid vars number"
|
25
|
+
end
|
26
|
+
return items
|
27
|
+
end
|
28
|
+
|
29
|
+
def scan_control_file (ctltxt)
|
30
|
+
io = StringIO.new(ctltxt)
|
31
|
+
items = {}
|
32
|
+
buffer = ""
|
33
|
+
while line = io.gets
|
34
|
+
case line
|
35
|
+
when /\A\s*\*/, /\A\s*\Z/
|
36
|
+
next
|
37
|
+
when /\A\s*(dtype|dset|title|undef|options|pdef|xdef|ydef|zdef|tdef|vectorpairs)\s*(.*)\Z/i
|
38
|
+
name = $1.downcase
|
39
|
+
if items[name]
|
40
|
+
items[name] = [items[name]]
|
41
|
+
items[name] << $2.rstrip
|
42
|
+
buffer = items[name].last
|
43
|
+
else
|
44
|
+
items[name] = $2.rstrip
|
45
|
+
buffer = items[name]
|
46
|
+
end
|
47
|
+
when /\A\s*(chsub|fileheader|theader|tailerbyts|xyheader)\s*(.*)\Z/i
|
48
|
+
raise "#{$1} entry is not supported, sorry"
|
49
|
+
when /\A\s*vars/
|
50
|
+
vars = scan_vars(line + io.read)
|
51
|
+
break
|
52
|
+
else
|
53
|
+
line = line.chomp.sub(/\\\z/,'').rstrip
|
54
|
+
buffer.replace(buffer + " " + line)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
return items, vars
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
def levels2linear (axis, line)
|
62
|
+
list = line.split(/\s+/)
|
63
|
+
num = list.shift.to_i
|
64
|
+
type = list.shift
|
65
|
+
data = list
|
66
|
+
case type
|
67
|
+
when "levels"
|
68
|
+
case axis
|
69
|
+
when "tdef"
|
70
|
+
return axis + " " + line
|
71
|
+
else
|
72
|
+
data = data.to_ca.double
|
73
|
+
diff = (data[1..-1]-data[0..-2]).mean
|
74
|
+
return format("%s %i %s %f %f", axis, num, "linear", data[0], diff)
|
75
|
+
end
|
76
|
+
when "linear"
|
77
|
+
return axis + " " + line
|
78
|
+
else
|
79
|
+
raise "invalid #{defname} definition"
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
GrADS.start("grads -b") {
|
85
|
+
|
86
|
+
sdfopen(ARGV[0])
|
87
|
+
|
88
|
+
ctl = query(:ctlinfo)
|
89
|
+
|
90
|
+
header, var = scan_control_file(ctl)
|
91
|
+
|
92
|
+
header.keys.each do |key|
|
93
|
+
case key
|
94
|
+
when "xdef", "ydef", "zdef", "tdef"
|
95
|
+
puts levels2linear(key, header[key])
|
96
|
+
else
|
97
|
+
puts "#{key} #{header[key]}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
puts "vars #{var[:namelist].size}"
|
102
|
+
var[:namelist].each do |name|
|
103
|
+
puts var[name]
|
104
|
+
end
|
105
|
+
puts "endvars"
|
106
|
+
|
107
|
+
}
|