便利
>? helpのためのwindowが表示される
>$ IDLを終了してもとのLinuxに戻る
>retall 起動したての状態に戻る
>journal このコマンド以降に打ったコマンドを.proというファイルに残してくれる >retallをすると>journalも終わってしまうので注意
& 一行に複数のコマンドを打つ
$ 一行の最後に書くと、次の行に継続される
print,string(7B) ブザー音を鳴らす 時間がかかるプログラムの最後とかにつけると便利

カラーパレット
>loadct,[0~39] 準備されているカラーパレットの中から選んでload 0:白黒 39:Rainbow
>xloadct 準備されているカラーパレットの閲覧 Doneを押したら、そのカラーパレットを使って表示するようになる
>xpalette 画像を表示するときの色を手動で設定
>xpalette (設定してからDoneを押す)
>tvlct,r,g,b,/get
>savegenx,file='hoge.geny',r,g,b
xpaletteで作成したカラーパレットを保存
>restgenx,file='hoge.geny',r,g,b
>tvlct,r,g,b
保存したカラーパレットをloadして表示のために使う r,g,bという変数に値を代入している。r,g,bという名前でなくても良い。
>plot,data,color=fsc_color('green') 色を名前で指定 http://www.dfanning.com/programs/fsc_color.pro
>set_line_color 代表的な色はカバーしている。color=2はyellow, color=3はred, color=はがblue。 http://sohowww.nascom.nasa.gov/solarsoft/gen/idl/display/set_line_color.pro

tifファイルの読み書き
>a=read_tiff('hoge.tif') aという変数に代入
>write_tiff,'hoge.tif',a aというデータをtifファイルに書き出し !! デフォルトでは8bitで保存 !!
>write_tiff,'hoge.tif',a,/long (,/float) aというデータをlong形式で(float形式で)tifファイルに書き出し

画像の保存・表示
>thisDevice=!D.NAME >set_plot,'ps'
>device,filename='test.ps'
>device,/color
>plot,test,title="test" etc
>device,/close
>set_plot,thisDevice
画像をpsファイルとして保存する 出力する場所を画面からpsに変更
出力するファイル名を設定
カラー画像にしたいときにつける
コマンドの結果がtest.psに保存される
test.psを閉じる
出力先を画面に戻す
>xv 画像を保存する xvの画面で右クリック
操作用のウィンドウがでる
Grab をクリック
小さい画面がでるのでその画面のGrabをクリック
保存したいウィンドウを最前面にしてクリック
Save をクリックして保存。そのときフォーマットをgifやPostscript(PS)に指定
>gv test.ps psファイルを表示
>xv test.gif gifファイルを表示
>read_gif,'test.gif',img gifファイルをIDLで読み込む
>set_plot,'ps'
>device,filename='filename.eps',xsize=??,ysize=??,xoffset=1,yoffset=2,(/color),/encapsulated,bits=8
>tvsclなど
>device,/close
epsファイルを作る xsizeとysizeはcm単位
>set_plot,'ps'
>device,filename='filename.eps',xsize=??,ysize=??,xoffset=1,yoffset=2,(/color),/encapsulated,bits=8
>!p.font=0
>device,set_font="Times-Roman"
>tvsclなど
>device,/close
Fontを指定してepsファイルを作る 他にもCourier, Helvetica, Times Bold, Times Intalic, Times Bold Italicなどがある
>write_png,'test.png',tvrd(/true) 表示されているカラースケールのまま保存する
>set_plot,'z'
>device,set_pixel_depth=24,decomposed=0
>write_bmp,'test.bmp',tvrd(true=1)
表示されているカラースケールのまま保存する(Z buffer)
>print,size(array) arrayの次元、pixel数、type(int型、string型など)、要素数を表示
>stepper,data,xsize=(size(data))[1] 3次元データのステッパーを拡大して表示する
xroi.pro 使い方はdavid fanning参照 画像の一部をX上で直線や曲線など、自由に選択する http://www.dfanning.com/ip_tips/xroi.html
>thisDevice=!D.NAME
>set_plot,'ps'
>device,xsize=30,ysize=16,filename='??.eps,/encapsulated,bits=8
>!p.font=0
>device,/tt_font,set_font='Times',font_size=12
>!p.thick=4 & !x.thick=4 & !y.thick=4
>plot,test,xr=[??,??],xs=1,yr=[??,??],ys=1,position=[0.1,0.1,0.96,0.96],ticklen=-0.025
>device,/close
>set_plot,thisDevice
(epsの連番をQuickTimeでムービーにするにはlinux上でjpgに変換)
convert *.eps -quality 99 test.jpg (test-01.jpg,test-02.jpgが出来る)
論文で使うきれいなepsを作るためのイロイロ
>truecolorimage=bytarr(nx,ny,3)
>truecolorimage[*,*,0]=bytscl(data1,min=0,max=100)
>truecolorimage[*,*,1]=bytscl(data2,min=0,max=450)
>truecolorimage[*,*,2]=bytscl(data3,min=10,max=300)
>plot_image,truecolorimage
how to produce composite image from multiple images?

