HDF5 읽기에서..

게시판 IDL Q&A HDF5 읽기에서..

이 게시글은 3개 답변과 2명 참여가 있으며 마지막으로  Sangwoo에 의해 4 월, 1 주 전에 업데이트 됐습니다.

  • 글쓴이
  • #5008

    gentlerain12
    회원

    안녕하세요?
    idl을 사용하면서 많은 도움을 받습니다. 늘 감사드립니다.
    HDF5 자료를 읽다가 어려운 점이 생겨서 질문글 남깁니다..
    HDF5 자료를 다운받은 곳에서 제공한 샘플코드 (자료를 읽는 코드)를 그대로 실행하였는데 오류가 발생했습니다.
    코드 내용은 아래와 같습니다.

    ; Open file.
    file_name=’3B-HHR-E.MS.MRG.3IMERG.20160107-S000000-E002959.0000.V03E.HDF5′
    file_id=H5F_OPEN(file_name)

    ; Retrieve data.
    datafield_name=’/Grid/IRprecipitation’
    data_id=H5D_OPEN(file_id, datafield_name)
    dataf=H5D_READ(data_id)

    여기서 H5D_OPEN부분이 문제가 된것으로 보입니다.. 아래와 같은 에러가 발생했습니다..
    H5D_OPEN: not found: (Object ID:67108864, Object Name:”/Grid/IRprecipitation”)
    개발자 주석을 보니 샘플코드는 IDL 8.2.3 버전에서 작업했다고 하는데요,
    HDF5를 읽을때 IDL 버전이 영향을 줄 수 있나요? 저는 IDL 7.0 버전을 사용중입니다..
    자료 제공처에서 제시하는 샘플코드 그대로, 입력자료도 똑같이 해서 실행하는데 오류가 나서
    답답한 마음에 질문 올립니다…
    그리고 확장자가 .h5 인 것과 .HDF5인 것은 둘 다 같은 hdf5 인가요?
    (제가 갖고있는 또다른 .h5 파일을 읽을때는 H5D_OPEN 에서 문제가 없어서 의문입니다..)

    답변기다리겠습니다. 감사합니다!!

  • #5009

    Sangwoo
    회원

    저도 HDF5 파일을 읽어본 경험이 별로 없어서 원인에 대한 정확한 진단을 내리기는 힘들지만 제가 아는 선에서만 언급을 해보겠습니다. HDF5 파일도 버전이 있는 것으로 압니다. IDL에서 다음과 같은 명령을 실행해보면 출력되는 메시지에 관련 정보가 있는데요. 제가 IDL 8.6에서 실행해본 모습은 다음과 같습니다.

    IDL> help, ‘hdf5’, /dlm
    ** HDF5 – IDL HDF5 support (not loaded)
    Version: 1.8.11, Build Date: NOV 21 2016, Source: Exelis Visual Information Solutions, Inc.

    여기서 버전이 1.8.11이라고 되어 있는데, 제가 IDL 7.0을 지금은 갖고 있지 않아서 테스트는 못해봤고, IDL 8.0까지는 해봤는데 여기서는 1.8.4라고 나옵니다. 제 추측에는 IDL 7.0이면 더 이전의 버전 넘버가 출력될 것으로 생각됩니다. HDF5 파일의 생성 기반이 되는 버전이 IDL에서 지원되는 버전보다 나중이라면 그 파일을 읽는 것이 잘 안될 가능성도 있습니다. 올려주신 예제코드에 있는 파일은 제대로 읽히지 않는데 또 다른 파일은 읽히는 현상이라면 이러한 버전 문제일 수도 있지 않겠나 추측은 해볼 수 있습니다. 그리고 파일의 확장자는 h5, hdf5 모두 유효한 확장자인 것으로 알고 있습니다. 다만 H5F_OPEN은 잘 되는데 H5D_OPEN에서 문제가 생기는 원인은 저도 잘 모르겠습니다. 읽고자 하는 파일에 대해서 H5F_IS_HDF5 함수를 적용해서 1이 나오는지도 한번 확인해보시면 어떨까요?

    (저도 제대로 알고 드린 답변이 아니라서 내용에 있어서 부정확한 부분이 있을 수도 있습니다. 이 점은 양해 부탁드립니다.)

    • #5010

      gentlerain12
      회원

      답변 감사드립니다!
      읽으려는 파일에 H5F_IS_HDF5 함수를 적용한 결과 1은 나오네요..
      다만 idl에서 help, ‘hdf5’, /dlm 을 쳐본 결과 Version: 1.6.7 으로 나오네요..
      말씀해주신대로 버전 문제일 가능성이 있겠습니다…
      아무래도 다른 방법으로 hdf5 자료를 읽어야 겠네요..

      답변해주셔서 감사합니다!!

  • #5012

    Sangwoo
    회원

    그렇다면 IDL 7.0에서는 HDF5 버전이 1.6.7이란 얘기로군요. 저도 좀 더 검색을 해보니까 IDL 7.x 버전은 HDF5 버전이 1.6.x 정도인 것으로 나오긴 합니다. 아래 링크 내용에서는 1.6.3이라고는 하는데 어차피 맥락은 같다고 봐야겠죠. 말씀하신대로 HDF5 파일의 생성 버전에 대응하는 어플리케이션을 사용하는 것이 좋을 것 같습니다. IDL의 경우는 8.x 버전을 사용해야 할 것으로 보입니다.

    https://support.hdfgroup.org/HDF5/faq/bkfwd-compat.html

    • 이 답변은  Sangwoo에 의해 4 월, 1 주 전에 수정됐습니다.

답변은 로그인 후 가능합니다.