[AstroPy] PyFITS IndexError

Michael Droettboom mdroe at stsci.edu
Tue Nov 16 10:53:30 EST 2010


The problem is related to the handling of CONTINUE cards.

The linked file has a surprising use of CONTINUE cards that pyfits has 
not been tested for.

hsa.fits has the following:

   TTYPE17 = 'LOF_code'           / &
   CONTINUE  '' / &

The CONTINUE card has an empty value (which is what is tripping up 
pyfits).  This is probably not strictly against the specification [1], 
but it is meaningless, and it's not clear why the system that generated 
the file would be spitting those out.  Also, the '&' is supposed to go 
inside the value (i.e. inside the '') not inside the comment part.  In 
any case, the second line above should not contain an &, since it is the 
last line of the continued value.

[1] http://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/ofwg_recomm/r13.html

The attached patch against PyFITS allows it to handle this file.  
However, I would also recommend reporting the bug to the author(s) of 
the tool that generated this file.

Mike

On 11/16/2010 09:28 AM, Miguel de Val Borro wrote:
> Hello,
>
> I have problems reading FITS files from the Herschel Science Archive
> generated using their Java data processing system. The file
> http://www.mps.mpg.de/data/outgoing/deval/hsa.fits
> has a binary table that cannot be accessed by index or name as shown
> below.
>
> When the line hdulist[1].data.field(0) is run a few times in the
> interpreter the data is finally printed.  How can I read this kind of
> file using PyFITS?
>
> Best regards,
> Miguel
>
>    
>>>> pyfits.__version__
>>>>          
> '2.3.1'
>    
>>>> hdulist = pyfits.open('hsa.fits')
>>>> hdulist[1].data.field(0)
>>>>          
> ---------------------------------------------------------------------------
> IndexError                                Traceback (most recent call last)
>
> /home/miguel/HssO/103P/data/fits/<ipython console>  in<module>()
>
> /usr/local/lib/python2.6/dist-packages/pyfits/core.pyc in __getattr__(self, attr)
>     6240             if size:
>     6241                 self._file.seek(self._datLoc)
> ->  6242                 data = _get_tbdata(self)
>     6243                 data._coldefs = self.columns
>     6244                 data.formats = self.columns.formats
>
> /usr/local/lib/python2.6/dist-packages/pyfits/core.pyc in _get_tbdata(hdu)
>     5165     Get the table data from input (an HDU object).
>     5166     """
> ->  5167     tmp = hdu.columns
>     5168     # get the right shape for the data part of the random group,
>
>     5169     # since binary table does not support ND yet
>
>
> /usr/local/lib/python2.6/dist-packages/pyfits/core.pyc in __getattr__(self, attr)
>     6251             class_name = str(self.__class__)
>     6252             class_name = class_name[class_name.rfind('.')+1:-2]
> ->  6253             self.__dict__[attr] = ColDefs(self, tbtype=class_name)
>     6254
>     6255         elif attr == '_theap':
>
> /usr/local/lib/python2.6/dist-packages/pyfits/core.pyc in __init__(self, input, tbtype)
>     4887                     if col<= _nfields and col>  0:
>     4888                         cname = _commonNames[_keyNames.index(keyword)]
> ->  4889                         dict[col-1][cname] = _card.value
>     4890
>     4891             # data reading will be delayed
>
>
> /usr/local/lib/python2.6/dist-packages/pyfits/core.pyc in __getattr__(self, name)
>      438             self._extractKey()
>      439         elif name in ['value', 'comment']:
> -->  440             self._extractValueComment(name)
>      441         else:
>      442             raise AttributeError, name
>
> /usr/local/lib/python2.6/dist-packages/pyfits/core.pyc in _extractValueComment(self, name)
>     1450
>     1451                 # drop the ending "&"
>
> ->  1452                 if _val[-1] == '&':
>     1453                     _val = _val[:-1]
>     1454                 longstring = longstring + _val
>
> IndexError: string index out of range
> _______________________________________________
> AstroPy mailing list
> AstroPy at scipy.org
> http://mail.scipy.org/mailman/listinfo/astropy
>    


-- 
Michael Droettboom
Science Software Branch
Space Telescope Science Institute
Baltimore, Maryland, USA

-------------- next part --------------
A non-text attachment was scrubbed...
Name: pyfits_continue_workaround.diff
Type: text/x-patch
Size: 452 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/astropy/attachments/20101116/b0d5bfeb/attachment.bin>


More information about the AstroPy mailing list