Class NumRu::HE5PtField
In: lib/hdfeos5.rb
Parent: Object
HE5Za HE5Gd HE5 HE5ZaField HE5GdField HE5Pt HE5SwField HE5Sw HE5PtField lib/hdfeos5.rb NumRu dot/m_0_0.png

HE5PtField クラスに関して

Methods

[]   []=   __rubber_expansion   att_names   attr   create   dim   dim_names   dim_val   each_att   get   get_att   get_with_miss   inspect   name=   natts   ndims   ntype   open   put   put_att   rank   shape   shape_current   shape_ul0   simple_get   simple_put   typecode  

Constants

MissValAtts = ["MissingValue","_FillValue"]

Public Class methods

[Source]

      # File lib/hdfeos5.rb, line 1552
1552:        def create(file, pname,fldname)
1553:          if(file.is_a?(String))
1554:            ptid = HE5Pt.create(file, pname)
1555:          elsif(!file.is_a?(HE5))
1556:            raise TypeError,
1557:                 "1st arg must be a HDF-EOS5 (file object) or a String (path)"
1558:          end
1559:          file.var(fldname)
1560:        end

[Source]

      # File lib/hdfeos5.rb, line 1562
1562:        def open(file, pname, fldname)
1563:          if(file.is_a?(String))
1564:            ptid = HE5Pt.open(file, pname)
1565:          elsif(!file.is_a?(HE5))
1566:            raise TypeError,
1567:                 "1st arg must be a HDF-EOS5 (file object) or a String (path)"
1568:          end
1569:          ptid.var(fldname)
1570:        end

Public Instance methods

[Source]

      # File lib/hdfeos5.rb, line 1751
1751:     def [](*a)
1752:       if a.length == 0
1753:         return self.get
1754:       end
1755:       a = __rubber_expansion(a)
1756:       count = Array.new
1757:       set_count = false
1758:       a.each{|i|
1759:       if(i.is_a?(Fixnum))
1760:         count.push(i)
1761:       elsif(i.is_a?(Range))
1762:         count.push(i.first)
1763:       elsif(i.is_a?(Hash))
1764:         r = (i.to_a[0])[0]
1765:         s = (i.to_a[0])[1]
1766:         if ( !( r.is_a?(Range) ) || ! ( s.is_a?(Integer) ) )
1767:             raise TypeError, "Hash argument must be {a_Range, step}"
1768:         end
1769:         count.push(r.first) 
1770:         set_count = true
1771:       elsif(i.is_a?(TrueClass))
1772:         count.push(0)
1773:       elsif( i.is_a?(Array) || i.is_a?(NArray))
1774:         a_new = a.dup
1775:         at = a.index(i)
1776:         i = NArray.to_na(i) if i.is_a?(Array)
1777:         for n in 0..i.length-1
1778:           a_new[at] = i[n]..i[n]
1779:           na_tmp = self[*a_new]
1780:           if n==0 then
1781:             k = at
1782:             if at > 0
1783:               a[0..at-1].each{|x| if x.is_a?(Fixnum) then k -= 1 end}
1784:             end
1785:             shape_tmp = na_tmp.shape
1786:             shape_tmp[k] = i.length
1787:             na = na_tmp.class.new(na_tmp.typecode,*shape_tmp)
1788:             index_tmp = Array.new(shape_tmp.length,true)
1789:           end
1790:           index_tmp[k] = n..n
1791:           na[*index_tmp] = na_tmp
1792:         end
1793:         return na
1794:       else
1795:          raise TypeError, "argument must be Fixnum, Range, Hash, TrueClass, Array, or NArray"
1796:       end
1797:       }
1798: 
1799:       if(set_count)
1800:         na = self.get({"count"=>count})
1801:       else
1802:         na = self.get()
1803:       end
1804:       shape = na.shape
1805:       (a.length-1).downto(0){ |i|
1806:          shape.delete_at(i) if a[i].is_a?(Fixnum)
1807:       }
1808:       na.reshape!( *shape )
1809:       na
1810:     end

[Source]

      # File lib/hdfeos5.rb, line 1812