Program
>.r test プログラムtest.proを実行
>.c stopで一時停止したプログラムを続きから実行
function (procedure)
////program////
end
programの中で使うfunctionをsubroutineとして作成
@subroutine_test
pro mainroutine
...
end
programの中で使うsubroutineが別ファイルとして存在している場合
>a=100 & b=5
>while (i=a-b gt 50) do begin & a=a-b & print,a,b,i & endwhile
while()の条件を満たす限り繰り返す

テキストファイルの読み込み
>openr,1,'x.txt'
>readf,1,format='(3i5)',x,y,z
>close,1
ファイルを書式を指定して読み込む 書式指定子はFortranと同じ
>openw,1,'x.txt'
>writeu,1,d
>printf,1,d,format="(4f3.3)"
>close,1
ファイルを書式を指定して書き込む 書式指定子はFortranと同じ
>u=fltarr(x,y)
>openr,1,'x,dat'
>readu,1,x,y
>close,1
配列を宣言してファイルを読み込み
>a=rd_tfile('test.txt')
>a=rd_tfile('test.txt',5)
txtファイルを読み込む 下の例は、5列のデータファイルを読み込むとき
readcol,'Acton_transmission.txt',F='F,F',wavelength_nm,transmission_percent リストファイルを読み込む フォーマットの指定 F='A' 文字列, F='I' 整数, F='F' 小数
wavelength_nm,transmission_percentという変数名に値を保存
>a=file_info('test.pro')
>help,a,/structure
ファイルの情報を調べる 名前、属性、サイズなど
>a=is_dir(dirname) dirnameというディレクトリがあればa=1,なければa=2

ファイルリストの作成
a=file_search() current directoryにあるファイルのリスト
a=file_search('/home/watanabe/','*.txt'count=nn) /home/watanabeの中のtxtファイルのみのリスト
>a=file_search('~/[a-d]*',/test_directory) /home/watanabe/にある、a-dで始まるディレクトリのみのリスト
>a=dialog_list(file_list) file_listが別windowで表示され、その中で一つ選ぶ
>a=findfile('*.tif',coount=nn) current directoryにあるtif拡張子を持つファイルリスト

Time
>a=anytim2tai(index.date_obs)
>a=anytim2cal(t,/time) hh:mm:ssを表示 tはanytim2taiで計算した秒数
>a=(anytim2utc(index.date_obs)).time/1000d0 その日が始まってからの経過秒数

