IDL/New Graphics

SWx Monitor의 플롯 생성 루틴 소개 [1]

이상우_IDL 2011. 12. 15. 18:25
728x90

이 블로그를 통하여 계속 소개되어 왔던 아이폰앱 SWx Monitor에서 표출되는 모든 그림들이 IDL로 생성된다는 것은 다들 알고 계실겁니다. 여기에는 IDL 8.1의 New Graphics 체계의 그래픽 기능이 활용되고 있습니다. 그래서 SWx Monitor상의 여러 그림들 중 GOES X-ray 플롯을 그리는 서브루틴의 내용을 개략적으로 소개해보려고 합니다. 물론 이 코드의 모든 내용을 일일이 소개하려면 너무 장황해지므로, 핵심에 해당되는 부분들만 적당히 추려서 해보도록 하겠습니다.


참고로 이 코드는 내부적으로 'GOES_XR_PLOT.pro'라는 이름으로 되어 있습니다. 코드의 내용을 보면 다음과 같이 크게 세 개의 부분들로 나눌 수 있습니다. 오늘은 먼저 1번에 해당되는 내용만 소개하기로 합니다.


1. 네트웍을 통하여 원시자료 파일들을 다운로드하는 부분

2. 다운로드한 원시자료 파일들을 사용하여 그림을 생성하는 부분

3. 생성된 그림을 파일로 저장하고 이를 웹서버에 업로드하는 부분


여기서 원시자료 파일들이라 함은 미국 SWPC(Space Weather Prediction Center)에서 각종 우주환경자료들의 외부 배포를 위하여 운영중인 FTP에 올라와있는 것들을 의미합니다. 그 중에서도 이 코드에서는 GOES위성의 X-ray 관측자료값들이 담긴 ASCII 자료파일들을 사용합니다. 물론 외부 배포자료용 FTP이므로 Anonymous FTP로 운영되며 주소는 ftp://ftp.swpc.noaa.gov입니다. 이 FTP로 접속한 다음 pub/lists/xray라는 하위폴더안에 자료파일들이 날짜별로 저장되어 있습니다.


먼저 다운로드를 위한 연결을 시작하기 위하여 IDL의 네트웍 객체인 IDLnetURL이라는 클래스를 사용합니다. 용어가 좀 거창한 감이 있지만 별건 아닙니다. 문구 자체는 아래와 같습니다.


oUrl = OBJ_NEW('IDLnetUrl', URL_SCHEME='ftp', URL_HOST='ftp.swpc.noaa.gov', URL_USERNAME='anonymous', $

  URL_PASSWORD='lee@spweather.com', FTP_CONNECTION_MODE=0, CONNECT_TIMEOUT=40)


이와 같은 방식으로 oURL이라는 이름의 객체를 하나 만들어놓음으로써 FTP사이트와의 연결을 열어놓는겁니다. 이 문구에서는 URL_HOST가 사이트 주소에 해당되고, URL_SCHEME은 FTP이므로 'ftp'가 됩니다. URL_USERNAME과 URL_PASSWORD는 뭐 당연히 유저명과 패스워드인데 anonymous FTP이므로 저렇게 지정하면 됩니다. 패스워드는 아무렇게나 넣어도 되므로 그냥 제 메일주소를 넣었습니다. FTP_CONNECTION_MODE는 원래 기본값은 1인데 이는 Active Mode에 해당됩니다. 여기서는 Passive Mode에 해당되는 0이란 값을 넣었습니다. 이 FTP 사이트에 접속할 때에는 이렇게 해야 잘 되더군요. 어쨌든 이와 같은 방식으로 커넥션 객체를 만들어 놓습니다.


그 다음은 필요한 파일들을 다운로드하는 단계입니다. 이 코드에서 필요로 하는 파일들은 YYYYMMDD_Gp_xr_5m.txt와 같은 형식의 이름을 갖습니다. 즉 년월일까지 명시된 날짜 문자열이 앞부분에 들어가는 형식입니다. 그리고 이 루틴에서는 항상 최근 5일치의 자료로 그림을 그리기 때문에 최근 5일치에 해당되는 5개의 파일들을 다운로드하게 됩니다. 그래서 다음과 같은 반복문을 사용하여 5개의 파일들을 순차적으로 다운로드하도록 되어 있습니다.


FOR i = 0, ndays-1 DO BEGIN

  file = STRING(SYSTIME(/JULIAN, /UTC)-i, FORMAT='(C(CYI4.4, CMoI2.2, CDI2.2))')+'_Gp_xr_5m.txt'

  oURL -> SetProperty, URL_PATH='pub/lists/xray/'+file

  downloadLoc = oURL->Get(FILENAME=file)

ENDFOR


이 내용을 보면 ndays는 실제로 5라는 값이 코드상의 앞부분에서 이미 지정이 되어 있습니다. 즉 최근 5일치의 자료들을 다운로드받도록 설정이 되어 있는 상태입니다. 그리고 앞서 생성했던 oURL 객체에 대하여 URL_PATH라는 속성을 지정해주는데, 실제 그 자료파일이 저장된 경로를 파일명까지 포함한 문자열로 지정을 해줍니다. 그리고 바로 이어서 Get이라는 메서드를 사용하여 그 자료파일을 다운로드를 수행하게 됩니다.


제가 이 글을 쓰고 있는 시점이 2011년 12월 15일 오후 6시 15분(우리시간)입니다. 그래서 지금 이 코드를 실행하면 12월 11~15일까지의 5개의 파일들을 다운로드받습니다. 그리고 다음 시간에 소개할 나머지 부분들까지 다 실행되고 나면 다음 그림과 같은 X-ray 플롯 그림을 얻게 됩니다.



그러면 코드상에서 실제 그림을 그리는 부분에 대해서는 다음 시간에 소개드리도록 하겠습니다.

LIST