class Labcom::ArcData

Authors

S.imazu

Version

22.0.0

Date

2020-07-31

[クラス名] ArcData

[メンバー]

[クラスメソッド]

[インスタンスメソッド]

[説 明]

  1. 計測(保存)データクラス

  2. 計測データは、サンプリングデータおよびパラメータ、時間軸情報を保持する。

[UPDATE履歴]

18.0.0 初版 19.0.0 内部データの時間単位を整数時はピコ秒とした。(倍精度時は秒)

時間軸データ数は、疑似フレームデータをサポートすることにより、異なる場合があるので、メンバ変数で管理する。
更新:initialize(),time(),set_time()
追加:num_times()

22.0.0 追加:converted_rgb()

Attributes

parameters[R]
samples[R]

Public Class Methods

new( start_time=nil, sampling_interval=nil, samp_data=nil, samp_params=nil, num_of_times=nil) click to toggle source
start_time (double or integer)

サンプリング開始時刻

sampling_interval (double or integer)

サンプリングインターバル

samp_data (ArcSamplesオブジェクト or ArcFramesオブジェクト)

データ

samp_params (ディクショナリ)

パラメータ

num_of_times (integer)

時間軸データ数

[説  明]
コンストラクタ
# File labcom/ArcData.rb, line 66
def initialize( start_time=nil, sampling_interval=nil, samp_data=nil, samp_params=nil, num_of_times=nil)
  
  @start_time = start_time
  @sampling_interval = sampling_interval
  @num_of_times = num_of_times
  set_data( samp_data)
  set_parameters( samp_params)
end

Public Instance Methods

add_frame( binary_str, bsize=nil) click to toggle source
binary_str(string)

データ一次元配列(binary string)

bsize(int)

バイトサイズ

返値

なし

例外

RuntimeError

[説  明]
メンバー変数(samples)に1フレームのデータを追加する。
# File labcom/ArcData.rb, line 357
def add_frame( binary_str, bsize=nil)
  if nil != @samples  then
    @samples.add_frame( binary_str, bsize)
  else
    raise RuntimeError, 'No initialize samples(ArcFrames).'
  end
end
add_parameter( param_name, param_value, param_type) click to toggle source
param_name(string)

追加するパラメータ名

param_value(int,double,string,..)

追加するパラメータ値

param_type(int)

追加するパラメータの型コード

返値

なし

[説  明]
メンバー変数(parameters)にパラメータを追加する。
型コード:1(String), 2(byte), 3(int16), 4(int32), 5(float), 6(double), 7(int64)
# File labcom/ArcData.rb, line 253
def add_parameter( param_name, param_value, param_type)
 
  if nil == @parameters then
    @parameters[param_name] = param_value
    @parameters[param_name+'#PTYPE'] = param_type
  else
    @parameters.store(param_name,param_value)
    @parameters.store(param_name+'#PTYPE', param_type)
  end

end
add_parameters( dict_obj) click to toggle source
dict_obj(dict)

追加するパラメータオブジェクト

返値

なし

[説  明]
メンバー変数(parameters)にパラメータオブジェクトを追加(マージ)する。
引数の型チェックをしていない。
# File labcom/ArcData.rb, line 231
def add_parameters( dict_obj)
  if nil == @parameters then
    @parameters = dict_obj
  else
    @parameters.merge( dict_obj)
  end
end
converted_rgb() click to toggle source
引数

なし

返値

配列データ(NArray)

[説  明]
計測データのframeデータをRGB変換しNArrayクラスのオブジェクトで戻す。
# File labcom/ArcData.rb, line 105
def converted_rgb()
  return @samples.converted_rgb() if is_frame()
  return nil 
end
init_frames( i_type, x_size, y_size) click to toggle source
i_type(string)

イメージタイプ

x_size(int)

X方向サイズ

y_size(int)

Y方向サイズ

返値

なし

[説  明]
メンバー変数(samples)をArcFramesに初期化する。
イメージタイプ: 'GRAY8', 'GRAY10', 'GREY8', 'GREY10', 'RGB', 'YUV',...
# File labcom/ArcData.rb, line 340
def init_frames( i_type, x_size, y_size)
  @samples = ArcFrames.new( i_type, x_size, y_size)
end
is_frame() click to toggle source
引数

なし

返値

true:フレーム構造である。 false:フレーム構造でない。 nil:サンプリングデータがない。