プロット
>plot,xx,yy,xr=[?,?],yr=[?,?] 横軸にxx,縦軸にyyを表示させてプロット xxとyyの要素数は同じ
>plot,data,xtickname=[' ',' ',...] x軸のメモリに値を表示させない
>plot,!x.crange,[0,0] x軸と平行に線を引く
>plot,[10,10],!y.crange y軸と平行に線を引く
>a=findgen(17)*(!pi*2/16.)
>usersym,2*cos(a),2*sin(a),/fill
>plot,function,psym=8
ユーザー定義のsymbol markでplotする。 この場合は中黒点
>plot,function,/nodata,xstyle=4 データ点をプロットしない。x軸を表示しない。
>arrow,x0,y0,x1,y1 始点(x0,y0)から終点(x1,y1)に矢印を書く
>plot,data,psym=symcat(9,thick=3),symsize=3 色んなシンボルでプロット psym=-symcat(9)とすると、シンボルを線でつないでくれる
>axis,yaxis=1,ystyle=1,yrange=[0,4] 左右で違うy座標を表示する http://idlastro.gsfc.nasa.gov/idl_html_help/AXIS.html
>color_bar,widthx,widthy,x0,y0,min=0,max=500 カラーバーを表示。[x0,y0]はカラーバーの左下のdevice座標
>legend,['this line','that line'],psym=[4,6] psymやlinestyleで書いたプロットのlegendを書く http://www.astro.washington.edu/docs/idl/cgi-bin/getpro/library02.html?LEGEND/

配列・書式
a=fix([1.2,5.9]) int型に変換。小数点以下切捨て。 aはint型[1,5]となる
data=replicate(a,n1,n2) 要素が全てaでn1*n2の配列
re=real_part(a) & im=imaginary(a) 複素変数aの実習部分、虚数部分を取り出す
b=reform(a) a(m,1,n)の配列をb(m,n)に変換

配列計算
b=transpose(a) 転置行列を求める
b=fft(a,-1) -1を-1にしたら逆フーリエ変換 横軸の説明は?参照
b=a < 100 aの要素のうち100以上のものをすべて100にする
b=total(a,n) 次元nにそって配列aを合計する
b=where(a gt 20,count) 20より大きい要素の場所と数(count)を求める
result=interpol(vector,abscissa,new_abscissa) 任意のx座標での補間値を計算 homepage
result=interpol(vector,abscissa,new_abscissa) 2つの配列の相関係数を計算 homepage
result=fshift(image,delx,dely) 少数値までで配列をシフト homepage

!定数
!radeg radianをdegree単位に変換 180.0/!pi=!radeg=57.2958
result=interpol(vector,abscissa,new_abscissa) 任意のx座標での補間値を計算 homepage

