課題研究S2メモ

$Date: 2004/03/05 14:15:51 $

IDLの備忘録

入出力

print,var1, ...
printf,unit,var1, ...
read,prompt=prompt,var1, ...
readf,prompt=prompt,unit,var1, ...
cursor,x,y,wait,/座標系
save,var1,var2, ... ,filename=filename
restore,filename=filename

テキストファイルの読み込み (後で書く)

バイナリファイルの読み込み (後で書く)

定数

演算子

result=a>b (Maximum Operator)
abのうち大きい方の値を返す。
result=a<b (Minimum Operator)
abのうち小きい方の値を返す。
result=a+b
文字列abを結合する。

配列

a(2)b(2,5)*c(2)(*d)(2)
配列の要素を得る。左から1次元配列、2次元配列、ポインタの配列、配列へのポインタの指定した添字の要素をそれぞれ得る。ここでは逆参照演算子の優先順位はC言語に準じる。
array(4:8)array(4:*)array(*,0:8,4)
配列のスライスを得る。
array=[5,4,2,1]
配列を作成する。IDLでは何も指定しないと配列の添字は0から始まる。
array=[a,5]
配列arrayの末尾に要素を追加する。
array=[[0,4],[2,1]]
2x2正方行列を作成する。多次元配列の要素のメモリ内での順番は、array(0,0), array(1,0), array(2,0), ... , array(0,1), array(1,1), ... となる。すなわちFortranと同じ。
a=intarr(20) & b=fltarr(20) & c=dblarr(20) & d=strarr(20)
要素数を指定してinteger/float/double/stringの配列を作成する。nozeroキーワードを指定するとゼロクリアを行わない。
array=intarr(10,10)
多次元行列の場合は次元ごとの要素数をコンマで区切って作成する。
a=indgen(60) & b=findgen(60) & c=dindgen(60)
0〜59の値が順に入ったinteger/float/doubleの配列を作成する。
result=n_elements(array)
配列arrayの要素数を得る。
result=min(var)及びresult=max(var)
varの最小値・最大値を取得できる。SSWが使えるときはminmax関数で最小値、最大値を並べたリストを取得できる。
result=where(ExpArray)
抽出(条件ExpArrayにマッチする要素の添字リストを得る)
result=reform(array,4,10,3)
配列の要素数を変更しないで配列の次元を変換したものを返す。変換の前後でメモリ内での要素の順序は変化しない。次元を省略すると長さ1の次元を削除したものを返す。overwriteキーワードを用いarray=reform(array,4,10,3,/overwrite)とすることで、データのコピーを行わずにarrayの形状を変化させることができる。
rebin (整数倍率のサイズ変更)、congrid (任意倍率のサイズ変更)、transpose (転置)、rot (任意の角度で回転)、rotate (90°単位で回転)、sort (ソート)、reverse (逆順)、shift (回転シフト)、invert (逆行列)、cond (固有値)、determ (行列式)
なにかと便利な配列操作関数達。

構造体

ポインタ

a=ptr_new(b)
新しいヒープ変数にbの値をコピーし、それを指すポインタを作成する。
a=ptr_new(b,/no_copy)
ヒープ変数bを指すポインタを作成し、bを未定義にする。すなわちa=ptr_new(temporary(b))と同じ。
a=ptr_new()
NULLポインタを作成する。
a=ptr_new(/allocate_heap)
未定義のヒープ変数を指すポインタを作成する。
a=ptrarr(10)
NULLポインタの配列を作成。nozeroキーワードでNULLに初期化されない。allocate_heapキーワードで各ポインタは未定義のヒープ変数を指す。
*a
aが指すヒープ変数を返す。*aが構造体の場合、そのメンバを得るには演算子の優先順位のため(*a).bとしなければならない。
ptr_valid(a)
ポインタaが存在する正しいヒープを指しているときは1、そうでないとき0を返す(Byte型)。
ptr_free,a
ポインタaの指すヒープを解放。a自体は変更されない。
heap_gc
ヒープ変数のガベージ・コレクションを行う。

Window操作

グラフ

plot,y
普通にプロットする。(yは配列)
plot,x,y
xyプロット。(x,yは同サイズの配列)
plot,x,y,xrange=[0,10],yrange=[-20,30]
プロットエリアの範囲を指定する。
oplot
前の結果を消さずにプロットする。ただしxrange, yrangeなどは指定できない。
plot,x,y,psym=n
マーカーを指定する。(nは0から7の整数)
plot,x,y,title='Reconnection rate',xtitle='t',ytitle='R'
グラフ上部、x軸、y軸のタイトルを指定する。
plot,x,y,charsize=1.2
文字サイズを変更する。(標準サイズを1.0とする)
plot,x,y,color=255,background=0,linestyle=0
描画色・背景色・線種を指定する。
erase,color
colorで画面消去する。(色を省略するとシステムの背景色が用いられる)
tv,img,x,y
行列imgをイメージとして表示する。(レベルのスケーリングなし)
tvscl,img,x,y
行列imgをイメージとして表示する。(レベルのスケーリングあり)
contour,mまたはcontour,m,x,y 但しx[x]、y[y]、m[x,y]
等高線を表示する。データ数が少ないときはmmin_curve_surf(m)に置き換えると線がなめらかになる。fillキーワードで段彩図が書ける。

グラフィックスの設定

PSファイルに出力

  1. set_plot,'ps'
  2. device,filename='test.ps',xsize=10,ysize=7.5,xoffset=0.5,yoffset=11,/landscape,/inches
  3. <お絵かきをする>
  4. device,/close_file
  5. set_plot,'x'

カラーのPSファイルを出力するときはdevice,/colorとする。help,/deviceとすると現在の設定を表示。

Zバッファ

help,/device
現在の状態を表示する。
device,set_resolution=[width,height]
サイズを変更する。(デフォルトは640x480ピクセル)
device,/close
メモリーを解放する。

その他

2003/09/18

  1. DARTS(http://www.darts.isas.ac.jp/cgi-bin/darts/solar.cgi)またはFTP(ftp://ftp.darts.isas.ac.jp/pub/yohkoh/)からSXTのデータを取得する。[参考1] [参考2]
  2. sfryymmdd.hhmmが全面像、spryymmdd.hhmmが部分画像。
  3. idlhとしてIDLを立ち上げ、.r yodatとするとファイル名を聞いてくるのでダウンロードしたファイル名を入力する。
  4. Enter the number of data sets to extract: -772
  5. SS Whereダイアログボックスで、Modes:Normal、DP Mode: Flare、Resolution: Full/Half/Quarterのどれか、Compression: Compressed、他の項目(Filters, DPE Values)は全て選択。
  6. Testで条件にマッチしたフレーム数を確認、Selectで実際に選択。
  7. SXT partial imageのキャリブレーション: sxt_prep,index,data,out_index,out_data,/register,/roll,/normalize
  8. 鑑賞: stepper,out_index,out_data
  9. コントラスト・ガンマを調整: xloadct
  10. logをとる: out_data_log=alog10(out_data > 1)
  11. Windowに表示しているイメージをGIFイメージとして保存: write_gif,'hoge.gif',tvrd()
  12. アニメーションGIFを作成:
  13. tvscl,congrid(out_data(*,*,i),256,256)で大きさが指定できる(2003/11/27追記)。
  14. print,get_info(index)としてindexの情報を表示できる。
  15. 台外からアニメーションGIFを作成するには...(2003/12/25追記)
    1. set_plot,'z' ;出力先をZバッファに変更する
    2. いつも通りアニメーションGIFを作る ;X上には表示されない
    3. set_plot,'x' ;出力先をXに戻す

2003/10/23

  1. リムフレアのSXT partial frameをとってくる。
  2. それぞれのデータに対しFull/Half/Quarterごとにprepする。
  3. データを保存: save,out_index,out_data,filename='foo'
  4. 保存したデータを読み込む: restore,filename='foo'

2003/10/30

  1. SS Whereダイアログボックスで、Field of Viewで目的のフレアだけを選択する。
  2. genxデータを保存: savegen,file='filename',out_index,out_data
  3. genxデータを読む: restgen,file='filename',out_index,out_data
  4. logをとる: out_data_log=alog10(out_data > 1)
  5. コントラストとガンマを調整(=xloadct): stretch,min[=0],max[=255],gamma[=1.0]
  6. とりあえずガンマは2.5程度でejectionを探す。
  7. loadct,nでカラーテーブルの指定。n=0で初期状態に戻る。
  8. マップ: prep後のデータ(logはとらない)に対してindex2map,index,data,map
  9. マップを表示: plot_map,map(0)
  10. plot_mapのオプション: /logでlogをとる、/limbでリムを表示、grid=10でグリッドを表示、その他drange=[min,max]、xrange=[min,max]など。
  11. for i=0,n_elements(map)-1 do plot_map,map(i)でアニメーションを表示する。またはGIFアニメ作る。

2003/11/06

  1. HXT データの解析法 (浅井さん)参照。

2003/11/13

  1. Masuda FlareMasuda Flare

2003/11/27

2003/12/04

2003/12/13@飛騨

2003/12/18

2004/01/14

2004/01/16

数値計算

2004/01/23

数値計算

2004/01/29

数値計算

2004/02/04

数値計算

2004/02/05

Masuda型フレアリスト

数値計算

2004/02/12

数値計算

2004/02/16

数値計算結果

2004/02/18

数値計算

2004/02/22

Intel Fortran Compiler 8.0.39のインストールメモ

/home/s2/opt以下にインストールした。

  1. tar xzvf l_fc_pc_8.0.039.tar.gz
  2. rpm2cpio l_fc_pc_8.0.039/intel-ifort8-8.0-47.i386.rpm | cpio -id
  3. cd opt/intel_fc_80/bin
  4. perl -pi.bak -e 's|<INSTALLDIR>|/home/s2/opt/intel_fc_80|g;' ifc ifc.cfg ifort ifort.cfg ifortvars.csh ifortvars.sh
  5. opt以下をホームディレクトリにコピー
  6. echo source ~/opt/intel_fc_80/bin/ifortvars.csh >> ~/.cshrc
  7. ライセンスファイルを~/opt/intel_fc_80/licensesにコピー

本来はln -s ~/opt/intel_fc_80/lib/ifcore_msg.cat /usr/lib/ifcore_msg.catとしてシンボリックリンクを張らなければならない。デバッガとIntel C++ Compilerも同様の手順でインストールできる。全てインストールしたときの合計サイズは約130MB。ujでコンパイラオプション-O3 -tpp7 -axW -xWとして数値計算プログラムの正常動作を確認した。自動並列化はいまいち。

2004/02/25

3月5日発表会

impulsive flareの観測的および理論的研究

  1. introduction
  2. 観測 (method, result)
  3. 理論 (method, result)
  4. discussion (summary)

数値計算 ToDo

2004/03/05

発表会