여러 개의 fits 파일 읽기 질문

게시판 IDL Q&A 여러 개의 fits 파일 읽기 질문

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #3005 Reply
      tolpido
      회원

      안녕하세요.

      번호로 구분 된 fits 파일을 읽는 방법에 대해 질문드립니다.

      파일명은 ‘file0001.fits’ 이런 형식으로 되어 있으며 총 100개의 파일이 있습니다. (file0002.fits, file0003.fits, … , file0100.fits)

      fits 파일을 읽는 데 mrdfits라는 함수를 사용하는데요. fits 파일을 읽기 위해서,

      IDL> a = mrdfits(‘file0001,fits’, 1, hd)

      와 같이 입력해주면 되겠지요.

      100개의 파일을 읽기 위해서 for를 이용한 반복문을 이용하려고 했습니다만, 반복되는 부분에 매개변수 i를 넣으니 IDL에서 아예 파일명 자체로 인식해 버리더라구요..

      for i=1, 100 do begin
      a = mrdfits(‘file000i,fits’, 1, hd)
      endfor

      mrdfits를 일일히 100번 입력하는 것도 방법이겠지만, 좀 더 효율적인 처리를 위해 질문드립니다.

    • #3008 Reply
      Sangwoo
      회원

      따옴표 안의 내용은 무조건 문자값(string value)으로 인식이 됩니다. 따라서 이 경우에는 일련번호에 해당되는 값들을 문자값의 형태로 생성해주는 작업이 필요합니다. 먼저 1부터 100까지의 정수값들을 생성하는 것은 다음과 같이 INDGEN 함수를 사용하면 됩니다.

      numbers = INDGEN(100)+1

      이 정수값들을 문자형으로 변환해줘야 하는데 이를 위하여 STRING 함수를 사용합니다. 다만 여기서 염두에 둬야 할 것은, 무조건 네 개의 자릿수들이 채워진 형태로 생성해야 한다는 것입니다. 즉 1, 2, 3, …, 99, 100이 아니라 0001, 0002, 0003, …, 0099, 0100과 같아야 하겠지요. 이를 위해서는 format 코드를 사용하여 서식 지정이 필요한데, 다음과 같이 처리합니다.

      numbers_str = STRING(numbers, FORMAT='(I4.4)’)

      이렇게 생성된 문자값 배열의 앞과 뒤에 다음과 같이 파일명으로 필요한 문자값들을 더해줍니다.

      file_names = ‘file’ + numbers_str + ‘.fits’

      이렇게 생성된 file_names는 100개의 파일명 문자값들을 담은 배열이 됩니다. 따라서 반복문 안에서 이 배열 안의 문자값들을 하나하나 뽑아서 사용하도록 코딩하면 됩니다.

1 답변 글타래를 보이고 있습니다
'여러 개의 fits 파일 읽기 질문'에 답변달기
글쓴이 정보: