IDL 천문관측 및 실험 1
목차 IDL 이란 ? 기본적인 유용한 함수들 그래프 그리기 & 이미지 기본적인 프로그래밍
IDL 이란 ? IDL 의 장점 (vs fortran,C) – 프로그래밍 및 그래프를 동시에 할 수 있다. – 유저 친화적이다. – 천문학에 특화된 다양한 함수들이 있다. – 데이터 형 변환이 유연하다
IDL 특징 두 가지 실행방식 – 명령어 창을 이용 간단한 계산에 용이 – 프로그래밍 복잡하거나 지속적인 계산에 용이 파일을 저장 ∙ 컴파일 해야 실행이 된다. 행의 길이 제한이 없다. 대소문자를 구별하지 않는다. 변수선언을 미리 해줄 필요가 없다. – 또한 경우에 따라서는 자의적으로 문자간의 변환을 해준다. – 단 변수는 첫 글자가 숫자로 시작할 수 없고 특수문자 % 는 사용이 불가능 하며, _ 를 제외한 특수문자는 변수의 첫 글자로 사용될 수 없다 ) 내장된 기본함수 외에 다양한 외장함수가 있다. – 도움말이 필요할 때 기본함수는 ? ( 함수명 ), 외장함수는.comp ( 함수명 ) 을 명령어창에 입력해준다.
기본 중의 기본 기호 / 명령어 사칙연산자 : +,-,*,/ 거듭제곱 : ^ 줄연결 : $ 줄바꿈 : & 주석 : ; 변수확인 : help 초기화 :.res 브레이크 : control + c 오류수정완료 : control + r 출력 : print,
대표적인 데이터형식 형식명특징기본어레이증가어레이변환형 Integer 정수형 (-32768~32767) IntarrIndgenFix Float 실수형 빠르고 가볍지만 정밀도는 떨어짐 FltarrFindgenFloat Double 실수형 정밀도는 높지만 느리고 무겁다. DblarrDindgenDouble String 문자열 StrarrString 이외에도 Long, Ulong, complex 등등 다양한 데이터형식이 있다.
데이터 형식 예제 명령창에 다음을 입력하시오 –A=3 –B=8 –C=9.43 –D=9.43d0 –E=‘SNU’ –F=string(d) –G=fix(d) –fmt=‘(F12.8)’
데이터 형식 예제 명령창에 다음을 입력하시오 –Print, a,b,c,d,e,f,g – 사칙연산 Print, a+b Print, a+c Print, f+e Print, strtrim(f,2)+strtrim(e,2) –Float 과 Double 의 차이점 Print, c, format=fmt Print, d, format=fmt – 형식 변형 예시 및 주의점 H=a+b & I=b+c & J=c+f Print, h, I, j Print, a/b
Array 순서가 있는 집합 –A=[ 석민, 범석, 현종, 재응 ] –B=[ 범석, 현종, 재응, 석민 ] – 두 집합 A,B 는 같다. – 두 Array A,B 는 다르다. IDL 에서 Array 는 0 부터 시작된다. –K=findgen(10)+1 –Print, k –Print, k[4] –H=k[4:7] –Print, h –i=findgen(3,4) –Print, i
여러 내장 함수 / 상수 삼각함수들 : sin, cos, tan, sinh, asin 로그함수 : alog, alog10 지수함수 : exp 절대값 -abs, 루트 -sqrt, 최대 -max, 최소 -min, 중간값 -median, 평균 -mean 상수들 : !pi, !dpi, !radeg, !dtors
그래프 그래프 그리는 작업은 명령 창에서 수행이 불가능 한 것은 아니지만, 프로그래밍을 추천한다. 프로그램의 맨 마지막에는 반드시 end 가 있어야한다. 프로그래밍 시 제일 앞에 다음과 같은 문구를 입력하자 –Device, decomposed=0 ; True color vs DirectColor visuals –Loadct, 39, /sil ; 칼라테이블을 읽는다. 39 번은 흑백 + 레인보우, 13 은 흑백. /sil 은 명령창에 출력하지 말고 조용히 불러들이라는 뜻. ( cf. xpalette (SeLab 자료실에 제공하는 ) cindex –!p. background=255 & !p. color=0 ; !p. 는 plot 에 대한 명령어. 이 후 기본적으로 배경은 255 번 색, 칼라는 0 번색으로 지정.
그래프 그래프 명령어들 –Plot: 가장 기본적인 명령어 –Oplot: 기존 윈도우에 덮어씌워서 그린다. –Plots: Array 가 아닌 하나의 점도 그릴 수 있다. –Ploterror: 십자모양의 에러바를 그려준다. –Oploterror: 에러바 그래프를 기존 윈도우에 덮 어씌운다.
그래프 Seed1=systime(1) & seed2=2*seed1 X=findgen(22)*0.5 Y=findgen(22)*2 Z=findgen(22) Xerr=0.2*randomu(seed1,22) Yerr=0.7*randomu(seed2,22) Zerr=0.3*randomu(xerr[21],22) X=x+xerr Y=y+yerr Z=z+zerr
그래프 plot – 기본적인 그래프 그리기 Plot, y Plot, x, y – 색 바꿔 그리기 Plot, x, y, color=125 –X,Y 범위 및 Label, title Plot, x, y, xr=[0,10], yr=[0,40], xtitle=‘x’ ytitle=‘y’, title=‘Graph test’ – 점 / 선 / 점과선 함께 그래프 그리기 Plot, x, y, psym=4, symsize=2 Plot, x, y, linestyle=3, thick=2 Plot, x, y, psym=-4, linestyle=3
그래프 plot – 축의 스타일 Plot, x, y, xstyle=9, ystyle=8 Plot, x, y, /xst, /yst –1: 정확히 데이터 범위만큼 축을 지정 (=/xst) –2: 축의 범위에 약간의 여유를 둠 –4: 축을 그리지 않음 –8: 축을 한 쪽만 그림 –16: x,y 축의 교점이 0 이 되지 않도록 함 (ystyle 에 해당 ) – 눈금스타일 Plot, x, y, ticklen=1 Plot, x, y, yticklen=1, ygridstyle=2 Plot, x, y, xr=[0,10], xtick=5, xminor=4
그래프 Plot – 축 및 Label 키우기 Plot, x, y, xtitle=‘x’ ytitle=‘y’, title=‘Graph test’, charsize=1.3 – 로그스케일 Plot, x, y, /xlog – 데이터 그리지 않기 Plot, x, y,/nodata
그래프 Oplot Plot, x, y Oplot, x, z, color=125 동시에 2 개의 창을 띄우고 싶을땐 ? Window,0 Plot, x, y Window,1,xs=500, ys=400 Plot, x,z
그래프 Ploterror –Ploterror,x,y,xerr,yerr Oploterror –Oploterror,x,z,xerr,zerr
그래프 그래프 툴과 관련된 유용한 명령어들 –Xyouts: 그래프 상에 텍스트를 print 할 수 있다. Xyouts,7,30,’Astronomy’,/data –/data: data 값 기준 –/normal: 창의 상대크기 –/device: 창의 픽셀 –Legend: 범례를 만들 수 있다. Legend,[‘y’,’z’],color=[0,125],linestyle=[0,0],/left,/to p
이미지 Tv, tvscl : 이미지를 디스플레이함. Tvscl 은 값을 normalize 시켜서 디스플레이 ( 변수명 )=readfits( 파일명 ) : Fits 파일을 읽 음
프로그래밍 조건 명령어 –Ge: 크거나 같다 (greater or equal) –Gt: 크다 (greater than) –Le: 작거나 같다 (less or equal) –Lt: 작다 (less than) –Eq: 같다 (equal) –Ne: 같지 않다 (not equal)
프로그래밍 유용한 명령어 – Where( 조건문 ) : 조건문에 만족하는 항들의 위치를 Array 로 받아줌 A=findgen(10) B= where (A ge 5) C= where (A eq min(A)) Print, b Print, c Print, A[B]
프로그래밍 유용한 명령어 – Readcol,( 파일명 ),( 줄형식 ),( 변수명 ),/sil : 텍스 트파일의 컬럼들을 각각 Array 로 지정 Readcol, ‘c:\abc.txt’,f=‘(a,i,x,f)’, name, index, value, /sil –A: String –I: integer –X: 읽지 않음 –F: float –D: double
프로그래밍 유용한 명령어 –File_search( 파일조건 ) : 디렉토리의 조건을 만 족하는 파일을 찾는다. Cd 명령어를 통해 디렉 토리를 바꿀 수 있음 Cd, ‘c:\abc\’ Result=file_search(‘*.fits’) Print, result
프로그래밍 유용한 명령어 –N_elements ( 변수 ) : 변수의 전체 개수 Seed=systime(1) A=randomu(seed,20) Print, n_elements(a)
프로그래밍 For 구문 –For ( 변수 )=( 시작 ),( 끝 ),( 간격 ) do begin –( 내용 ) –Endfor – 변수값이 시작값에서 끝값까지 바뀌는 동안 안 의 내용을 반복함
프로그래밍 For 구문 – 피보나치 수열을 출력해보자 A1=1 & a2=1 Print, a1 Print, a2 For i=0, 10 do begin A3= a1+a2 a1=a2, a2=a3 Print,a3 endfor
프로그래밍 IF,else 구문 – 한줄로 사용할 때 If (a lt 10) then print, a If (a lt 10) then print, a else print, 10 – 블록으로 사용할 때 If (a lt 10) then begin B=a endif – 블록으로 여러 번 사용할 때 If (a lt 10) then begin Endif else if (a gt 30) then begin Endif else begin endelse
프로그래밍 While – 해당 조건을 만족하면 계속 수행 –( 비추천 ) – 한줄 사용시 While ( 조건문 ) do – 블록 사용시 While ( 조건문 ) do begin endwhile
프로그래밍 파일 열기 및 쓰기 – 파일열기 Openr,( 파일번호 ),( 파일명 ) ; 파일을 읽음 Readf,( 파일번호 ),( 변수명 ) ; 첫줄을 읽어 변수명에 저장 Readf,( 파일번호 ),( 변수명 ) ; 다음 줄을 읽어 변수명 에 저장 … Close,( 파일번호 )
프로그래밍 파일 열기 및 쓰기 – 파일열기 예시 Openr, lun1, ‘c:\abc\test.txt’,/get_lun Readf,lun1, oneline Print, oneline Readf,lun1, oneline Print, oneline Close, lun1
프로그래밍 파일 열기 및 쓰기 – 파일 쓰기 Openw, ( 파일번호 ), ( 파일명 ) Printf, ( 파일번호 ), ( 쓸내용 ) Close,( 파일번호 )
프로그래밍 파일 열기 및 쓰기 – 파일 쓰기 예시 Openw,lun2, ‘c:\abc\test.txt’,/get_lun For i=0,5 do begin Printf, lun2, i, 2.*i Endfor Close,lun2
프로그래밍 문자변수 자르기 –Strmid( 변수명, 시작지점, 개수 ) –A=‘abcdefgh’ –Print, strmid(a,2,3) –Print, strmid(a,5,2,/reverse)