[説  明]
サンプリングデータの構造がフレーム構造であるかチェックする。
# File labcom/ArcData.rb, line 198
def is_frame()
  return nil if( nil == @samples ) 
  return @samples.kind_of?(ArcFrames)
end
num() click to toggle source
引数

なし

返値

サンプリングデータのデータ件数(int)

[説  明]
配列データのデータ件数を戻す。
Frame形式の場合はフレーム数
# File labcom/ArcData.rb, line 122
def num()
  return nil if nil == @samples 
  return @samples.num()
end
num_times() click to toggle source
引数

なし

返値

時間軸データのデータ件数(int)

[説  明]
# File labcom/ArcData.rb, line 181
def num_times()
  num_data = @num_of_times if nil != @num_of_times 
  num_data = num() if nil == num_data
  return num_data 
end
set_data( obj) click to toggle source
obj(ArcSamples,ArcFrames)

格納するデータオブジェクト

返値

なし

例外

TypeError

[説  明]
メンバー変数(samples)にデータを格納(代入)する。
# File labcom/ArcData.rb, line 277
def set_data( obj)
  if nil == obj then
    @samples = obj
  elsif obj.kind_of?(ArcSamples)
    @samples = obj
  elsif obj.kind_of?(ArcFrames)
    @samples = obj
  else 
    raise TypeError,'Object type(' + obj.class + ' ) is unsupported.'
  end
end
set_parameters( dict_obj) click to toggle source
dict_obj(dict)

設定するパラメータオブジェクト

返値

なし

[説  明]
メンバー変数(parameters)にパラメータオブジェクトを設定(代入)する。
引数の型チェックをしていない。
# File labcom/ArcData.rb, line 215
def set_parameters( dict_obj)
  @parameters = dict_obj
end
set_samples( dtype, data, bsize=nil) click to toggle source
dtype(string)

データ型

data(string)

データ配列(binary string)

bsize(int)

バイトサイズ

返値

なし

[説  明]
binary string形式のサンプリングデータをメンバー変数(samples)に格納する。
データ型 : 'INT8', 'INT16', 'INT16', 'FLT32', 'FLT32' ('INT64'はNArrayが未サポート)
# File labcom/ArcData.rb, line 322
def set_samples( dtype, data, bsize=nil)
  @samples = ArcSamples.new(dtype, data, bsize)
end
set_time( start_time, sampling_interval, num_of_times=nil) click to toggle source
start_time(double or integer)

サンプリング開始時刻(double:秒, integer:ピコ秒)

sampling_interval(double or integer)

サンプリング間隔(double:秒, integer:ピコ秒)

num_of_times(integer)

時間軸データ数

返値

なし

[説 明] 該当メンバー変数に代入する。

# File labcom/ArcData.rb, line 302
def set_time( start_time, sampling_interval, num_of_times=nil)
  @start_time = start_time
  @sampling_interval = sampling_interval
  @num_of_times = num_of_times
end
time() click to toggle source
引数

なし

返値

時間軸配列データ(NArray)

[説  明]
時間軸情報から配列を作成し戻す。
時間軸情報がない場合は、index配列になる。
# File labcom/ArcData.rb, line 140
  def time()
      
    num_data = @num_of_times if nil != @num_of_times 
    num_data = num() if nil == num_data
    return nil if nil == num_data 
    
#    p 'sampling_interval.class : '+ @sampling_interval.is_a?(Integer).to_s #TODO
#    p 'start_time.class : '+ @start_time.class.to_s # TODO

    if nil == @sampling_interval then
        interval = 1
    else
        interval = @sampling_interval
    end
    interval = 1 if 0.0 == interval 
    
    if nil == @start_time then
        start_t = 0
    else
        start_t = @start_time
    end
 #   p 'interval.class : '+ interval.class.to_s #TODO
 #   p 'start_t.class : ' + start_t.class.to_s  #TODO
    
    if( interval.is_a?(Integer) && !(1 == interval && 0 == start_t) ) then
      return (start_t + interval * NArray.float( num_data).indgen!(1))/1000000000000.0
     else
      return start_t + interval * NArray.float( num_data).indgen!(1)
     end 
  end
val() click to toggle source
引数

なし

返値

配列データ(NArray)

[説  明]
計測データのサンプリングデータをNArrayクラスのオブジェクトに変換し戻す。
# File labcom/ArcData.rb, line 89
def val()
  return nil if nil == @samples 
  return @samples.val()
end