ruby-grads 1.0.0 → 1.0.7
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.
- 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
|
+
}
|