Class: NumRu::GribVar
- Inherits:
-
Object
- Object
- NumRu::GribVar
- Defined in:
- lib/numru/grib/grib.rb,
ext/grib.c
Overview
class GribMessage
Constant Summary collapse
- Day0 =
DateTime.new(1900)
- MAXNDIM =
lon, lat, lev, t, step, timeInterval, ensemble
7
Instance Method Summary collapse
- #att(key) ⇒ Object
- #att_names ⇒ Object
- #def_dim(name, index) ⇒ Object
- #dim(index) ⇒ Object
- #dim_names ⇒ Object
-
#file ⇒ Object
NumRu::GribVar#file() -> NumRu::Grib.
- #get(*indices) ⇒ Object (also: #[], #val)
-
#get_messages ⇒ Object
NumRu::GribVar#get_messages() -> Array.
- #inspect ⇒ Object
- #missing_value ⇒ Object
-
#name ⇒ Object
NumRu::GribVar#name() -> String.
- #put_att(key, val) ⇒ Object (also: #set_att)
- #rank ⇒ Object (also: #ndims)
- #shape ⇒ Object
- #total ⇒ Object
- #typecode ⇒ Object
Instance Method Details
#att(key) ⇒ Object
177 178 179 |
# File 'lib/numru/grib/grib.rb', line 177 def att(key) @attr[key] end |
#att_names ⇒ Object
180 181 182 |
# File 'lib/numru/grib/grib.rb', line 180 def att_names @attr.keys end |
#def_dim(name, index) ⇒ Object
164 165 166 167 168 169 170 171 172 |
# File 'lib/numru/grib/grib.rb', line 164 def def_dim(name,index) d = ::NumRu::GribDim.new(self,name) if index == -1 @dims.push(d) else @dims[index] = d end return d end |
#dim(index) ⇒ Object
159 160 161 162 163 |
# File 'lib/numru/grib/grib.rb', line 159 def dim(index) index = dim_names.index(index) if String===index return nil if index.nil? @dims[index] end |
#dim_names ⇒ Object
153 154 155 |
# File 'lib/numru/grib/grib.rb', line 153 def dim_names @dims.collect{|d| d.name} end |
#file ⇒ Object
NumRu::GribVar#file() -> NumRu::Grib
537 538 539 540 541 542 543 |
# File 'ext/grib.c', line 537
static VALUE
rg_var_file(VALUE self)
{
rg_var *var;
Data_Get_Struct(self, rg_var, var);
return var->file;
}
|
#get(*indices) ⇒ Object Also known as: [], val
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 |
# File 'lib/numru/grib/grib.rb', line 193 def get(*indices) sha = shape mask = nil first = Array.new(rank-@xy_dims,0) if indices.length != 0 if indices.include?(false) sha2 = sha.dup sha2.delete(false) raise ArgumentError, 'multiple "false" in indices' if sha.length - sha2.length > 1 indices[indices.index(false)] = [true]*(sha.length-indices.length+1) indices.flatten! end rank.times{|n| ind = indices[n] case ind when true indices[n] = 0..sha[n]-1 when Fixnum sha[n] = 1 when Range f = ind.first e = ind.end e = sha[n]-1 if e==-1 e -= 1 if ind.exclude_end? sha[n] = e-f+1 indices[n] = f..e else raise "invalid indices" end } if rank > @xy_dims mask = NArray.byte(*shape[@xy_dims..-1]) mask[*indices[@xy_dims..-1]] = 1 (rank-@xy_dims).times do |i| ind = indices[@xy_dims+i] case ind when Fixnum first[i] = ind when Range first[i] = ind.first first[i] += shape[@xy_dims+i] if first[i] < 0 end end end end shape2 = shape.dup sha2 = sha.dup @del_dims.each do |i| shape2.insert(i,1) sha2.insert(i,1) first.insert(i-@xy_dims,0) end mask.reshape!(*shape2[@xy_dims..-1]) if mask value = missing_value ? NArrayMiss.sfloat(*sha2) : NArray.sfloat(*sha2) index = Array.new(MAXNDIM-2) @msgs.each_with_index do |msg,i| idx = @idx[i] next if (mask && mask[*idx]==0) val = msg.get_value("values") if @xy_dims > 0 val.reshape!(*shape[0...@xy_dims]) # val = msg.get_data[2].reshape!(*shape[0...@xy_dims]) unless indices.length==0 || indices[0...@xy_dims].inject(true){|t,v| t &&= v==true} val = val.slice(*indices[0...@xy_dims]) end end (MAXNDIM-2).times do |i| index[i] = idx[i]-first[i] end value[*(Array.new(@xy_dims,true)+index)] = val end ns = sha.length ns.times do |ii| i = ns-ii-1 sha.delete_at(i) if indices[i].kind_of?(Fixnum) end value.reshape!(*sha) if missing_value value.set_mask value.get_array!.ne(missing_value) end return value end |
#get_messages ⇒ Object
NumRu::GribVar#get_messages() -> Array
559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 |
# File 'ext/grib.c', line 559
static VALUE
rg_var_get_messages(VALUE self)
{
rg_var *var;
Data_Get_Struct(self, rg_var, var);
var_list *var_list = var->var_list;
size_t len = var_list->ary->len;
VALUE ary = rb_ary_new2(len);
rg_message *message;
VALUE rmessage;
int i;
for (i=0; i<len; i++) {
rmessage = message_alloc(cMessage);
Data_Get_Struct(rmessage, rg_message, message);
message->file = self;
message->handle = get_msg(var_list->ary, i);
rb_ary_store(ary, i, rmessage);
}
return ary;
}
|
#inspect ⇒ Object
278 279 280 |
# File 'lib/numru/grib/grib.rb', line 278 def inspect "GribVar: #{name} in #{file.path}, [#{shape.join(",")}]" end |
#missing_value ⇒ Object
190 191 192 |
# File 'lib/numru/grib/grib.rb', line 190 def missing_value @msgs[0].missing_value end |
#name ⇒ Object
NumRu::GribVar#name() -> String
548 549 550 551 552 553 554 |
# File 'ext/grib.c', line 548
static VALUE
rg_var_name(VALUE self)
{
rg_var *var;
Data_Get_Struct(self, rg_var, var);
return rb_str_new2(var->var_list->vname);
}
|
#put_att(key, val) ⇒ Object Also known as: set_att
173 174 175 |
# File 'lib/numru/grib/grib.rb', line 173 def put_att(key,val) @attr[key] = val end |
#rank ⇒ Object Also known as: ndims
146 147 148 |
# File 'lib/numru/grib/grib.rb', line 146 def rank @dims.length end |
#shape ⇒ Object
156 157 158 |
# File 'lib/numru/grib/grib.rb', line 156 def shape @dims.collect{|d| d.length} end |
#total ⇒ Object
150 151 152 |
# File 'lib/numru/grib/grib.rb', line 150 def total @dims.inject(1){|t,d| t*d.length} end |
#typecode ⇒ Object
183 184 185 186 187 188 189 |
# File 'lib/numru/grib/grib.rb', line 183 def typecode if missing_value NArrayMiss::FLOAT else NArray::FLOAT end end |