1812:     def []=(*a)
1813:       val = a.pop
1814:       a = __rubber_expansion(a)
1815:       count = Array.new
1816:       set_count = false
1817:       a.each{|i|
1818:       if(i.is_a?(Fixnum))
1819:         count.push(i)
1820:       elsif(i.is_a?(Range))
1821:         count.push(i.first)
1822:       elsif(i.is_a?(Hash))
1823:         r = (i.to_a[0])[0]
1824:         s = (i.to_a[0])[1]
1825:         if ( !( r.is_a?(Range) ) || ! ( s.is_a?(Integer) ) )
1826:             raise ArgumentError, "Hash argument must be {first..last, step}"
1827:         end
1828:         count.push(r.first) 
1829:         set_stride = true
1830:       elsif(i.is_a?(TrueClass))
1831:         count.push(0)
1832:       elsif(i.is_a?(Array) || i.is_a?(NArray))
1833:         a_new = a.dup
1834:         at = a.index(i)
1835:         i = NArray.to_na(i) if i.is_a?(Array)
1836:         val = NArray.to_na(val) if val.is_a?(Array)
1837:         rank_of_subset = a.dup.delete_if{|v| v.is_a?(Fixnum)}.length
1838:         if val.rank != rank_of_subset
1839:            raise "rank of the rhs (#{val.rank}) is not equal to the rank "+
1840:                  "of the subset specified by #{a.inspect} (#{rank_of_subset})"
1841:         end
1842:         k = at
1843:         a[0..at-1].each{|x| if x.is_a?(Fixnum) then k -= 1 end}
1844:         if i.length != val.shape[k]
1845:            raise "length of the #{k+1}-th dim of rhs is incorrect "+
1846:                  "(#{i.length} for #{val.shape[k]})"
1847:         end
1848:         index_tmp = Array.new(val.rank,true) if !val.is_a?(Numeric) #==>Array-like
1849:         for n in 0..i.length-1
1850:           a_new[at] = i[n]..i[n]
1851:           if !val.is_a?(Numeric) then
1852:             index_tmp[k] = n..n
1853:             self[*a_new] = val[*index_tmp]
1854:           else
1855:             self[*a_new] = val
1856:           end
1857:         end
1858:         return self
1859:       else
1860:         raise TypeError, "argument must be Fixnum, Range, Hash, TrueClass, Array, or NArray"
1861:       end
1862:       }
1863: 
1864:       if(set_count)
1865:         self.put(val, {"count"=>count})
1866:       else
1867:         self.put(val)
1868:       end
1869:     end

[Source]

      # File lib/hdfeos5.rb, line 1634
1634:     def att_names
1635:       nattrs, attrnames, strbufsize = inqlocattrs()
1636:       return attrnames.split(/,/)
1637:     end

[Source]

      # File lib/hdfeos5.rb, line 1658
1658:     def attr
1659:       @attr
1660:     end

[Source]

      # File lib/hdfeos5.rb, line 1602
1602:     def dim(dimid)
1603:       rank, dims, ntype, dimlist = fieldinfo()
1604:       return dimlist.split(",")[dimid]
1605:     end

[Source]

      # File lib/hdfeos5.rb, line 1612
1612:     def dim_names
1613:       rank, dims, ntype, dimlist = fieldinfo()
1614:       return dimlist.split(",").reverse
1615:     end

[Source]

      # File lib/hdfeos5.rb, line 1607
1607:     def dim_val(dimid)
1608:       rank, dims, ntype, dimlist = fieldinfo()
1609:       return dimlist.split(",")[dimid]
1610:     end

[Source]

      # File lib/hdfeos5.rb, line 1639
1639:     def each_att
1640:       attlist=Array.new
1641:       attnames=att_names()
1642:       attnum = natts()
1643:       attnames.each{|attname|
1644:         list=Array.new
1645:         attrval=att(attname)
1646:         list.push(attname, attrval)
1647:         attlist.push(list)
1648:       }
1649:       attlist
1650:     end
get(*args)

Alias for get_with_miss

[Source]

      # File lib/hdfeos5.rb, line 1626
1626:     def get_att(attname)
1627:       if att_names.include?(attname)
1628:         get_att_(attname)
1629:       else
1630:         nil
1631:       end
1632:     end

[Source]

      # File lib/hdfeos5.rb, line 1718
1718:     def get_with_miss(*args)
1719:       na = simple_get(*args)
1720:       mv = nil
1721:       MissValAtts.each do |nm|
1722:         mv = get_att(nm)
1723:         break if !mv.nil?
1724:       end
1725:       if mv.nil?
1726:         na
1727:       else
1728:         NArrayMiss.to_nam_no_dup( na, (na.ne(mv[0])) )
1729:       end
1730:     end

[Source]

      # File lib/hdfeos5.rb, line 1871
1871:     def inspect
1872:       'HE5PtField:'+point.file.path+'?var='+name
1873:     end

[Source]

      # File lib/hdfeos5.rb, line 1617
1617:     def name=
1618:       raise "name= not supported"
1619:     end

[Source]

      # File lib/hdfeos5.rb, line 1621
