Class | NumRu::HE5SwField |
In: |
lib/hdfeos5.rb
|
Parent: | Object |
HE5SwField クラスに関して
MissValAtts | = | ["MissingValue","_FillValue"] |
# File lib/hdfeos5.rb, line 343 343: def create(file, sname,fldname) 344: if(file.is_a?(String)) 345: swid = HE5Sw.create(file,sname) 346: elsif(!file.is_a?(HE5)) 347: raise TypeError, 348: "1st arg must be a HDF-EOS5 (file object) or a String (path)" 349: end 350: file.var(fldname) 351: end
# File lib/hdfeos5.rb, line 353 353: def open(file, sname, fldname) 354: if(file.is_a?(String)) 355: swid = HE5Sw.open(file, sname) 356: elsif(!file.is_a?(HE5)) 357: raise TypeError, 358: "1st arg must be a HDF-EOS5 (file object) or a String (path)" 359: end 360: swid.var(fldname) 361: end
# File lib/hdfeos5.rb, line 665 665: def [](*a) 666: if a.length == 0 667: return self.get 668: end 669: a = __rubber_expansion(a) 670: first = Array.new 671: last = Array.new 672: stride = Array.new 673: set_stride = false 674: a.each{|i| 675: if(i.is_a?(Fixnum)) 676: first.push(i) 677: last.push(i) 678: stride.push(1) 679: elsif(i.is_a?(Range)) 680: first.push(i.first) 681: last.push(i.exclude_end? ? i.last-1 : i.last) 682: stride.push(1) 683: elsif(i.is_a?(Hash)) 684: r = (i.to_a[0])[0] 685: s = (i.to_a[0])[1] 686: if ( !( r.is_a?(Range) ) || ! ( s.is_a?(Integer) ) ) 687: raise TypeError, "Hash argument must be {a_Range, step}" 688: end 689: first.push(r.first) 690: last.push(r.exclude_end? ? r.last-1 : r.last) 691: stride.push(s) 692: set_stride = true 693: elsif(i.is_a?(TrueClass)) 694: first.push(0) 695: last.push(-1) 696: stride.push(1) 697: elsif( i.is_a?(Array) || i.is_a?(NArray)) 698: a_new = a.dup 699: at = a.index(i) 700: i = NArray.to_na(i) if i.is_a?(Array) 701: for n in 0..i.length-1 702: a_new[at] = i[n]..i[n] 703: na_tmp = self[*a_new] 704: if n==0 then 705: k = at 706: if at > 0 707: a[0..at-1].each{|x| if x.is_a?(Fixnum) then k -= 1 end} 708: end 709: shape_tmp = na_tmp.shape 710: shape_tmp[k] = i.length 711: na = na_tmp.class.new(na_tmp.typecode,*shape_tmp) 712: index_tmp = Array.new(shape_tmp.length,true) 713: end 714: index_tmp[k] = n..n 715: na[*index_tmp] = na_tmp 716: end 717: return na 718: else 719: raise TypeError, "argument must be Fixnum, Range, Hash, TrueClass, Array, or NArray" 720: end 721: } 722: 723: if(set_stride) 724: na = self.get({"start"=>first, "end"=>last, "stride"=>stride}) 725: else 726: na = self.get({"start"=>first, "end"=>last}) 727: end 728: shape = na.shape 729: (a.length-1).downto(0){ |i| 730: shape.delete_at(i) if a[i].is_a?(Fixnum) 731: } 732: na.reshape!( *shape ) 733: na 734: end
# File lib/hdfeos5.rb, line 736 736: def []=(*a) 737: val = a.pop 738: a = __rubber_expansion(a) 739: first = Array.new 740: last = Array.new 741: stride = Array.new 742: set_stride = false 743: a.each{|i| 744: if(i.is_a?(Fixnum)) 745: first.push(i) 746: last.push(i) 747: stride.push(1) 748: elsif(i.is_a?(Range)) 749: first.push(i.first) 750: last.push(i.exclude_end? ? i.last-1 : i.last) 751: stride.push(1) 752: elsif(i.is_a?(Hash)) 753: r = (i.to_a[0])[0] 754: s = (i.to_a[0])[1] 755: if ( !( r.is_a?(Range) ) || ! ( s.is_a?(Integer) ) ) 756: raise ArgumentError, "Hash argument must be {first..last, step}" 757: end 758: first.push(r.first) 759: last.push(r.exclude_end? ? r.last-1 : r.last) 760: stride.push(s) 761: set_stride = true 762: elsif(i.is_a?(TrueClass)) 763: first.push(0) 764: last.push(-1) 765: stride.push(1) 766: elsif(i.is_a?(Array) || i.is_a?(NArray)) 767: a_new = a.dup 768: at = a.index(i) 769: i = NArray.to_na(i) if i.is_a?(Array) 770: val = NArray.to_na(val) if val.is_a?(Array) 771: rank_of_subset = a.dup.delete_if{|v| v.is_a?(Fixnum)}.length 772: if val.rank != rank_of_subset 773: raise "rank of the rhs (#{val.rank}) is not equal to the rank "+ 774: "of the subset specified by #{a.inspect} (#{rank_of_subset})" 775: end 776: k = at 777: a[0..at-1].each{|x| if x.is_a?(Fixnum) then k -= 1 end} 778: if i.length != val.shape[k] 779: raise "length of the #{k+1}-th dim of rhs is incorrect "+ 780: "(#{i.length} for #{val.shape[k]})" 781: end 782: index_tmp = Array.new(val.rank,true) if !val.is_a?(Numeric) #==>Array-like 783: for n in 0..i.length-1 784: a_new[at] = i[n]..i[n] 785: if !val.is_a?(Numeric) then 786: index_tmp[k] = n..n 787: self[*a_new] = val[*index_tmp] 788: else 789: self[*a_new] = val 790: end 791: end 792: first.push(val.first) 793: last.push(val.last) 794: return self 795: else 796: raise TypeError, "argument must be Fixnum, Range, Hash, TrueClass, Array, or NArray" 797: end 798: } 799: if(set_stride) 800: self.put(val, {"start"=>first, "end"=>last, "stride"=>stride}) 801: else 802: self.put(val, {"start"=>first, "end"=>last}) 803: end 804: end
# File lib/hdfeos5.rb, line 425 425: def att_names 426: nattrs, attrnames, strbufsize = inqlocattrs() 427: return attrnames.split(/,/) 428: end
# File lib/hdfeos5.rb, line 393 393: def dim(dimid) 394: rank, dims, ntype, dimlist = fieldinfo() 395: return dimlist.split(",")[dimid] 396: end
# File lib/hdfeos5.rb, line 403 403: def dim_names 404: rank, dims, ntype, dimlist = fieldinfo() 405: return dimlist.split(",").reverse 406: end
# File lib/hdfeos5.rb, line 398 398: def dim_val(dimid) 399: rank, dims, ntype, dimlist = fieldinfo() 400: return dimlist.split(",")[dimid] 401: end
# File lib/hdfeos5.rb, line 430 430: def each_att 431: attlist=Array.new 432: attnames=att_names() 433: attnum = natts() 434: attnames.each{|attname| 435: list=Array.new 436: attrval=att(attname) 437: list.push(attname, attrval) 438: attlist.push(list) 439: } 440: attlist 441: end
# File lib/hdfeos5.rb, line 417 417: def get_att(attname) 418: if att_names.include?(attname) 419: get_att_(attname) 420: else 421: nil 422: end 423: end
# File lib/hdfeos5.rb, line 632 632: def get_with_miss(*args) 633: na = simple_get(*args) 634: mv = nil 635: MissValAtts.each do |nm| 636: mv = get_att(nm) 637: break if !mv.nil? 638: end 639: if mv.nil? 640: na 641: else 642: NArrayMiss.to_nam_no_dup( na, (na.ne(mv[0])) ) 643: end 644: end
# File lib/hdfeos5.rb, line 806 806: def inspect 807: 'HE5SwField:'+swath.file.path+'?var='+name 808: end
# File lib/hdfeos5.rb, line 412 412: def natts 413: nattrs, attrname, strbufsize = inqlocattrs() 414: return nattrs 415: end
# File lib/hdfeos5.rb, line 387 387: def ndims 388: rank, dims, ntype, dimlist = fieldinfo() 389: return rank 390: end
# File lib/hdfeos5.rb, line 364 364: def ntype 365: rank, dims, ntype, dimlist = fieldinfo() 366: return ntype 367: end
# File lib/hdfeos5.rb, line 443 443: def put_att(name,value,atttype=nil) 444: count = Array.new 445: count[0] = value.size 446: writelocattr(name,atttype,count,value) 447: end
# File lib/hdfeos5.rb, line 538 538: def put_with_miss(data, *args) 539: if data.is_a?( NArrayMiss ) 540: simple_put(data.to_na, *args) 541: else 542: simple_put(data, *args) 543: end 544: end
# File lib/hdfeos5.rb, line 370 370: def shape 371: rank, dims, ntype, dimlist = fieldinfo() 372: return dims[-1..0].to_a # NArray --> reverced --> Array 373: end
# File lib/hdfeos5.rb, line 377 377: def shape_ul0 378: sh = shape_current 379: dim_names.each_with_index do |dnm,i| 380: if dnm == "Unlim" 381: sh[i] = 0 382: end 383: end 384: sh 385: end
# File lib/hdfeos5.rb, line 547 547: def simple_get(hash=nil) 548: if hash == nil 549: if self.ntype == "char" || self.ntype=="byte" 550: get_vars_char([0,0,0,0,0,0,0,0], nil, nil) 551: elsif self.ntype=="sint" 552: get_vars_short([0,0,0,0,0,0,0,0], nil, nil) 553: elsif self.ntype=="int" 554: get_vars_int([0,0,0,0,0,0,0,0], nil, nil) 555: elsif self.ntype=="sfloat" 556: get_vars_float([0,0,0,0,0,0,0,0], nil, nil) 557: elsif self.ntype=="float" 558: get_vars_double([0,0,0,0,0,0,0,0], nil, nil) 559: else 560: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 561: end 562: elsif hash.key?("index")==true || hash.key?("start")==true 563: h_sta = hash["start"] 564: endq = hash.key?("end") 565: strq = hash.key?("stride") 566: if endq == false && strq == false 567: if self.ntype == "char" || self.ntype=="byte" 568: get_vars_char(h_sta, nil, nil) 569: elsif self.ntype=="sint" 570: get_vars_short(h_sta, nil, nil) 571: elsif self.ntype=="int" 572: get_vars_int(h_sta, nil, nil) 573: elsif self.ntype=="sfloat" 574: get_vars_float(h_sta, nil, nil) 575: elsif self.ntype=="float" 576: get_vars_double(h_sta, nil, nil) 577: else 578: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 579: end 580: elsif endq == true && strq == false 581: h_end = hash["end"] 582: if self.ntype == "char" || self.ntype=="byte" 583: get_vars_char(h_sta, nil, h_end) 584: elsif self.ntype=="sint" 585: get_vars_short(h_sta, nil, h_end) 586: elsif self.ntype=="int" 587: get_vars_int(h_sta, nil, h_end) 588: elsif self.ntype=="sfloat" 589: get_vars_float(h_sta, nil, h_end) 590: elsif self.ntype=="float" 591: get_vars_double(h_sta, nil, h_end) 592: else 593: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 594: end 595: elsif endq == false && strq == true 596: h_str = hash["stride"] 597: if self.ntype == "char" || self.ntype=="byte" 598: get_vars_char(h_sta, h_str, nil) 599: elsif self.ntype=="sint" 600: get_vars_short(h_sta, h_str, nil) 601: elsif self.ntype=="int" 602: get_vars_int(h_sta, h_str, nil) 603: elsif self.ntype=="sfloat" 604: get_vars_float(h_sta, h_str, nil) 605: elsif self.ntype=="float" 606: get_vars_double(h_sta, h_str, nil) 607: else 608: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 609: end 610: else endq == true && strq == true 611: h_end = hash["end"] 612: h_str = hash["stride"] 613: if self.ntype == "char" || self.ntype=="byte" 614: get_vars_char(h_sta, h_str, h_end) 615: elsif self.ntype=="sint" 616: get_vars_short(h_sta, h_str, h_end) 617: elsif self.ntype=="int" 618: get_vars_int(h_sta, h_str, h_end) 619: elsif self.ntype=="sfloat" 620: get_vars_float(h_sta, h_str, h_end) 621: elsif self.ntype=="float" 622: get_vars_double(h_sta, h_str, h_end) 623: else 624: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 625: end 626: end 627: else 628: raise ArgumentError,"{'start'}=>{ARRAY} or {'index'}=>{ARRAY} is needed" 629: end 630: end
# File lib/hdfeos5.rb, line 453 453: def simple_put(var,hash=nil) 454: if hash == nil 455: if self.ntype == "char" || self.ntype=="byte" 456: put_vars_char([0,0,0,0,0,0,0,0], nil, nil, var) 457: elsif self.ntype=="sint" 458: put_vars_short([0,0,0,0,0,0,0,0], nil, nil, var) 459: elsif self.ntype=="int" 460: put_vars_int([0,0,0,0,0,0,0,0], nil, nil, var) 461: elsif self.ntype=="sfloat" 462: put_vars_float([0,0,0,0,0,0,0,0], nil, nil, var) 463: elsif self.ntype=="float" 464: put_vars_double([0,0,0,0,0,0,0,0], nil, nil, var) 465: else 466: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 467: end 468: elsif hash.key?("index")==true || hash.key?("start")==true 469: h_sta = hash["start"] 470: endq = hash.key?("end") 471: strq = hash.key?("stride") 472: if endq == false && strq == false 473: if self.ntype == "char" || self.ntype=="byte" 474: put_vars_char(h_sta, nil, nil, var) 475: elsif self.ntype=="sint" 476: put_vars_short(h_sta, nil, nil, var) 477: elsif self.ntype=="int" 478: put_vars_int(h_sta, nil, nil, var) 479: elsif self.ntype=="sfloat" 480: put_vars_float(h_sta, nil, nil, var) 481: elsif self.ntype=="float" 482: put_vars_double(h_sta, nil, nil, var) 483: else 484: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 485: end 486: elsif endq == true && strq == false 487: h_end = hash["end"] 488: if self.ntype == "char" || self.ntype=="byte" 489: put_vars_char(h_sta, nil, h_end, var) 490: elsif self.ntype=="sint" 491: put_vars_short(h_sta, nil, h_end, var) 492: elsif self.ntype=="int" 493: put_vars_int(h_sta, nil, h_end, var) 494: elsif self.ntype=="sfloat" 495: put_vars_float(h_sta, nil, h_end, var) 496: elsif self.ntype=="float" 497: put_vars_double(h_sta, nil, h_end, var) 498: else 499: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 500: end 501: elsif endq == false && strq == true 502: h_str = hash["stride"] 503: if self.ntype == "char" || self.ntype=="byte" 504: put_vars_char(h_sta, h_str, nil, var) 505: elsif self.ntype=="sint" 506: put_vars_short(h_sta, h_str, nil, var) 507: elsif self.ntype=="int" 508: put_vars_int(h_sta, h_str, nil, var) 509: elsif self.ntype=="sfloat" 510: put_vars_float(h_sta, h_str, nil, var) 511: elsif self.ntype=="float" 512: put_vars_double(h_sta, h_str, nil, var) 513: else 514: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 515: end 516: else endq == true && strq == true 517: h_end = hash["end"] 518: h_str = hash["stride"] 519: if self.ntype == "char" || self.ntype=="byte" 520: put_vars_char(h_sta, h_str, h_end, var) 521: elsif self.ntype=="sint" 522: put_vars_short(h_sta, h_str, h_end, var) 523: elsif self.ntype=="int" 524: put_vars_int(h_sta, h_str, h_end, var) 525: elsif self.ntype=="sfloat" 526: put_vars_float(h_sta, h_str, h_end, var) 527: elsif self.ntype=="float" 528: put_vars_double(h_sta, h_str, h_end, var) 529: else 530: raise ArgumentError, "variable type isn't supported in HDF-EOS5" 531: end 532: end 533: else 534: raise ArgumentError,"{'start'}=>{ARRAY} or {'index'}=>{ARRAY} is needed" 535: end 536: end
# File lib/hdfeos5.rb, line 647 647: def __rubber_expansion( args ) 648: if (id = args.index(false)) # substitution into id 649: # false is incuded 650: alen = args.length 651: if args.rindex(false) != id 652: raise ArguemntError,"only one rubber dimension is permitted" 653: elsif alen > rank+1 654: raise ArgumentError, "too many args" 655: end 656: ar = ( id!=0 ? args[0..id-1] : [] ) 657: args = ar + [true]*(rank-alen+1) + args[id+1..-1] 658: elsif args.length == 0 # to support empty [], []= 659: args = [true]*rank 660: end 661: args 662: end