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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d221bddb4c3b9dbdf46348691daac803a5194520580bb4ee0068aa1ef3aa24d
4
- data.tar.gz: 25d393d1683f63fa60857831f16209dee5105a897ca96fd4dbe86e9fb02450a6
3
+ metadata.gz: b0b6eae68b2dc36f40e411ff360d69854c620a8361df085b4e72644ea9d9656c
4
+ data.tar.gz: 30df69dc58078253b892ca61498c15149286e54ba3488b56acfbc86ee8e60b69
5
5
  SHA512:
6
- metadata.gz: fc9e107a70200bd51ef5170743fc16f6216af003bfd4f72cfa02b12ff2d1d866365fd86d7c3daeae3cd922d0f882f1cc1cf75b24e4e3dcc8f3a2b63c901d29b8
7
- data.tar.gz: d1a255347549db953a31fa9f8898b1b5551e889599600b3a525376a04a6360cc5dcf5912a3deca77e3a443093a76393d6eab08d4990d8ec870575413ddc4019e
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
+ }