2017-11-28 3 views
1

도와 주셔서 감사합니다! 아래는 내가 직면하고있는 문제입니다. 내가 맞는 이미지의 헤더를 읽고 있다고 가정 해 봅시다. 헤더 카드 중 하나는 정의되지 않은 객체이며이를 처리하는 방법을 알지 못합니다.맞는 머리글에 정의되지 않은 값

from astropy.io import fits as pf 

hdu = pf.open('myfitsfile') 
hdu.info() 
img_hd= hdu[0].header 
print(img_hd['IMAGEZPT']) 
<astropy.io.fits.card.Undefined object at 0x109b35a20> 

나는 반복적으로 수천 개의 이미지를 통해 내 코드를 실행하고 거의 그들 모두가 몇 가지 값이 있습니다. 예 :

hdu_base = pf.open(a_lof[38]) 
img_hd= hdu_base[0].header 
print(img_hd['IMAGEZPT']) 
23.61687 

여기에 다른 값을 지정하고 계속 진행하기 만하면됩니다. 그래서,

if img_hd['IMAGEZPT'] == None: 
    img_hd['IMAGEZPT'] = base_ZPT #some value I know 
    print(img_hd['IMAGEZPT']) 

을 시도하지만 예상대로 키워드가 정의되지 않기 때문에이 작동하지 않았다. 그래서 '== None'은 작동하지 않습니다. 키워드가 존재하지만 그것은 정의되지 않았습니다.

도움이 될 것입니다! 보다도, Abhi

+0

흠. 헤더에 '정의되지 않음'이 표시되는 것은 대부분 구현 세부 사항이므로 이상하지 않습니다. 그것은 Astropy의 버그와 같습니다. 헤더 견본을 게시 할 수 있습니까? – Iguananaut

+0

사용중인 데이터는 공개되었습니다. 맞는 파일을 살펴볼 수 있습니다. IRSA-PTF 이미지 서비스 (http://irsa.ipac.caltech.edu/applications/ptf/)로 이동하십시오. 그런 다음 단일 노출 이미지의 필드 ID 및 CCD ID를 사용하여 검색하십시오. 필드 ID = 100025, CCDID = 1.이 쿼리를 실행하고 완료되면 EXPID = 49679 (첫 페이지 자체의 아래쪽에서 8 번째)로 이미지를 찾습니다. 헤더의 SEEING 및 IMAGEZPT 키워드를 읽으려고 할 때이 메시지를 반환하는 몇 가지 파일 중 하나입니다. – Abhishek

+0

헤더가 여기에 붙여 넣기에 큰 것처럼 보입니다. – Abhishek

답변

0

헤더는 AstroPy astropy에서

가져 오기 정의되지 않은 클래스

from astropy.io.fits.card import Undefined, UNDEFINED 

을 정의되지 않고이

if isinstance(img_hd['IMAGEZPT'], Undefined): 

그것은 유형을 비교 같이 비교하는 경우 그 instanc의 정의되지 않은 유형의 img_hd [ 'IMAGEZPT'] 중 하나입니다. 이 img_hd [ 'IMAGEZPT'] 대신 인스턴스의 타입의 값과 비교하기 때문에

또는

if img_hd['IMAGEZPT'] == UNDEFINED: 

번째 옵션 등

보다 효율적이어야한다.

헤더 카드가 HDU 표에없는 경우

그냥

if img_hd['IMAGEZPT'] == None: 

에 의해

if 'IMAGEZPT' not in img_hd: 

에서 키워드 검사 항목이있는 경우 대체 'IMAGEZPT' t - 해시 테이블 img_hd

+0

도움을 주셔서 감사합니다! 노력 했어. 나는 'IMAGEZPT'라는 키워드가 존재하지 않는다면 성공했을 것이라고 생각합니다. 키워드가 정의되고 값은 그렇지 않습니다. – Abhishek

+0

그래, 내가 잘못 읽었 어! EDIT에서 제안한 솔루션에 대해 어떻게 생각하십니까? – csblo

+0

다시 한번 감사드립니다! 작동하지 않는, 시도 HDU = pf.open (a_lof [39]) img_hd hdu_base = [0] .header 인쇄 (img_hd [ 'IMAGEZPT']) 경우 img_hd [ 'IMAGEZPT'] 정의되지 않는다 : img_hd를 [ 'IMAGEZPT'] = 22 print (img_hd [ 'IMAGEZPT']) – Abhishek