Package nom.tam.fits

Class Header

java.lang.Object
nom.tam.fits.Header
All Implemented Interfaces:
FitsElement

public class Header extends Object implements FitsElement
This class describes methods to access and manipulate the header for a FITS HDU. This class does not include code specific to particular types of HDU. As of version 1.1 this class supports the long keyword convention which allows long string keyword values to be split among multiple keywords
    KEY        = 'ABC&'   /A comment
    CONTINUE      'DEF&'  / Another comment
    CONTINUE      'GHIJKL '
 
The methods getStringValue(key), addValue(key,value,comment) and deleteCard(key) will get, create/update and delete long string values if the longStringsEnabled flag is set. This flag is set automatically when a FITS header with a LONGSTRN card is found. The value is not checked. It may also be set/unset using the static method setLongStringsEnabled(boolean). [So if a user wishes to ensure that it is not set, it should be unset after any header is read] When long strings are found in the FITS header users should be careful not to interpose new header cards within a long value sequence. When writing long strings, the comment is included in the last card. If a user is writing long strings, a the keyword LONGSTRN = 'OGIP 1.0' should be added to the FITS header, but this is not done automatically for the user.
  • Constructor Details

    • Header

      public Header()
      Create an empty header
    • Header

      Create a header and populate it from the input stream
      Parameters:
      is - The input stream where header information is expected.
      Throws:
      IOException - if the header could not be read.
      TruncatedFileException - if the stream ended prematurely
    • Header

      public Header(Data o) throws FitsException
      Create a header which points to the given data object.
      Parameters:
      o - The data object to be described.
      Throws:
      FitsException - if the data was not valid for this header.
    • Header

      public Header(String[] newCards)
      Create a header and initialize it with a vector of strings.
      Parameters:
      newCards - Card images to be placed in the header.
  • Method Details

    • readHeader

      public static Header readHeader(ArrayDataInput dis) throws TruncatedFileException, IOException
      Create a header by reading the information from the input stream.
      Parameters:
      dis - The input stream to read the data from.
      Returns:
      null if there was a problem with the header; otherwise return the header read from the input stream.
      Throws:
      TruncatedFileException - if the stream ended prematurely
      IOException - if the header could not be read.
    • setLongStringsEnabled

      @Deprecated public static void setLongStringsEnabled(boolean flag)
      Deprecated.
      Parameters:
      flag - the new value for long-string enabling.
    • addLine

      public void addLine(HeaderCard fcard)
      Add a card image to the header.
      Parameters:
      fcard - The card to be added.
    • addValue

      public void addValue(IFitsHeader key, boolean val) throws HeaderCardException
      Add or replace a key with the given boolean value and comment.
      Parameters:
      key - The header key.
      val - The boolean value.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(IFitsHeader key, double val) throws HeaderCardException
      Add or replace a key with the given double value and comment. Note that float values will be promoted to doubles.
      Parameters:
      key - The header key.
      val - The double value.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(IFitsHeader key, int val) throws HeaderCardException
      Add or replace a key with the given long value and comment. Note that int's will be promoted to long's.
      Parameters:
      key - The header key.
      val - The long value.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(IFitsHeader key, long val) throws HeaderCardException
      Add or replace a key with the given long value and comment. Note that int's will be promoted to long's.
      Parameters:
      key - The header key.
      val - The long value.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(IFitsHeader key, String val) throws HeaderCardException
      Add or replace a key with the given string value and comment.
      Parameters:
      key - The header key.
      val - The string value.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(String key, BigDecimal val, String comment) throws HeaderCardException
      Add or replace a key with the given bigdecimal value and comment. Note that float values will be promoted to doubles.
      Parameters:
      key - The header key.
      val - The bigDecimal value.
      comment - A comment to append to the card.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(String key, BigInteger val, String comment) throws HeaderCardException
      Add or replace a key with the given BigInteger value and comment. Note that float values will be promoted to doubles.
      Parameters:
      key - The header key.
      val - The BigInteger value.
      comment - A comment to append to the card.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(String key, boolean val, String comment) throws HeaderCardException
      Add or replace a key with the given boolean value and comment.
      Parameters:
      key - The header key.
      val - The boolean value.
      comment - A comment to append to the card.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(String key, double val, int precision, String comment) throws HeaderCardException
      Add or replace a key with the given double value and comment. Note that float values will be promoted to doubles.
      Parameters:
      key - The header key.
      val - The double value.
      precision - The fixed number of decimal places to show.
      comment - A comment to append to the card.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(String key, double val, String comment) throws HeaderCardException
      Add or replace a key with the given double value and comment. Note that float values will be promoted to doubles.
      Parameters:
      key - The header key.
      val - The double value.
      comment - A comment to append to the card.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(String key, long val, String comment) throws HeaderCardException
      Add or replace a key with the given long value and comment. Note that int's will be promoted to long's.
      Parameters:
      key - The header key.
      val - The long value.
      comment - A comment to append to the card.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • addValue

      public void addValue(String key, String val, String comment) throws HeaderCardException
      Add or replace a key with the given string value and comment.
      Parameters:
      key - The header key.
      val - The string value.
      comment - A comment to append to the card.
      Throws:
      HeaderCardException - If the parameters cannot build a valid FITS card.
    • card

      public HeaderCardBuilder card(IFitsHeader key)
      get a builder for filling the header cards using the builder pattern.
      Parameters:
      key - the key for the first card.
      Returns:
      the builder for header cards.
    • containsKey

      public final boolean containsKey(IFitsHeader key)
      Tests if the specified keyword is present in this table.
      Parameters:
      key - the keyword to be found.
      Returns:
      true if the specified keyword is present in this table; false otherwise.
    • containsKey

      public final boolean containsKey(String key)
      Tests if the specified keyword is present in this table.
      Parameters:
      key - the keyword to be found.
      Returns:
      true if the specified keyword is present in this table; false otherwise.
    • deleteKey

      public void deleteKey(IFitsHeader key)
      Delete the card associated with the given key. Nothing occurs if the key is not found.
      Parameters:
      key - The header key.
    • deleteKey

      public void deleteKey(String key)
      Delete the card associated with the given key. Nothing occurs if the key is not found.
      Parameters:
      key - The header key.
    • dumpHeader

      public void dumpHeader(PrintStream ps)
      Print the header to a given stream.
      Parameters:
      ps - the stream to which the card images are dumped.
    • findCard

      public HeaderCard findCard(IFitsHeader key)
      Find the card associated with a given key. If found this sets the mark to the card, otherwise it unsets the mark.
      Parameters:
      key - The header key.
      Returns:
      null if the keyword could not be found; return the HeaderCard object otherwise.
    • findCard

      public HeaderCard findCard(String key)
      Find the card associated with a given key. If found this sets the mark to the card, otherwise it unsets the mark.
      Parameters:
      key - The header key.
      Returns:
      null if the keyword could not be found; return the HeaderCard object otherwise.
    • findKey

      public String findKey(String key)
      Find the card associated with a given key.
      Parameters:
      key - The header key.
      Returns:
      null if the keyword could not be found; return the card image otherwise.
    • getBigDecimalValue

      public BigDecimal getBigDecimalValue(IFitsHeader key)
      Get the double value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0.0 if not found.
    • getBigDecimalValue

      public BigDecimal getBigDecimalValue(String key)
      Get the double value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0.0 if not found.
    • getBigDecimalValue

      public BigDecimal getBigDecimalValue(String key, BigDecimal dft)
      Get the double value associated with the given key.
      Parameters:
      key - The header key.
      dft - The default value to return if the key cannot be found.
      Returns:
      the associated value.
    • getBigIntegerValue

      public BigInteger getBigIntegerValue(IFitsHeader key, BigInteger dft)
      Get the long value associated with the given key.
      Parameters:
      key - The header key.
      dft - The default value to be returned if the key cannot be found.
      Returns:
      the associated value.
    • getBigIntegerValue

      public BigInteger getBigIntegerValue(String key)
      Get the long value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0 if not found.
    • getBigIntegerValue

      public BigInteger getBigIntegerValue(String key, BigInteger dft)
      Get the long value associated with the given key.
      Parameters:
      key - The header key.
      dft - The default value to be returned if the key cannot be found.
      Returns:
      the associated value.
    • getBooleanValue

      public boolean getBooleanValue(IFitsHeader key)
      Get the boolean value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The value found, or false if not found or if the keyword is not a logical keyword.
    • getBooleanValue

      public boolean getBooleanValue(IFitsHeader key, boolean dft)
      Get the boolean value associated with the given key.
      Parameters:
      key - The header key.
      dft - The value to be returned if the key cannot be found or if the parameter does not seem to be a boolean.
      Returns:
      the associated value.
    • getBooleanValue

      public boolean getBooleanValue(String key)
      Get the boolean value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The value found, or false if not found or if the keyword is not a logical keyword.
    • getBooleanValue

      public boolean getBooleanValue(String key, boolean dft)
      Get the boolean value associated with the given key.
      Parameters:
      key - The header key.
      dft - The value to be returned if the key cannot be found or if the parameter does not seem to be a boolean.
      Returns:
      the associated value.
    • getCard

      @Deprecated public String getCard(int n)
      Deprecated.
      An iterator from iterator(int) or iterator() should be used for sequential access to the header.
      Get the n'th card image in the header
      Parameters:
      n - the card index to get
      Returns:
      the card image; return null if the n'th card does not exist.
    • getDataSize

      public long getDataSize()
      Return the size of the data including any needed padding.
      Returns:
      the data segment size including any needed padding.
    • getDoubleValue

      public double getDoubleValue(IFitsHeader key)
      Get the double value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0.0 if not found.
    • getDoubleValue

      public double getDoubleValue(IFitsHeader key, double dft)
      Get the double value associated with the given key.
      Parameters:
      key - The header key.
      dft - The default value to return if the key cannot be found.
      Returns:
      the associated value.
    • getDoubleValue

      public double getDoubleValue(String key)
      Get the double value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0.0 if not found.
    • getDoubleValue

      public double getDoubleValue(String key, double dft)
      Get the double value associated with the given key.
      Parameters:
      key - The header key.
      dft - The default value to return if the key cannot be found.
      Returns:
      the associated value.
    • getDuplicates

      public List<HeaderCard> getDuplicates()
      Returns:
      the list of duplicate cards. Note that when the header is read in, only the last entry for a given keyword is retained in the active header. This method returns earlier cards that have been discarded in the order in which they were encountered in the header. It is possible for there to be many cards with the same keyword in this list.
    • getFileOffset

      public long getFileOffset()
      Specified by:
      getFileOffset in interface FitsElement
      Returns:
      Get the offset of this header
    • getFloatValue

      public float getFloatValue(IFitsHeader key)
      Get the float value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0.0 if not found.
    • getFloatValue

      public float getFloatValue(IFitsHeader key, float dft)
      Parameters:
      key - The header key.
      dft - The value to be returned if the key is not found.
      Returns:
      the float value associated with the given key.
    • getFloatValue

      public float getFloatValue(String key)
      Get the float value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0.0 if not found.
    • getFloatValue

      public float getFloatValue(String key, float dft)
      Parameters:
      key - The header key.
      dft - The value to be returned if the key is not found.
      Returns:
      the float value associated with the given key.
    • getIntValue

      public int getIntValue(IFitsHeader key)
      Get the int value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0 if not found.
    • getIntValue

      public int getIntValue(IFitsHeader key, int dft)
      Parameters:
      key - The header key.
      dft - The value to be returned if the key is not found.
      Returns:
      the value associated with the key as an int.
    • getIntValue

      public int getIntValue(String key)
      Get the int value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0 if not found.
    • getIntValue

      public int getIntValue(String key, int dft)
      Parameters:
      key - The header key.
      dft - The value to be returned if the key is not found.
      Returns:
      the value associated with the key as an int.
    • getKey

      @Deprecated public String getKey(int n)
      Deprecated.
      An iterator from iterator(int) or iterator() should be used for sequential access to the header.
      Get the n'th key in the header.
      Parameters:
      n - the index of the key
      Returns:
      the card image; return null if the n'th key does not exist.
    • getLongValue

      public long getLongValue(IFitsHeader key)
      Get the long value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0 if not found.
    • getLongValue

      public long getLongValue(IFitsHeader key, long dft)
      Get the long value associated with the given key.
      Parameters:
      key - The header key.
      dft - The default value to be returned if the key cannot be found.
      Returns:
      the associated value.
    • getLongValue

      public long getLongValue(String key)
      Get the long value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or 0 if not found.
    • getLongValue

      public long getLongValue(String key, long dft)
      Get the long value associated with the given key.
      Parameters:
      key - The header key.
      dft - The default value to be returned if the key cannot be found.
      Returns:
      the associated value.
    • getNumberOfCards

      public int getNumberOfCards()
      Returns:
      the number of cards in the header
    • getNumberOfPhysicalCards

      public int getNumberOfPhysicalCards()
      Returns:
      the number of physical cards in the header.
    • getOriginalSize

      public long getOriginalSize()
      Returns:
      the size of the original header in bytes.
    • getSize

      public long getSize()
      Specified by:
      getSize in interface FitsElement
      Returns:
      the size of the header in bytes
    • getStringValue

      public String getStringValue(IFitsHeader header)
    • getStringValue

      public String getStringValue(String key)
      Get the String value associated with the given key.
      Parameters:
      key - The header key.
      Returns:
      The associated value or null if not found or if the value is not a string.
    • hadDuplicates

      public boolean hadDuplicates()
      Returns:
      Were duplicate header keys found when this record was read in?
    • insertComment

      public void insertComment(String value) throws HeaderCardException
      Add a COMMENT line.
      Parameters:
      value - The comment.
      Throws:
      HeaderCardException - If the parameter is not a valid FITS comment.
    • insertCommentStyle

      public void insertCommentStyle(String header, String value)
      Add a line to the header using the COMMENT style, i.e., no '=' in column 9.
      Parameters:
      header - The comment style header.
      value - A string to follow the header.
    • insertHistory

      public void insertHistory(String value) throws HeaderCardException
      Add a HISTORY line.
      Parameters:
      value - The history record.
      Throws:
      HeaderCardException - If the parameter is not a valid FITS comment.
    • iterator

      public Cursor<String,HeaderCard> iterator()
      Returns:
      an iterator over the header cards
    • iterator

      public Cursor<String,HeaderCard> iterator(int index)
      Parameters:
      index - the card index to start the iterator
      Returns:
      an iterator over the header cards starting at an index
    • makeData

      public Data makeData() throws FitsException
      Returns:
      Create the data element corresponding to the current header
      Throws:
      FitsException - if the header did not contain enough information to detect the type of the data
    • nextCard

      public HeaderCard nextCard()
      Returns:
      the next card in the Header using the current iterator
    • pointToData

      @Deprecated public void pointToData(Data o) throws FitsException
      Deprecated.
      Use the appropriate Header constructor.
      Create a header which points to the given data object.
      Parameters:
      o - The data object to be described.
      Throws:
      FitsException - if the data was not valid for this header.
    • read

      public void read(ArrayDataInput dis) throws TruncatedFileException, IOException
      Read a stream for header data.
      Specified by:
      read in interface FitsElement
      Parameters:
      dis - The input stream to read the data from.
      Throws:
      TruncatedFileException - the the stream ended prematurely
      IOException - if the operation failed
    • removeCard

      @Deprecated public void removeCard(String key) throws HeaderCardException
      Deprecated.
      Delete a key.
      Parameters:
      key - The header key.
      Throws:
      HeaderCardException - if the operation failed
    • reset

      public boolean reset()
      Reset the file pointer to the beginning of the header
      Specified by:
      reset in interface FitsElement
      Returns:
      True if the reset succeeded.
    • resetOriginalSize

      public void resetOriginalSize()
      Indicate that we can use the current internal size of the Header as the 'original' size (e.g., perhaps we've rewritten the header to disk). Note that affects the results of rewriteable(), so users should not call this method unless the underlying data has actually been updated.
    • rewrite

      public void rewrite() throws FitsException, IOException
      Rewrite the header.
      Specified by:
      rewrite in interface FitsElement
      Throws:
      FitsException - if the rewrite was unsuccessful.
      IOException - if the rewrite was unsuccessful.
    • rewriteable

      public boolean rewriteable()
      Specified by:
      rewriteable in interface FitsElement
      Returns:
      true if this element can be rewritten?
    • setBitpix

      public void setBitpix(int val)
      Set the BITPIX value for the header. The following values are permitted by FITS conventions:
      • 8 -- signed byte data. Also used for tables.
      • 16 -- signed short data.
      • 32 -- signed int data.
      • 64 -- signed long data.
      • -32 -- IEEE 32 bit floating point numbers.
      • -64 -- IEEE 64 bit floating point numbers.
      Parameters:
      val - The value set by the user.
    • setHeaderSorter

      public void setHeaderSorter(Comparator<String> headerSorter)
      Overwite the default header card sorter.
      Parameters:
      headerSorter - the sorter tu use or null to disable sorting
    • setNaxes

      public void setNaxes(int val)
      Set the value of the NAXIS keyword
      Parameters:
      val - The dimensionality of the data.
    • setNaxis

      public void setNaxis(int axis, int dim)
      Set the dimension for a given axis.
      Parameters:
      axis - The axis being set.
      dim - The dimension
    • setSimple

      public void setSimple(boolean val)
      Set the SIMPLE keyword to the given value.
      Parameters:
      val - The boolean value -- Should be true for FITS data.
    • setXtension

      public void setXtension(String val)
      Set the XTENSION keyword to the given value.
      Parameters:
      val - The name of the extension.
    • size

      @Deprecated public int size()
      Deprecated.
      use getNumberOfCards(). The units of the size of the header may be unclear.
      Returns:
      the number of cards in the header
    • updateLine

      public void updateLine(IFitsHeader key, HeaderCard card) throws HeaderCardException
      Update a line in the header
      Parameters:
      key - The key of the card to be replaced.
      card - A new card
      Throws:
      HeaderCardException - if the operation failed
    • updateLine

      public void updateLine(String key, HeaderCard card) throws HeaderCardException
      Update a line in the header
      Parameters:
      key - The key of the card to be replaced.
      card - A new card
      Throws:
      HeaderCardException - if the operation failed
    • updateLines

      public void updateLines(Header newHdr) throws HeaderCardException
      Overwrite the lines in the header. Add the new PHDU header to the current one. If keywords appear twice, the new value and comment overwrite the current contents. By Richard J Mathar.
      Parameters:
      newHdr - the list of new header data lines to replace the current ones.
      Throws:
      HeaderCardException - if the operation failed
    • write

      public void write(ArrayDataOutput dos) throws FitsException
      Write the current header (including any needed padding) to the output stream.
      Specified by:
      write in interface FitsElement
      Parameters:
      dos - The output stream to which the data is to be written.
      Throws:
      FitsException - if the header could not be written.