IRAF tips (IRAF関連メモ)

最終更新 : Dec. 14, 2015


Useful Links

List of Tips

IRAF 一般

目を通しておくべき help 文書

有用そうなtaskを探す

help 関連 tips

・ページャーで表示
cl> phelp sarith

・テキストファイル化、印刷する、WWW ブラウザで見る
cl> help dispcor device="text"

cl> help dispcor device="ps" | lpr

cl> help dispcor device="html" > dispcor_help.html
cl> !mozilla "dispcor_help.html" &

標準出力数値群の、平均値、標準偏差を求める

cl> imstat *fits[262:274,1022:1026] format- field="midpt"
1304.837
1309.775
1314.296
1318.359
1316.449
1321.353
1317.911
1293.023
cl> imstat *fits[262:274,1022:1026] format- field="midpt" | average
1312.000375 9.2913658066847 8

リダイレクト">"先の上書き設定

 環境変数 clobberの設定。
 cl> set clobber=yes (or no)
 clobber=no  : 上書きなし (>先が存在すれば、エラー)
 clobber=yes : 上書き     (>先が存在すれば、上書き)

グラフのsnapをepsファイルに保存

cl> setstdplot=epsf
cl> implot xxxx.fits
 =

cl> setstdplot=lp
でもとに戻る

他の出力については、
cl> phelp devices

画像 headerのキーワードに合致する画像名を表示する

cl> hselect *.fits $I 'EXPTIME == 900'
le004082.fits
le004083.fits
le004084.fits
le004085.fits
le004086.fits

## header に ハイフン - が含まれる場合は、以下のような記法をする。
cl> hselect *.px.imh $I  '@"POS-HWP" == 67.5'

その他、"clpackage.lists"に役立ちtaskがある。

printf, scanf の例 (Cと同様)

 cl> printf("pi = %g\n", 3.14159)
 pi = 3.14159
 
 cl> s1 = "12:34:56.7"
 cl> print(s1) | scanf("%d:%d:%g",hr,min,sec)
 

ファイルの有無を確認する。


