IDL의 최신 버전인 IDL 9.1 버전이 ENVI 6.1 버전과 함께 출시되었습니다. 그래서 IDL 9.1의 주목할만한 업데이트 및 변경 사항들을 간략하게 정리해보면 다음과 같습니다.
1. Widget 관련 기능들의 업데이트
IDL에서 GUI 어플리케이션을 제작할 수 있는 기능인 IDL Widget 프로그래밍 관련 기능들에 대한 업데이트가 있습니다. 참고로 Widget 기능 관련 업데이트는 상당히 오랜만이라서, 제 생각에는 어쩌면 향후에도 소폭으로나마 계속 업데이트가 있을 가능성이 있다고 봅니다.
(1) Widget의 다크 모드(Dark Mode) 지원
(2) WIDGET_LABEL 및 WIDGET_TEXT 함수에서 문자 표시 및 배경색 설정 기능 추가 (BACKGROUND_COLOR, FOREGROUND_COLOR 키워드)
(3) WIDGET_TEXT 함수에서 문자 정렬을 위한 ALIGNMENT 키워드 지원
2. Spherical Harmonic Transform 기반의 기능 함수들 추가
2차원 데이터에 대하여 Gauss-Legendre 알고리즘을 기반으로 구면 좌표계로의 Spherical Harmonic 변환 및 역변환을 할 수 있도록 해주는 관련 기능함수들인 SPHERE_HARM_FORWARD 및 SPHERE_HARM_INVERSE 함수가 추가되었습니다. 이러한 기법은 기상 및 해양 분야에서 파도의 패턴 분석 작업 뿐 아니라 지자기 및 태양 자기장 분석 등에서도 중요한 역할을 합니다. 또한 일정한 파수(wavenumber) 이하의 패턴을 걸러내는 기능을 담당하는 SPHERE_HARM_FILTER 및 SPHERE_HARM_KERNEL 함수도 함께 추가되었습니다. 다음은 SPHERICAL_HARM_FILTER 함수를 사용하는 예제입니다.
RESTORE, FILEPATH('reanl20v3_1dec1884_512x256dbl.sav', $
subdir=['examples', 'data'])
t63 = SPHERE_HARM_FILTER(a, 63)
HELP, a, t63
win = WINDOW(DIMENSIONS=[1000, 250], /NO_TOOLBAR)
im = IMAGE(a, rgb_table=34, /CURRENT, LAYOUT=[2, 1, 1])
im = IMAGE(t63, rgb_table=34, /CURRENT, LAYOUT=[2, 1, 2])
3. GAUSS_QUAD_LEGENDRE 함수 추가
가우스 구적법(Gaussian quadrature integration) 기반으로 적분의 경계값 및 가중치 계수값을 산출해주는 GAUSS_QUAD_LEGENDRE 함수가 추가되었습니다. 다음은 이 함수를 사용한 예제입니다.
x = GAUSS_QUAD_LEGENDRE(-1, 1, 100, WEIGHTS=w)
HELP, x, w
win = WINDOW(DIMENSIONS=[800, 400], /NO_TOOLBAR)
p = PLOT(x, COLOR='tomato', THICK=2, FONT_SIZE=14, MARGIN=0.1, $
/CURRENT, NAME='X Values')
po = PLOT(w*20, COLOR='dodger blue', THICK=2, /OVERPLOT, $
NAME='Weights ($\times$20)')
lg = LEGEND(TARGET=[p, po], POSITION=[0.85, 0.35], FONT_SIZE=14, FILL_COLOR='yellow')
4. 16비트 실수형 값의 읽기 및 변환 기능
IDL에서 일반적인 실수형 값은 그 정밀도가 single precision에 해당되는 32비트(4바이트)이지만, 정밀도가 그 절반인 경우 즉 half-precision에 해당되는 16비트(2바이트)에 실수형 값에 대한 지원 기능이 추가되었습니다. 그래서 16비트 실수와 32비트 실수 사이의 변환 기능을 담당하는 FLOAT16_ENCODE 및 FLOAT16_DECODE 함수가 추가되었습니다.
IDL> a = [0, 1, 5.82, -5.82]
IDL> b = FLOAT16_ENCODE(a)
IDL> PRINT, b, FORMAT='(4Z)'
0 3C00 45D2 C5D2
IDL> c = UINT([0, 0x3C00, 0x45D2, 0xC5D2])
IDL> d = FLOAT16_DECODE(c)
IDL> PRINT, d
0.00000 1.00000 5.82031 -5.82031
그리고 READ_BINARY 함수에 FLOAT16 키워드가 추가되었는데, 이 기능을 이용하면 16비트 실수형 값들이 수록된 바이너리 파일을 읽어서 그 안의 값들을 32비트 실수 형태로 가져와서 IDL에서 처리할 수 있도록 해줍니다.
5. 커맨드 라인 진행 바(Progress Bar)
IDL에서 시간이 걸리는 반복형 작업을 할 때 그 진척상황을 확인하려면 기존에는 반복형 구문 내에 일정한 문자나 값들을 출력하게 하여 매 회차마다 그 상황에 관한 정보를 유저가 볼 수 있도록 하는 방식으로 처리하는 경우가 많았습니다. 그런데 이러한 진척상황을 텍스트 형태의 진행 바(Progress Bar)로 알 수 있게 해주는 기능이 이번에 새로 추가되었습니다. 이 기능은 CLI_Progress라는 클래스의 객체의 형태로 지원됩니다. 이 객체에는 INITIALIZE, UPDATE 등과 같은 메서드들 및 각종 키워드들이 지원됩니다. 예를 들어서 단순하게 반복형 구문 내에서 시간만 경과시켜가면서 그 진척상황을 출력하게 하는 예제를 보면 다음과 같습니다.
CLI_PROGRESS.INITIALIZE, TITLE='Processing', MAXIMUM=200, /REMAINING
FOR j = 0, length DO BEGIN
CLI_PROGRESS.UPDATE, j
WAIT, 0.02
ENDFOR
이 내용을 실행하면 대략 다음과 같은 방식으로 진척상황이 출력되면서 그 내용이 업데이트되는 모습을 볼 수 있습니다.
Processing 100.0% [##################################]
이것은 하나의 예에 불과하고 실제로 여러가지 형태의 진행 바를 구현할 수 있습니다. 이와 관련해서는 IDL 도움말의 CLI_Progress에 관한 섹션에서 소개되고 있는 다양한 예제들을 참조하시면 됩니다.
6. 각종 아이콘 표시 기능
IDL에서 각종 아이콘 이미지들을 표시할 수 있는 기능이 추가되었습니다. 먼저 SVG(Scalable Vector Graphics) 파일을 비트맵 이미지로 읽어서 아이콘을 표시하는 기능을 담당하는 RENDER_SVG 함수가 추가되었습니다. IDL 9.1의 설치 디렉토리 내에 제공되는 SVG 파일 하나를 읽어서 표시해보는 예제는 다음과 같습니다.
file = FILEPATH('folder-open.svg', SUBDIR=['resource', 'bitmaps', 'svg', 'regular'])
img = RENDER_SVG(file, WIDTH=128, HEIGHT=128, $
BACKGROUND=0xCCCCCC, FOREGROUND=0xFF0000)
win = WINDOW(DIMENSIONS=[200, 200], /NO_TOOLBAR)
i = IMAGE(img, /CURRENT)
또한 IDL 설치 디렉토리에 내장되어 제공되는 다양한 아이콘 이미지들을 읽어서 임의의 크기로 렌더링하여 사용할 수 있도록 해주는 RENDER_ICON 함수도 추가되었습니다. 예제를 보면 다음과 같습니다.
icon = RENDER_ICON('folder-open', WIDTH=64, HEIGHT=64)
win = WINDOW(DIMENSIONS=[200, 200], /NO_TOOLBAR)
i = IMAGE(icon, MARGIN=0.1, /CURRENT)
이러한 내장 아이콘 이미지들은 총 2000여 종이 넘는데, 역시 이번에 추가된 SVG_ICON_BROWSER 명령을 사용하여 이 모든 아이콘들을 한눈에 열람해서 볼 수도 있습니다. IDL 9.1의 커맨드 입력창에서 이 명령을 실행해보면 다음과 같이 모든 아이콘 이미지들을 볼 수 있는 인터페이스가 뜹니다.
IDL> SVG_ICON_BROWSER
여기서 개별 아이콘에 마우스 포인트를 위치시키면 그 아이콘의 명칭도 확인할 수 있습니다. 이러한 명칭은 앞서 소개한 RENDER_ICON 함수에서 사용할 수 있습니다.
7. 기타 사항들
(1) PRINT 명령에 NEWLINE 키워드가 추가되었습니다. 이 키워드는 출력을 할 때 새로운 라인으로 넘어갈 것인지 아니면 기존의 라인에 계속 붙여서 출력할 것인지 여부를 제어하는 역할을 합니다. 디폴트 값인 1을 사용하면 기존과 같이 매번 새로운 라인에 출력하지만, 만약 이 값을 0으로 설정하면 이후에 출력될 내용은 뒤에 붙어서 이어지게 됩니다.
PRINT, [1, 2, 3], NEWLINE=0
PRINT, [7, 8, 9]
1 2 3 7 8 9
(2) LEGEND 함수에 FILL_COLOR 속성이 추가되었습니다. 따라서 이 속성을 사용하면 범례의 내부를 특정한 색상으로 채울 수 있습니다. 앞서 GAUSS_QUAD_LEGENDRE 함수에 관한 내용 및 그림에서 이 기능을 사용해보았습니다.
(3) WRITE_PNG 함수에 COMPRESSION 키워드가 추가되었습니다. 이 키워드를 사용하면 PNG 파일의 품질을 직접 설정할 수 있습니다. 가능한 값은 0~9이며 값이 클수록 압축률이 커집니다. 즉 압축률이 클수록 파일 크기는 줄어들지만 품질은 반비례합니다. 0이면 무압축이고 9는 최대압축이며, 디폴트 값은 6입니다.
(4) MAPCONTINENTS 함수의 경계선 구현에 사용되는 Shapefile 데이터가 갱신되었습니다. 이와 관련된 자세한 내용은 별도의 게시물에서 따로 소개하였습니다.
(5) IDL의 외부 데이터베이스 연결 기능인 Dataminer가 기존에는 별도로 인스톨되었지만 이제부터는 IDL에 내장되어 한꺼번에 인스톨되도록 변경되었습니다. 다만 Dataminer의 사용을 위하여 별도의 라이센스가 필요하다는 점은 그대로 유지됩니다.
(6) DXF 관련 기능들(IDLffDXF 등)이 모두 제거되었습니다.
(7) 각종 버그들이 수정되었습니다. 특히 NG 체계의 그림 표출과 관련되어 기존에 보고되었던 문제점들 중 상당수가 수정된 것으로 보입니다.
아무래도 9.0에서 9.1로의 버전업이다보니 대략적으로 선별하여 정리해보았는데도 위와 같이 분량이 그리 적지는 않은 것 같습니다. 오늘 소개된 내용의 전체 원문은 해당 링크인 What's New in IDL 9.1를 통하여 보실 수 있습니다. 그리고 What's New 이외에도 버그 수정 내역 및 기타 사항들은 별도로 제공되고 있는데 이러한 내용은 IDL 9.1 Release Note에서 확인할 수 있습니다. 그리고 IDL 9.1의 새로운 기능들 중 조금 더 주목해볼만한 것들이 보이면 나중에 따로 자세히 소개해보도록 하겠습니다.
이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > General' 카테고리의 다른 글
IDL 관련 Q&A 방법 정리 (0) | 2024.11.22 |
---|---|
IDL 관련 주요 웹 링크 정리 (2024년 6월 현재) (1) | 2024.06.05 |
웨비나(Webinar) 안내 (2024. 4. 11) (0) | 2024.04.04 |
IDL 9.0 출시 (5) | 2023.12.05 |
웨비나(Webinar) 안내 (2023. 11. 30) (1) | 2023.11.23 |