190 likes | 372 Views
제 12 장 프로그래밍 기초 3/3. 전산천문학 2. 2007. 가을. Mission. 아스키자료 입출력을 포맷문을 이용하여 할 수 있다 . 계산의 효율성을 위하여 , 자주 쓰는 입출력문을 분리하여 , 변수로 저장해서 불러 쓸 수 있다 . 외부 루틴 및 내장 루틴을 사용하여 , 효율적인 프로그래밍을 할 수 있다 . 시스템 변수를 사용하여 , 여러가지 형태의 그래프를 그릴 수 있다. 아스키 파일 읽기. 아스키 파일 읽는 원리 줄 단위의 파일 읽기 한 줄에서 해당하는 변수는 포맷문으로 구별
E N D
제 12 장 프로그래밍 기초 3/3 전산천문학 2 2007. 가을
Mission • 아스키자료 입출력을 포맷문을 이용하여 할 수 있다. • 계산의 효율성을 위하여, 자주 쓰는 입출력문을 분리하여, 변수로 저장해서 불러 쓸 수 있다. • 외부 루틴 및 내장 루틴을 사용하여, 효율적인 프로그래밍을 할 수 있다. • 시스템 변수를 사용하여, 여러가지 형태의 그래프를 그릴 수 있다.
아스키 파일 읽기 • 아스키 파일 읽는 원리 • 줄 단위의 파일 읽기 • 한 줄에서 해당하는 변수는 포맷문으로 구별 • 포맷문으로 구별된 변수 혹은 배열을 미리 선언해주어야 한다. • 여러 줄의 아스키 파일의 경우 반복문이 필요하다. • 포맷문 • 아스키에서 한 줄의 변수들을 구분하는 포맷을 만든다. 그러나, 중요한 것은 반복시에도 모든 줄에 공통적으로 적용되는 형식을 찾아 내야 한다. • 포맷문은 문자열 형식의 변수로 사용할 수 있다. 즉, 포맷을 나타내는 형식을 하나의 변수로 저장할 수 있다. • 포맷문 사용 예제 ‘(한줄 변수의 형식을 단어단위로) • 빠르게 자료를 확인하고자 할 때는 ascii_template을 이용해서 읽는다. 그러나, 자료의 분석을 위한 자료 입출력일 경우에는 포맷문을 사용하는 것을 권장한다. • 대부분의 경우 자료배포자가 포맷을 알려주지만, 연습을 위하여는 반드시 포맷문을 연습해 볼 가치가 있다.
Training • NGC 2168.dat 연습 • 이 파일에 적합한 포맷문을 이용하여 자료를 읽어보시오. • Logic • 어떤 변수 혹은 배열로 읽을 것인가? • 변수 선언 (필요한 변수와 배열의 크기) • 파일 열기 (openr, lun) • for 0, {줄수 -1} do begin • readf,lun, a01, a02,a03……..a11 • 한줄의 변수갯수 (포맷문에서 지정한 자리의 개수와 동일) • fmt='(2x,i4,2f8.3,4f7.3,1x,4f6.3,x,4i2)‘ : example
좀 더 편한 방법은 없을까? 누가 만들어 놓은 걸 이용하면 어떨까?
외부루틴 사용법 • 30년 동안 만들어 놓은 많은 유산(Heritage)이 있음 • 외부루틴을 잘 이용하는 방법도 훌륭한 프로그래밍 기법 • IDL의 외부 루틴들은 모두 확장자가 .pro인 파일로 끝남. • IDL은 프로시저나 함수가 호출될 때 자동으로 호출된 프로시저.pro 또는 함수.pro를 찾아 컴파일하고 실행합니다(사용자는 과정에 대해 신경쓸 필요는 없습니다). • IDL의 자동 검색 경로에 등록되어 있는 디렉토리에 프로시저나 함수를 복사하면 사용할 수 있다. • 개인이 만든 함수와 프로시저의 사용방법과 동일 • 그러나, 프로그램 소스를 보고 사용법을 읽힐 줄 알아야 함
가장 대표적인 외부루틴은? IDL Astro Astronomy IDL Library http://idlastro.gsfc.nasa.gov/
READCOL.PRO • 대부분의 과학자료들은 열 단위의 자료 형식 • 줄 단위의 아스키입력 형식이 불편함 • 정확한 변수 선언이 필요함 • Readcol, filename, a,b,c,d,e….. • 윗부분의 헤더 등을 자동으로 검색하고, 줄의 끝을 판별하여 배열로 생성하여 줌 • 그러나, 많은 열과 자료가 있는 경우 연산이 느려질 수 있고, 읽을 수 있는 열의 수가 제한적임 • 자 그렇다면, readcol을 이용하여 자료를 읽어보십시요.
히스토그램을 그리려면? 고생하여 프로그래밍 하기 전에 유용한 루틴이 있나 찾아보자
Plothist.pro • plothist, arr, a,b,/keyword • arr : 히스토그램을 그리고자 하는 변수 • a : 범위(디폴트:1)의 중간값 • b : 범위에 해당하는 개수 • /keyword : 다양한 키워드 • /nodata : a,b 만 계산하자 • /fill, color=100 • /fill, /fline • /fill, /fline, forientation=45, fspacing=1,fcolor=100 • 1학기 퀴즈 성적에 대한 히스토그램을 그려보자
LEGEND.PRO • 플롯에 범례(legend)추가 • Legend,/help • legend,['Plusign','Asterisk','Period'],psym=[1,2,3] • /RIGHT, /LEFT, /TOP, /BOTTOM, /CENTER
VSYM.PRO • 천문학에서 사용하는 슈퍼몽고(Super mongo) 스타일의 심볼 사용 • 사용법 • Psym=8 지정하여 플롯 • vsym, 꼭지점수(최대 24), /키워드 • keyword : /star, /skeleton, /fill, rot=45 • PLOT, OPLOT, PLOTS 등에서 PSYM=8 키워드를 설정하여야 vsym으로 생성한 심볼로 그림
한 개의 윈도우에 여러 개의 그래프를 한꺼번에 그리고자 한다. 어떻게 해야 하나? !P.multi 시스템 변수 이용
! P.multi • !로 시작하는 변수 : 시스템 변수 • 변경하여 다양한 결과를 얻을 수 있으나 항상 기본값으로 복원하는 것을 습관으로 한다. • 대표적인 시스템 상수 : !pi, !dtor, !degtor • 다중플롯을 위한 시스템 변수 • !p.multi=[0,2,3,0,0] 또는 !p.multi=[0,2,3] • x 방향으로 2열, y방향으로 3행, 즉, 총 여섯개의 그림 • 나머지 변수는 디폴트 0 (남은 그림수, z 뱡향 그림, 그리는 방향) • 다그린후 꼭 디폴트값으로 변환할 것 • !p.multi=0
training • !p.multi=[0,2,2] • Plot,indgen(10) • Contour,dist(40) • Shade_surf, dist(40) • Surface,dist(40) • !p.multi=0
hw01 • 제출일 : 2007년 11월 5일 자정까지 • 13장에서 배운 것을 이용하여, ngc2168.dat를 읽고 이를 바탕으로 다양한 색-등급도와 히스토그램을 그리는 프로그램을 완성하시오. • 본 과제는 조별로 제출하되, 제출 후 조별로 퀴즈를 실시할 예정입니다. • 퀴즈를 볼 대상자는 임의로 선택되므로, 모든 구성원이 숙지할 수 있도록 협동하기 바랍니다.