if( ! access( input_fn ) ){
    printf( input_fn//" is not exist !!\n" )
    bye
}

if( access( temp_fn ) )
            delete( temp_fn )

画像ファイルmask_fnのうち、x=1-50,y=* の領域の値を、rplc_valに置き換える。


imreplace( mask_fn//"[1:50,*]", rplc_val, lower=INDEF, upper=INDEF )

画像ファイルmask_fnのうち、カウントがs_min以下、および、

s_max以上のピクセルの値を、0に置き換える。

imreplace( mask_fn, 0, upper=s_min, lower=INDEF )
imreplace( mask_fn, 0, lower=s_max, upper=INDEF )

マスク画像ファイル mask_fn(0 or 1の画像)のうち、0で示されるピクセルのみ

を選択して、imstaticsを実行する。

mimstatistics( input_fn, imasks=mask_fn, format-, \
	       field="mean, midpt, stddev, min, max" )


タスクで出力される数値を変数に受け渡す


int npix
real mean
imstatistics(  input_fn, format-, field="npix, mean" ) \
              | scan( npix, mean )

タスクを抜ける


bye

タスクが出力する標準出力表示を抑制する。( = ver-)


imcopy( template_fn, mask_fn, ver- )

画像ファイルの任意のヘッダーの値を変数に格納する


file input_fn
real exptime
imgets ( input_fn, "EXPTIME" )
exptime = real( imgets.value )

s_maxより小さいカウントのpixelの値をs_maxに置き換える。

imarith( input_fn , "max", s_max, output_fn )

s_minより大きいカウントのpixelの値をs_minに置き換える。

imarith( input_fn , "min", s_min, output_fn )

0以外のカウントを持つピクセルを1、それ以外が0の画像を作成する。

imarith( input_fn, "/", input_fn, output_fn, divzero = 0. )
(注意)neary zeroのピクセルでは、divided by zeroの扱いが生じて
        1ではなくzeroとなる場合がある。

タスクの登録 ( sample_task.cl の場合 )


(タスクが入力引数を持つ場合)
cl> sample_task = sample_task.cl

(タスクが入力引数を持たない場合)
cl> $sample_task = sample_task.cl

task のデバッグ

cl> t_trace
で、デバッグモードに入る。

ファイル名の拡張子を一括して変更

cl> ren *.fts fits field=extn

展開したファイル名の表記を変更 (sections あれこれ)

cl> files
le005372.fits
le005373.fits
cl> type o.lst
le005372.fits
le005373.fits

のとき。

cl> sections @o.lst//_b opt="full"
le005372_b.fits
le005373_b.fits

cl> sections tmp_@o.lst opt="full"
tmp_le005372.fits
tmp_le005373.fits
tmp_le005374.fits
tmp_le005375.fits

cl> sections *.fits[2171:2190,101:1000]
le005372.fits[2171:2190,101:1000]
le005373.fits[2171:2190,101:1000]

# ファイル名の一部や拡張子を変更したファイルリストを表示
cl> sections %le%lips%*.%fits%imh%
lips005372.imh
lips005373.imh
#( %(arg1)%(arg2)% : 置換演算子 )

# 拡張子を除いたファイルリストを表示 (置換演算子の応用)
cl> sections *%.fits%%
lips005372
lips005373

ファイルの数を求める

cl> sections *.fits opt=no
cl> = sections.nimages
cl> 2

作業ログを残す

cl> cl.logfile = "logfilename.cl"
cl> cl.keeplog = yes
cl> # (works to be logged )
cl> cl.keeplog = no

IRAF filename のシステム上のフルパスを得る

print osfn( "home$login.cl" )
/home/akitaya/iraf/login.cl

HH:MM:SS 形式の実数型への変換

HH:MM:SS or DD:HH:SS 形式は、real型変数に直接代入することで、 10進実数型に自動変換される。
cl> real ra
cl> ra=12:55:53  
cl> = ra
12.931388888889
cl> ra=150:11:12
cl> = ra
150.18666666667
cl> string ra_str
cl> ra_str="12:43"
cl> = ra_str
12:43
cl> = real( ra_str )
12.716666666667

観測日の情報(JD etc.)を調べる

速度(heliocentric velocity etc.)を調べる

rytau_rvcor.dat 
-----------------------------------------------------
 2002   3  2   6:11:00.0 04:21:57.5 28:26:37 2000.0
 2002   3  4   5:44:00.0 04:21:57.5 28:26:37 2000.0 
 2002  10 27  11:54:00.0 04:21:57.5 28:26:37 2000.0 
-----------------------------------------------------
のとき、

cl> rvcor files="rytau_rvcor.dat" obs=irtf input=yes

 # RVCORRECT: Observatory parameters for NASA Infrared Telescope Facility
 #       latitude = 19.826218
 #       longitude = 155.471999
 #       altitude = 4168
 ##YR MO DY    UT       RA       DEC       VOBS      ##   HJD          VOBS   VHELIO     VLSR   VDIURNAL   VLUNAR  VANNUAL   VSOLAR
 2002  3  2  6:11:00  4:21:57  28:26:37      0.0     2452335.75734     0.00   -30.01   -39.00     -0.202    0.009  -29.817   -8.985
 2002  3  4  5:44:00  4:21:57  28:26:37      0.0     2452337.73839     0.00   -29.92   -38.90     -0.174    0.004  -29.745   -8.985
 2002 10 27 11:54:00  4:21:57  28:26:37      0.0     2452575.00052     0.00    16.56     7.58      0.046    0.007   16.510   -8.985

分光関連

テキスト形式のスペクトルをfits形式に変換

 (1) 非等間隔スペクトル
 vi_020301_caii8498.xy :速度-強度 のテキストファイルスペクトル
 - dtype=nonlinear で、横軸を速度座標で記録
 cl> rspectext vi_020301_caii8498.xy vi_020301_caii8498.fits dtype=nonlinear
 -> headerに、ピクセル番号と波長の対応付けが記録される。
 (確認)
 cl> splot vi_020301_caii8498.fits

 (2) 等間隔スペクトル
 rspectext vi020301_caii8498.xy test.fits crval1=4000.0 cdelt1=10.
  開始波長と波長間隔を設定。それぞれheaderに書き込まれる。

cl script 関連

cl scriptの文法が正しいはずのにエラーが出る

環境変数を変数に受渡し

cl>  set _gain = 2.20
cl>  real gain
cl>  gain = real( envget( "_gain" ))
  
cl>  = gain
  2.2

暗黙宣言済変数群

stringss1, s2, s3
bolleansb1, b2, b3
integersi1, i2, i3
text file (list 型)list
設定・確認方法
cl> lparam cl
cl> eparam cl
cl> x=3.14
cl> =x

shell, C言語類似タスク・コマンド対応表

cl> help system
が参考になる。
C or shellIRAF
cattype, concatenate
continuenext
grepmatch
rmdelete
mvrename, movofiles, imrename
cpcopy
ls -1files
lsdir
exitbye
more, lesspage
pastejoinlines
cutfields
tr, sedtranslit

タスクのcl script用ひな型を作る

cl> mkscript temp.cl imcombine

一時ファイルを作る

  string file1
  string file2
  
  file1 = mktemp ("tmp$prefix_")
  # 論理ディレクトリ tmp内に、prefix_で始まる
  # 一意なファイル名の一時ファイルを作成。

  file2 = mktemp ("tmp$prefix_")
  # 作業ディレクトリに作る場合。

  ...

  delete( file1 )
  delete( file2 )
  # 最後にちゃんと消さないと、ゴミとして残るので注意!
  

引数のファイル名・ファイルリストを賢く展開して処理する cl script

procedure sampletask ( images )
struct *images
begin
    string img, tmplist
    tmplist = mktemp( _tmp_dampletask )
    sections( images, option="fullname", > tmplist )
    images = tmplist
    while( fscan( images, img ) != EOF ){
        #   ...( handle file img here.)
    }
    delete( tmplist, ver-, >& "dev$null" )
end

カーソル機能(imcur)の使い方

# imcur (*imagecurs), wcs (int) はデフォルト定義されている
struct command  # struct型の コマンド引数用変数を定義
string key

# "m"キーでカーソルのxy座標を読んでファイルに書き出し
# "q"で抜ける。
while( fscan(imcur, x, y, wcs, command )!= EOF ) {
key = substr( command, 1, 1) # コマンド文字列を受け取る
  if (key == "m" ) {
     print( x, y )
     printf("%9.4f %9.4f\n", x, y, >> tmp_coord )
  }
  else if ( key == "q" )
      break
}
 ("An Introductory User's Guide to IRAF SCripts; p. 42-43)

clscript ひな型

#
# comments
#

procedure lin_mskstat( input_fn , mask_fn , value1 )

file input_fn     { prompt = "Input Image Name" }
file mask_fn      { prompt = "Mask Image Name" }
real value1       { prompt = "Input Value" }

# main

begin

# delete temporary files (before main routine)

if( access( temp_fn ) == 1 ){
    delete( temp_fn )
}

# main routine
    
# delete temporary files (after main routine)

    delete( temp_fn )
        
bye

end

# end

環境設定

cl consoleで、"BackSpace" keyを有効にする。

(ecl時代には不要な設定)
login.cl に以下を追加。

stty erase ^H

コマンドライン

コマンドヒストリ関連

困りごと

"INTERNAL ERROR: parser gagged"エラーが出る

clスクリプトを走らせたら、
ecl> binstddev
INTERNAL ERROR: parser gagged
     called as: `binstddev ()'
のようなエラーが出たとき。

-> clスクリプトの最後の "end"のあとに、改行が漏れている、など。

X11IRAF

xgterm

Shift + Insert : 文字列張り付け
Shift + PgUp, PgDn : スクロール

[index]


秋田谷 洋