文字列の操作
>print,strlen('This is test.') 文字列の長さを表示
>print,strmid('This is test.',5,2) 5文字目から2文字分を表示 表示結果は'is'
>print,strpos('This is test.','is') 'is'が文字列の中で何番目の文字から始まっているかを表示 表示結果は5
>print,string(format='(i4.4)',50) 文字列'0050'を表示
c=strcompress(c,/remove_all) 文字列cの中の空白をなくす
str = 'Out, damned spot! Out I say!'
print, (STRJOIN(STRSPLIT(str, /EXTRACT), ':'))
文字列の空白を:で置き換える
c=textoidl("gamma_{0}") ギリシャ文字や指数の文字列をつくる http://physweb.mnstate.edu/mcraig/textoidl/からダウンロード
embedded formatting commands http://idlastro.gsfc.nasa.gov/idl_html_help/Embedded_Formatting_Commands.html
print,string(13b)+' % finished: ',float(i)*100/(nn-1),format='(a,f4.0,$)' progress status in program
オングストローム Åを表示 print,STRING("305B);"
ps bufferでオングストローム Åを表示 set_plot,'ps'
!p.font=0
device,/isolatin1
angstrom=string(197B)
!p.font=-1
set_plot,'x'
set_plot,'ps'
!p.font=0
device,xsize=???,...
!p.font=0
plot,test,xtitle=angstrom

SolarSoftware
SOT FG/SP Data Analysi Guide Hinode Science CenterでのSP Milne Inversionの方法など
>plot_nar,'4-mar-07 01:15:00'(,/text,chars=?,chart=?) 太陽全面にNOAA番号と場所を表示する
>plot_goes,'3-may-07' GOESのプロットを描く
>image2movie,filelist,/java java script movieのhtmlファイルを作成
>index2map,index,data,map
>plot_map,map,cen=[??,??],fov=[???/60.,???/60.],dra=[???,???]
mapを描く
成影さんプログラム 太陽全面のポテンシャル磁場
>plot_box,100,100,50,50,/dev device座標で(100,100)を中心とした50X50pixelの長方形を描く
map2=shift_map(map,10,10) mapをmap.units単位で移動させる
>goes GUIでgoes plotを操作。File->Create Plot Fileでイメージの保存も出来る
>character=get_kbrd(1) keyboard inputを待って、一文字をcharacterにおさめる
>transform=shift(fft(image),imageSize[0]/2,imageSize[1]/2)
mask=hanning(imageSize[0],imageSize[1])
maskedTransform=transform*mask
inverseTransform=fft(shift(maskedTransform,imageSize[0]/2,imageSize[1]/2),/inverse)
HanningFilteredImage=real_part(inverseTransform)
Hanning Filter (low frequency informationを維持して、noiseを落とす) 参考URL http://www.ifi.uio.no/it/latex-links/STORE/opt/rsi/idl/help/online_help/Removing_Noise.html
dt=30
time=FINDGEN(n_elements(data))*dt
wave = WAVELET(data,dt,PERIOD=period,COI=coi,/PAD,SIGNIF=signif)
nscale = N_ELEMENTS(period)
LOADCT,39
CONTOUR,ABS(gwave)^2,time,period, $
XSTYLE=1,XTITLE='Time',YTITLE='Period',TITLE='Wavelet Granule', $
YRANGE=[MAX(period),MIN(period)], $
/YTYPE, $ ;*** make y-axis logarithmic
NLEVELS=25,/FILL,chars=1.5
PLOTS,time,coi,NOCLIP=0 ;*** anything "below" this line is dubious
wavelet変換とそのパワー分布表示
smoothdata=smooth(data,[50,50]) 二次元データのスムージング
enlargedata=congrid(data,500,500,/interp) congridは任意の倍率に拡大する。さらにそれを/interpするとスムーズになる。
cor=correl_images(image1,image2) image1とimage2の相関係数を求める
ocontour,data,40,30,c_linestyle=3,c_color=3,levels=[10,20] 表示した図の上に等値線を引く
drot_xy,-100,-26,'2008-08-04 06:06:30UT','2008-08-04 07:30:00UT',x,y '2008-08-04 06:06:30UT'に[-100arcsec,-26arcsec]にあったものが、差動回転で'2008-08-04 07:30:00UT'に[x,y]に来る
caldat,julday(12,01,2008)-1,d,m,y 2008-12-01の前日はy年d月m日
jdcnv,2006, 8, 25, 8+49./60, jd ;calculate julian date
baryvel, jd, 2000, vh, vb ;2000 is epoch (bunten)
sunpos, jd, ra, dec, longmed, oblt, RADIAN = radian ;compute the RA and Dec of the Sun
radial_velocity = vb[0]*cos(dec)*cos(ra) + vb[1]*cos(dec)*sin(ra) + vb[2]*sin(dec)
2006-08-24 08:49UTの視線速度測定への地球の自転補正分を計算する
baryvelは月と地球の相互作用も考慮に入れているので、精度は1m/s
print,conv_a2h([940,0],'2010-Jun-03') arcsecondの座標表示をheliocentric coordinateに変換
>a=anymin2hel(xx,yy,date=date) xx,yy[arcmin]からheliographic coordination (lat, long [degree])に変換
>print,diff_rot(rot_days,latitude) latitude[degree]でrot_dayだけ差動回転したときの回転角[degree]

Download convenient procedures
crispex 3次元データキューブを読み込み、ムービーだけでなくスリット上のタイムスライス、スペクトルの時間変化など、様々なwidget機能が使えるプログラム http://folk.uio.no/gregal/crispex/index.html

window
!p.charsize=2. フォントサイズを設定
window,xp=100,yp=200 screenの[100,200]を左下にしたwindowを表示
http://www.sys5jp.net/simplest/hyou.php?act=5