In [1]:
import pyfits as pf
import numpy as np
In [2]:
imname = 'spec.fits'
In [3]:
hdulist = pf.open(imname)
In [4]:
hdulist.info()
Filename: spec.fits
No. Name Type Cards Dimensions Format
0 PRIMARY PrimaryHDU 143 (2542,) float32
In [5]:
pridata = hdulist[0].data #flux -- wavelength is described in the header
In [6]:
pridata
Out[6]:
array([ 0.99421591, 0.99000108, 0.98497832, ..., 0.99758834,
0.99674183, 0.99806845], dtype=float32)
In [7]:
np.shape(pridata)
Out[7]:
(2542,)
In [8]:
priheader = hdulist[0].header
In [9]:
priheader
Out[9]:
SIMPLE = T / Fits standard
BITPIX = -32 / Bits per pixel
NAXIS = 1 / Number of axes
NAXIS1 = 2542 / Axis length
EXTEND = T / File may contain extensions
ORIGIN = 'NOAO-IRAF FITS Image Kernel July 2003' / FITS file originator
DATE = '2015-01-20T15:38:21' / Date FITS file was generated
IRAF-TLM= '2015-01-20T15:38:21' / Time of last modification
OBJECT = 'HR5056 ' / Name of the object observed
COMMENT FITS (Flexible Image Transport System) format is defined in 'Astronomy
COMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
HEAD = ' ' / Head Model
ACQMODE = 'Single ' / Acquisition Mode
READMODE= 'Image ' / Readout Mode
IMGRECT = '1, 2048, 2048, 1' / Image Format
HBIN = '1 ' / Horizontal Binning
VBIN = '1 ' / Vertical Binning
SUBRECT = '1, 2048,2048,1' / Subimage Format
XTYPE = 'Pixel number' / Calibration type
XUNIT = 0 / Calibration units
TRIGGER = 'Internal' / Trigger Mode
CALIB = '0,1,0,0 ' / Calibration
DLLVER = '2.93.30006.0' / Software Version
EXPOSURE= '60,00000' / Total Exposure Time
TEMP = '-81,2 ' / Temperature
READTIME= 1.0E-06 / Pixel readout time
OPERATN = 4 / Type of system
GAIN = '1.0 ' / Ganho
EMREALGN= 0 / EM Real Gain
VCLKAMP = 0 / Vertical Clock Amplitude
VSHIFT = '76,95 ' / Vertical Shift Speed
PREAMP = '4x ' / Pre Amplifier Gain
SERNO = '13740 ' / Serial Number
UNSTTEMP= '-999 ' / Unstabilized Temperature
BLCLAMP = F / Baseline Clamp
PRECAN = 0 / Prescans
FLIPX = 0 / Horizontally Flipped
FLIPY = 0 / Vertically Flipped
CNTCVTMD= 0 / Count Convert Mode
CNTCVT = 0 / Count Convert
DTNWLGTH= 500. / Detection Wavelength
SNTVTY = 0. / Sensitivity
SPSNFLTR= 0 / Spurious Noise Filter Mode
THRSHLD = 0. / Threshold
PCNTENLD= 0 / Photon Counting Enabled
NSETHSLD= 0 / Number of Photon Counting Thresholds
PTNTHLD1= 0. / Photon Counting Threshold 1
PTNTHLD2= 0. / Photon Counting Threshold 2
PTNTHLD3= 0. / Photon Counting Threshold 3
PTNTHLD4= 0. / Photon Counting Threshold 4
AVGFTRMD= 0 / Averaging Filter Mode
AVGFCTR = 1 / Averaging factor
FRMCNT = 1 / Frame Count
USERTXT1= ' ' / User text
USERTXT2= ' ' / User text
USERTXT3= ' ' / User text
USERTXT4= ' ' / User text
FRAME = '2014-07-16T07:08:20.751' / Start of Frame Exposure
ESHTMODE= 0 / Electronic Shuttering Mode
DETECTOR= ' ' / Head Model
EXPTIME = '3000. ' / Total Exposure Time
OUTPTAMP= 'Conventional' / Output Amplifier
CAMGAIN = '4x ' / Pre Amplifier Gain
DATE-OBS= '2014-07-16T07:08:20.751' / Start of Frame Exposure
RA = '01:37:43' / Alfa
DEC = '-57:14:12' / Delta
EPOCH = '2000.0 ' / Epoca
AIRMASS = '1.313 ' / Massa de Ar
JD = '2456854.79822' / Data Juliana
ST = '23:43:17' / Tempo Sideral
HA = '-1:54:53' / Angulo Horario
IMAGE = 'aeri_v_0004' / Nome da imagem
TELESCOP= '1.60m ' / Telescopio
PLATESCL= '0.18 ' / Escala de Placa ("/pixel)
INSTRUME= ' ' / Instrumento
OBSERVER= ' ' / Observador
RDNOISE = '5.9 ' / Ruido de Leitura
FILTER = ' ' / Filtro
WCSDIM = 1
LTM1_1 = 1.
WAT0_001= 'system=equispec'
WAT1_001= 'wtype=linear label=Wavelength units=angstroms'
ZEROCOR = 'Jan 18 13:56 Zero level correction image is ../calib/avg_bias'
FLATCOR = 'Jan 18 13:56 Flat field image is ../calib/norm_flat_v with scale=1.'
CCDSEC = '[1:2048,1:2048]'
CCDMEAN = 1220.445
CCDMEANT= 1106056572
CCDPROC = 'Jan 18 13:56 CCD processing done'
CTYPE1 = 'LINEAR '
CDELT1 = 0.0393545848091301
CD1_1 = 0.0393545848091301
DCLOG1 = 'REFSPEC1 = avg_lamp_v.ms'
APNUM1 = '1 63 13.00 24.02'
DC-FLAG = 0
CRVAL1 = 6513.
CRPIX1 = 1.
NCOMBINE= 50
BANDID1 = 'spectrum - background fit, weights variance, clean yes'
DOPCOR01= ' 0. all'
DOPCOR = 'Heliocentric system'
In [10]:
spechdr = pf.getheader(imname)
In [11]:
spechdr
Out[11]:
SIMPLE = T / Fits standard
BITPIX = -32 / Bits per pixel
NAXIS = 1 / Number of axes
NAXIS1 = 2542 / Axis length
EXTEND = T / File may contain extensions
ORIGIN = 'NOAO-IRAF FITS Image Kernel July 2003' / FITS file originator
DATE = '2015-01-20T15:38:21' / Date FITS file was generated
IRAF-TLM= '2015-01-20T15:38:21' / Time of last modification
OBJECT = 'HR5056 ' / Name of the object observed
COMMENT FITS (Flexible Image Transport System) format is defined in 'Astronomy
COMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
HEAD = ' ' / Head Model
ACQMODE = 'Single ' / Acquisition Mode
READMODE= 'Image ' / Readout Mode
IMGRECT = '1, 2048, 2048, 1' / Image Format
HBIN = '1 ' / Horizontal Binning
VBIN = '1 ' / Vertical Binning
SUBRECT = '1, 2048,2048,1' / Subimage Format
XTYPE = 'Pixel number' / Calibration type
XUNIT = 0 / Calibration units
TRIGGER = 'Internal' / Trigger Mode
CALIB = '0,1,0,0 ' / Calibration
DLLVER = '2.93.30006.0' / Software Version
EXPOSURE= '60,00000' / Total Exposure Time
TEMP = '-81,2 ' / Temperature
READTIME= 1.0E-06 / Pixel readout time
OPERATN = 4 / Type of system
GAIN = '1.0 ' / Ganho
EMREALGN= 0 / EM Real Gain
VCLKAMP = 0 / Vertical Clock Amplitude
VSHIFT = '76,95 ' / Vertical Shift Speed
PREAMP = '4x ' / Pre Amplifier Gain
SERNO = '13740 ' / Serial Number
UNSTTEMP= '-999 ' / Unstabilized Temperature
BLCLAMP = F / Baseline Clamp
PRECAN = 0 / Prescans
FLIPX = 0 / Horizontally Flipped
FLIPY = 0 / Vertically Flipped
CNTCVTMD= 0 / Count Convert Mode
CNTCVT = 0 / Count Convert
DTNWLGTH= 500. / Detection Wavelength
SNTVTY = 0. / Sensitivity
SPSNFLTR= 0 / Spurious Noise Filter Mode
THRSHLD = 0. / Threshold
PCNTENLD= 0 / Photon Counting Enabled
NSETHSLD= 0 / Number of Photon Counting Thresholds
PTNTHLD1= 0. / Photon Counting Threshold 1
PTNTHLD2= 0. / Photon Counting Threshold 2
PTNTHLD3= 0. / Photon Counting Threshold 3
PTNTHLD4= 0. / Photon Counting Threshold 4
AVGFTRMD= 0 / Averaging Filter Mode
AVGFCTR = 1 / Averaging factor
FRMCNT = 1 / Frame Count
USERTXT1= ' ' / User text
USERTXT2= ' ' / User text
USERTXT3= ' ' / User text
USERTXT4= ' ' / User text
FRAME = '2014-07-16T07:08:20.751' / Start of Frame Exposure
ESHTMODE= 0 / Electronic Shuttering Mode
DETECTOR= ' ' / Head Model
EXPTIME = '3000. ' / Total Exposure Time
OUTPTAMP= 'Conventional' / Output Amplifier
CAMGAIN = '4x ' / Pre Amplifier Gain
DATE-OBS= '2014-07-16T07:08:20.751' / Start of Frame Exposure
RA = '01:37:43' / Alfa
DEC = '-57:14:12' / Delta
EPOCH = '2000.0 ' / Epoca
AIRMASS = '1.313 ' / Massa de Ar
JD = '2456854.79822' / Data Juliana
ST = '23:43:17' / Tempo Sideral
HA = '-1:54:53' / Angulo Horario
IMAGE = 'aeri_v_0004' / Nome da imagem
TELESCOP= '1.60m ' / Telescopio
PLATESCL= '0.18 ' / Escala de Placa ("/pixel)
INSTRUME= ' ' / Instrumento
OBSERVER= ' ' / Observador
RDNOISE = '5.9 ' / Ruido de Leitura
FILTER = ' ' / Filtro
WCSDIM = 1
LTM1_1 = 1.
WAT0_001= 'system=equispec'
WAT1_001= 'wtype=linear label=Wavelength units=angstroms'
ZEROCOR = 'Jan 18 13:56 Zero level correction image is ../calib/avg_bias'
FLATCOR = 'Jan 18 13:56 Flat field image is ../calib/norm_flat_v with scale=1.'
CCDSEC = '[1:2048,1:2048]'
CCDMEAN = 1220.445
CCDMEANT= 1106056572
CCDPROC = 'Jan 18 13:56 CCD processing done'
CTYPE1 = 'LINEAR '
CDELT1 = 0.0393545848091301
CD1_1 = 0.0393545848091301
DCLOG1 = 'REFSPEC1 = avg_lamp_v.ms'
APNUM1 = '1 63 13.00 24.02'
DC-FLAG = 0
CRVAL1 = 6513.
CRPIX1 = 1.
NCOMBINE= 50
BANDID1 = 'spectrum - background fit, weights variance, clean yes'
DOPCOR01= ' 0. all'
DOPCOR = 'Heliocentric system'
In [12]:
print (spechdr.cards[:10])
('SIMPLE', True, 'Fits standard')
('BITPIX', -32, 'Bits per pixel')
('NAXIS', 1, 'Number of axes')
('NAXIS1', 2542, 'Axis length')
('EXTEND', True, 'File may contain extensions')
('ORIGIN', 'NOAO-IRAF FITS Image Kernel July 2003', 'FITS file originator')
('DATE', '2015-01-20T15:38:21', 'Date FITS file was generated')
('IRAF-TLM', '2015-01-20T15:38:21', 'Time of last modification')
('OBJECT', 'HR5056', 'Name of the object observed')
('COMMENT', " FITS (Flexible Image Transport System) format is defined in 'Astronomy", '')
In [13]:
print (spechdr.keys())
['SIMPLE', 'BITPIX', 'NAXIS', 'NAXIS1', 'EXTEND', 'ORIGIN', 'DATE', 'IRAF-TLM', 'OBJECT', 'COMMENT', 'COMMENT', 'HEAD', 'ACQMODE', 'READMODE', 'IMGRECT', 'HBIN', 'VBIN', 'SUBRECT', 'XTYPE', 'XUNIT', 'TRIGGER', 'CALIB', 'DLLVER', 'EXPOSURE', 'TEMP', 'READTIME', 'OPERATN', 'GAIN', 'EMREALGN', 'VCLKAMP', 'VSHIFT', 'PREAMP', 'SERNO', 'UNSTTEMP', 'BLCLAMP', 'PRECAN', 'FLIPX', 'FLIPY', 'CNTCVTMD', 'CNTCVT', 'DTNWLGTH', 'SNTVTY', 'SPSNFLTR', 'THRSHLD', 'PCNTENLD', 'NSETHSLD', 'PTNTHLD1', 'PTNTHLD2', 'PTNTHLD3', 'PTNTHLD4', 'AVGFTRMD', 'AVGFCTR', 'FRMCNT', 'USERTXT1', 'USERTXT2', 'USERTXT3', 'USERTXT4', 'FRAME', 'ESHTMODE', 'DETECTOR', 'EXPTIME', 'OUTPTAMP', 'CAMGAIN', 'DATE-OBS', 'RA', 'DEC', 'EPOCH', 'AIRMASS', 'JD', 'ST', 'HA', 'IMAGE', 'TELESCOP', 'PLATESCL', 'INSTRUME', 'OBSERVER', 'RDNOISE', 'FILTER', 'WCSDIM', 'LTM1_1', 'WAT0_001', 'WAT1_001', 'ZEROCOR', 'FLATCOR', 'CCDSEC', 'CCDMEAN', 'CCDMEANT', 'CCDPROC', 'CTYPE1', 'CDELT1', 'CD1_1', 'DCLOG1', 'APNUM1', 'DC-FLAG', 'CRVAL1', 'CRPIX1', 'NCOMBINE', 'BANDID1', 'DOPCOR01', 'DOPCOR', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
In [14]:
"CRVAL1" in spechdr.keys()
Out[14]:
True
In [15]:
cdelt1 = spechdr['CDELT1'] #delta for the wavelength -- next value for the wavelength
In [16]:
cdelt1
Out[16]:
0.0393545848091301
In [17]:
crval1 = spechdr['CRVAL1'] #first wavelength, where the spectrum starts
In [18]:
crval1
Out[18]:
6513.0
In [19]:
specdata = pf.getdata(imname)
In [20]:
specdata
Out[20]:
array([ 0.99421591, 0.99000108, 0.98497832, ..., 0.99758834,
0.99674183, 0.99806845], dtype=float32)
In [21]:
naxis1 = len(specdata) #can be in the header, but may not be
In [22]:
naxis1
Out[22]:
2542
In [23]:
lbarr = np.arange(naxis1)*cdelt1+crval1
In [24]:
import matplotlib.pyplot as plt
/home/mldantas/anaconda2/lib/python2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
In [25]:
plt.plot(lbarr, specdata, 'o--', ms=2)
Out[25]:
[<matplotlib.lines.Line2D at 0x7fc072864450>]
In [26]:
plt.show()
In [27]:
n, bins, patches = plt.hist(specdata)
In [28]:
plt.show()
In [29]:
n
Out[29]:
array([ 6., 20., 37., 576., 1676., 53., 36., 36.,
40., 62.])
In [30]:
pf.writeto('spec_modified01.fits', specdata, header=spechdr, clobber=True)
/home/mldantas/anaconda2/lib/python2.7/site-packages/pyfits/file.py:372: UserWarning: Overwriting existing file 'spec_modified01.fits'.
warnings.warn("Overwriting existing file %r." % self.name)
In [31]:
f = pf.open('spec_modified01.fits', mode = 'update')
f.flush()
In [32]:
f.close()
In [33]:
image = 'hdust_rgb.fits'
In [34]:
fits_image = pf.open(image)
In [35]:
data_image = fits_image[0].data
In [36]:
np.shape(data_image)
Out[36]:
(256, 256)
In [53]:
data = pf.getdata(image)
plt.imshow(data)
plt.show()
In [49]:
data = pf.getdata(image)
plt.imshow(data[::-1], extent=[0,10,0,10], cmap='hot')
plt.colorbar()
plt.show()
In [55]:
data = pf.getdata(image)
plt.imshow(data[::-1], extent=[0,10,0,10], cmap='cubehelix')
plt.colorbar()
plt.show()
In [65]:
from PIL import Image
img = Image.open('hdust_rgb.png')
img_ar = np.array(img)
np.shape(img_ar)
Out[65]:
(256, 256, 3)
In [66]:
plt.imshow(img_ar[:,:,0], vmin=0, vmax=255, cmap="gray") #first layer: 'r' (red of rgb)
plt.show()
In [67]:
plt.imshow(img_ar[:,:,1], vmin=0, vmax=255, cmap="gray") #first layer: 'g' (green of rgb)
plt.show()
In [68]:
plt.imshow(img_ar[:,:,2], vmin=0, vmax=255, cmap="gray") #first layer: 'b' (blue of rgb)
plt.show()
In [ ]:
In [ ]:
Content source: IIPBC/Material
Similar notebooks: