ソフトウェア/Igor/Wave関連

(2287d) 更新


ソフトウェア/Igor

SetScale 関連

SetScale でウェーブの縦横軸スケールを決められます。
CopyScales というのもあって、あるウェーブの縦横軸スケール情報を別のウェーブにコピーできます。

逆に、ウェーブから縦横軸スケールを読み取るには、

  • DimOffset(wave0, 0) : wave0 の x 軸の左端 = LeftX(wave0)
  • DimDelta(wave0, 0) : wave0 の x 軸の刻み幅 = DeltaX(wave0)
  • DimSize(wave0, 0) : wave0 の x 軸方向の点数 = 一次元ウェーブなら NumPnts(wave0) と等しい
  • WaveUnits(wave0, 0) : wave0 の x 軸の単位
  • WaveUnits(wave0, 1) : 1次元ウェーブでは wave0 の値の単位
  • DimOffset(wave0, 1) : 2次元以上のウェーブでは wave0 の y 軸の左端
  • DimDelta(wave0, 1) : 2次元以上のウェーブでは wave0 の y 軸の刻み幅
  • DimSize(wave0, 1) : 2次元以上のウェーブでは wave0 の y 軸方向の点数
  • WaveUnits(wave0, 1) : 2次元以上のウェーブでは wave0 の y 軸の単位
  • WaveUnits(wave0, 2) : 2次元ウェーブでは wave0 の値の単位
  • ...
  • StringByKey("DUNITS", WaveInfo(wave0, 0)) : 次元数に関係なく wave0 の値の単位が得られる

といった関数を使います。
これらと合わせて、以下の関数もよく使いますね。

  • Pnt2X(wave0, p) : p 番目の点の x 座標を求める( p は整数に丸められて、必ず DeltaX の整数倍が返る)
  • X2Pnt(wave0, x) : x 座標を点のインデックスに直す(必ず整数が返る)
  • NumPnts(wave0) : wave0 の総点数を返す(多次元でも使える)
  • Note wave0, <str> : wave0 にノート文字列を付加する
  • note(wave0) : wave0 に付加したノート文字列を取得する
  • leftx(wave0) : 左端の x 座標
  • rightx(wave0) : 右端の x 座標
  • deltax(wave0) : x 座標の刻み値

SetScale/I の罠

SetScale には /P と /I の2種類の指定の仕方がありますが、 /I についてはかなり注意が必要です。

LANG:Igor
* Make/N=100 wave0
* SetScale/I x, 0, 100, wave0
* Print LeftX(wave0), DeltaX(wave0), Pnt2X(wave0, 99), RightX(wave0)
 0  1.0101  100  101.01

この場合、DeltaX(wave0) は 1 ではなく 1.0101 になります。
これは、wave0 の右端の点、すなわち wave0[99] の x 座標が 100 になるためです。

RightX も危険

また、この場合の RightX(wave0) は 100 ではなく 101.01 になります。
すなわち、RightX(wave0) は一番右の点ではなくて、一番右の、さらに次の点の x 座標を返します。

かなり覚えにくいので、SetScale は /P で使うことをお勧めします。

LANG:Igor
* Make/N=100 wave0
* SetScale/P x, 0, 1, wave0
* Print LeftX(wave0), DeltaX(wave0), Pnt2X(wave0, 99), RightX(wave0)
 0  1  99  100

これなら驚きが少ないですよね。

質問・コメント





Counter: 15292 (from 2010/06/03), today: 4, yesterday: 0