2017-11-28 27 views
1

私に手伝ってくれてありがとう!私が直面している問題は以下の通りです。私がフィットイメージのヘッダーを読んでいるとしましょう。ヘッダーカードの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

Hmmでは、ヘッダーに「UNDEFINED」が表示されるのは、主に実装の詳細なので珍しいことです。それはAstropyのバグのように思えます。ヘッダーのサンプルを投稿できますか? – Iguananaut

+0

私が使用しているデータは公開されています。あなたはフィットファイルを見ることができます。 IRSA-PTF画像サービス(http://irsa.ipac.caltech.edu/applications/ptf/)にアクセスしてください。次に、1回の露光画像に対してフィールドIDとCCD IDを使用して検索します。フィールドID = 100025、CCDID = 1。このクエリを実行し、終了したらEXPID = 49679(最初のページ自体の下から8番目)のイメージを探します。これはヘッダーのSEEINGとIMAGEZPTキーワードを読み取ろうとすると、このメッセージを返す少数のファイルの1つです。 – Abhishek

+0

ヘッダーが大きくてペーストをコピーするようです。 – Abhishek

答えて

0

ヘッダーはそれが型を比較astropy

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

からAstroPy

インポート未定義クラスで未定義で、このよう

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

を比較した場合インスタントのimg_hd ['IMAGEZPT']の未定義の型のeそれはimg_hd [「IMAGEZPT」]代わりのインスタンスの型の値を比較するため

又はその

if img_hd['IMAGEZPT'] == UNDEFINED: 

第二のオプション等

は、より効率的であるべきです。


ヘッダカードは、HDUの表に

存在しない場合だけ

if 'IMAGEZPT' not in img_hd: 

によって

if img_hd['IMAGEZPT'] == None: 

を交換のキーワードチェックエントリであれば'IMAGEZPT' exis tをハッシュテーブルimg_hdに格納します。

+0

助けてくれてありがとう!試して、働いていない。キーワード「IMAGEZPT」が存在しない場合(単なる推測)にはうまくいきました。キーワードは定義されていますが、その値は定義されていません。 – Abhishek

+0

私は間違っています。 EDITで私が提案した解決策について、どう思いましたか? – csblo

+0

もう一度ありがとう! [ img_hd:img_hd [ 'IMAGEZPTが']未定義の場合は[0] プリント(img_hd [ 'IMAGEZPT']) .header HDU = pf.open([39] a_lof) img_hd = hdu_baseが動作していない、試み'IMAGEZPT'] = 22 print(img_hd ['IMAGEZPT']) – Abhishek