1621:     def natts
1622:       nattrs, attrname, strbufsize = inqlocattrs()
1623:       return nattrs
1624:     end

[Source]

      # File lib/hdfeos5.rb, line 1596
1596:     def ndims
1597:       rank, dims, ntype, dimlist = fieldinfo()
1598:       return rank
1599:     end

[Source]

      # File lib/hdfeos5.rb, line 1573
1573:     def ntype
1574:       rank, dims, ntype, dimlist = fieldinfo()
1575:       return ntype
1576:     end
put(var,hash=nil)

Alias for simple_put

[Source]

      # File lib/hdfeos5.rb, line 1652
1652:     def put_att(name,value,atttype=nil)
1653:        count = Array.new
1654:        count[0] = value.size
1655:        writelocattr(name,atttype,count,value)
1656:     end
rank()

Alias for ndims

[Source]

      # File lib/hdfeos5.rb, line 1579
1579:     def shape
1580:       rank, dims, ntype, dimlist = fieldinfo()
1581:       return dims[-1..0].to_a   # NArray --> reverced --> Array
1582:     end
shape_current()

Alias for shape

[Source]

      # File lib/hdfeos5.rb, line 1586
1586:     def shape_ul0
1587:       sh = shape_current
1588:       dim_names.each_with_index do |dnm,i|
1589:         if dnm == "Unlim"
1590:           sh[i] = 0
1591:         end
1592:       end
1593:       sh
1594:     end

[Source]

      # File lib/hdfeos5.rb, line 1698
1698:     def simple_get(hash=nil)
1699:       if hash == nil
1700:         if self.ntype == "char" || self.ntype=="byte"
1701:           get_vars_char()
1702:         elsif self.ntype=="sint"
1703:           get_vars_short()
1704:         elsif self.ntype=="int"
1705:           get_vars_int()
1706:         elsif self.ntype=="sfloat"
1707:           get_vars_float()
1708:         elsif self.ntype=="float"
1709:           get_vars_double()
1710:         else
1711:           raise ArgumentError, "variable type isn't supported in HDF-EOS5"
1712:         end
1713:       else
1714:         raise ArgumentError,"hash isn't needed"
1715:       end
1716:     end

[Source]

      # File lib/hdfeos5.rb, line 1662
1662:     def simple_put(var,hash=nil)
1663:       if hash == nil
1664:         if self.ntype == "char" || self.ntype=="byte"
1665:           put_vars_char([0,0,0,0,0,0,0,0], var)
1666:         elsif self.ntype=="sint"
1667:           put_vars_short([0,0,0,0,0,0,0,0], var)
1668:         elsif self.ntype=="int"
1669:           put_vars_int([0,0,0,0,0,0,0,0], var)
1670:         elsif self.ntype=="sfloat"
1671:           put_vars_float([0,0,0,0,0,0,0,0], var)
1672:         elsif self.ntype=="float"
1673:           put_vars_double([0,0,0,0,0,0,0,0], var)
1674:         else
1675:           raise ArgumentError, "variable type isn't supported in HDF-EOS5"
1676:         end
1677:       elsif hash == "count"
1678:         count = hash["count"]
1679:         if self.ntype == "char" || self.ntype=="byte"
1680:           put_vars_char(count, var)
1681:         elsif self.ntype=="sint"
1682:           put_vars_short(count, var)
1683:         elsif self.ntype=="int"
1684:           put_vars_int(count, var)
1685:         elsif self.ntype=="sfloat"
1686:           put_vars_float(count, var)
1687:         elsif self.ntype=="float"
1688:           put_vars_double(count, var)
1689:         else
1690:           raise ArgumentError, "variable type isn't supported in HDF-EOS5"
1691:         end
1692:       else
1693:         raise ArgumentError,"{'count'}=>{ARRAY} is needed"
1694:       end
1695:     end
typecode()

Alias for ntype

Private Instance methods

[Source]

      # File lib/hdfeos5.rb, line 1733
1733:     def __rubber_expansion( args )
1734:       if (id = args.index(false))  # substitution into id
1735:         # false is incuded
1736:         alen = args.length
1737:         if args.rindex(false) != id
1738:           raise ArguemntError,"only one rubber dimension is permitted"
1739:         elsif alen > rank+1
1740:           raise ArgumentError, "too many args"
1741:         end
1742:         ar = ( id!=0 ? args[0..id-1] : [] )
1743:         args = ar + [true]*(rank-alen+1) + args[id+1..-1]
1744:       elsif args.length == 0   # to support empty [], []=
1745:         args = [true]*rank
1746:       end
1747:       args
1748:     end

[Validate]