Как преобразовать пиксель в длину волны в спектрах из файлов FITS в Python? - PullRequest
0 голосов
/ 03 июля 2018

Я использовал matplotlib.pyplot для построения спектра из подгоночных файлов в Python и получения зависимости интенсивности от пикселя, но на самом деле мне нужно преобразовать пиксели в длину волны. Я видел похожие вопросы, которые поставили меня на правильный путь того, что мне нужно делать (например, аналогичный вопрос , RGB пример ), но я все еще чувствую себя потерянным в процессе.

У меня есть файлы FITS с длинами волн около 3500 и 6000 (A), в формате float32 и размерах (53165,).

Итак, как я понимаю, мне нужно откалибровать положение пикселей по длине волны. У меня есть заголовок длины волны покоя (RESW), мой «пошаговый» заголовок длины волны (STW), и мне нужно получить:

x = RESW + (количество пикселей * STW)

и сюжет это. Вот что я получил в своем коде.

import os, glob
from glob import glob
from pylab import *
from astropy.io import ascii
import scipy.constants as constants
import matplotlib.pylab as plt
from astropy.io import fits

#add directory you have your files in
dir = '' 


#OPEN ALL FILES AND STORE THEM INTO A LIST
files= glob(dir + '*.fits')
for fi in (files):
    print(fi)
    name = fi[:-len('.fits')] #Remove '.fits' from the file name

    with fits.open(dir + fi) as hdu:
        hdu.info()
        data = hdu[0].data
        hdr = hdu[0].header #added to try2
        step = hdr['CDELT1'] #added to try2
        restw = hdr['CRVAL1'] #added to try2
        #step = fits.getheader('STW') #added to try
        #restw = fits.getheader('RESW') #added to try
        spectra = restw + (data * step) #added to try

plt.clf()
plt.plot(spectra)
plt.savefig(name + '.pdf')     

Я пытался использовать fits.getheader (''), но я не знаю, где и как его поместить, потому что этот способ работает неправильно.

Может ли кто-нибудь помочь, пожалуйста? Заранее спасибо!

...