CCfits 2.7
ExtHDU.h
1// Astrophysics Science Division,
2// NASA/ Goddard Space Flight Center
3// HEASARC
4// http://heasarc.gsfc.nasa.gov
5// e-mail: ccfits@legacy.gsfc.nasa.gov
6//
7// Original author: Ben Dorman
8
9#ifndef EXTHDU_H
10#define EXTHDU_H 1
11
12// CCfitsHeader
13#include "CCfits.h"
14// HDU
15#include "HDU.h"
16// FitsError
17#include "FitsError.h"
18
19namespace CCfits {
20 class Column;
21
22} // namespace CCfits
23
24
25namespace CCfits {
26
438 class ExtHDU : public HDU //## Inherits: <unnamed>%38048213E7A8
439 {
440
441 public:
442
443
444
445 class WrongExtensionType : public FitsException //## Inherits: <unnamed>%39E61E630349
446 {
447 public:
448 WrongExtensionType (const String& msg, bool silent = true);
449
450 protected:
451 private:
452 private: //## implementation
453 };
454 ExtHDU(const ExtHDU &right);
455 virtual ~ExtHDU();
456 friend bool operator<(const ExtHDU &left,const ExtHDU &right);
457
458 friend bool operator>(const ExtHDU &left,const ExtHDU &right);
459
460 friend bool operator<=(const ExtHDU &left,const ExtHDU &right);
461
462 friend bool operator>=(const ExtHDU &left,const ExtHDU &right);
463
464 static void readHduName (const fitsfile* fptr, int hduIndex, String& hduName, int& hduVersion);
465 virtual void readData (bool readFlag = false, const std::vector<String>& keys = std::vector<String>()) = 0;
466 const String& name () const;
467 virtual HDU * clone (FITS* p) const = 0;
468 // By all means necessary, set the fitsfile pointer so that
469 // this HDU is the current HDU.
470 //
471 // This would appear to be a good candidate for the public
472 // interface.
473 virtual void makeThisCurrent () const;
474 virtual Column& column (const String& colName, bool caseSensitive = true) const;
475 virtual Column& column (int colIndex) const;
476 virtual long rows () const;
477 virtual void addColumn (ValueType type, const String& columnName, long repeatWidth, const String& colUnit = String(""), long decimals = -1, size_t columnNumber = 0);
478 virtual void copyColumn(const Column& inColumn, int colIndx, bool insertNewCol=true);
479 virtual void deleteColumn (const String& columnName);
480 virtual long getRowsize () const;
481 virtual int numCols () const;
482 virtual const ColMap& column () const;
483
484 bool isCompressed () const;
485 int version () const;
486 void version (int value);
487 static const String& missHDU ();
488 static void setMissHDU (const String& value);
489
490 public:
491 // Additional Public Declarations
492
493 // interface is virtually identical to PHDU. The implementation is
494 // similar apart from a check for wrong extension type.
495
496
497
498
499 template <typename S>
500 void write(const std::vector<long>& first,
501 long nElements,
502 const std::valarray<S>& data,
503 S* nullValue);
504
505
506 template <typename S>
507 void write(long first,
508 long nElements,
509 const std::valarray<S>& data,
510 S* nullValue);
511
512 template <typename S>
513 void write(const std::vector<long>& first,
514 long nElements,
515 const std::valarray<S>& data);
516
517
518 template <typename S>
519 void write(long first,
520 long nElements,
521 const std::valarray<S>& data);
522
523 template <typename S>
524 void write(const std::vector<long>& firstVertex,
525 const std::vector<long>& lastVertex,
526 const std::valarray<S>& data);
527
528 // read image data & return the array. Can't return a reference because type
529 // conversion in general requires allocating a new object.
530 // note semantics of reading column data are easily distinguished: they require
531 // the user to perform the operation EXT.column({name,index}).read(...)
532
533 template <typename S>
534 void read (std::valarray<S>& image) ;
535
536 template<typename S>
537 void read (std::valarray<S>& image,
538 long first,
539 long nElements,
540 S* nullValue) ;
541
542 template<typename S>
543 void read (std::valarray<S>& image,
544 const std::vector<long>& first,
545 long nElements,
546 S* nullValue) ;
547
548 template<typename S>
549 void read (std::valarray<S>& image,
550 const std::vector<long>& firstVertex,
551 const std::vector<long>& lastVertex,
552 const std::vector<long>& stride) ;
553
554 template<typename S>
555 void read (std::valarray<S>& image,
556 long first,
557 long nElements) ;
558
559 template<typename S>
560 void read (std::valarray<S>& image,
561 const std::vector<long>& first,
562 long nElements) ;
563
564 template<typename S>
565 void read (std::valarray<S>& image,
566 const std::vector<long>& firstVertex,
567 const std::vector<long>& lastVertex,
568 const std::vector<long>& stride,
569 S* nullValue) ;
570
571 protected:
572 // ExtHDU needs a default constructor. This is it.
573 ExtHDU (FITS* p, HduType xtype, const String &hduName, int version);
574 // The writing constructor. Forces the user to supply a name
575 // for the HDU
576 ExtHDU (FITS* p, HduType xtype, const String &hduName, int bitpix, int naxis, const std::vector<long>& axes, int version);
577 // ExtHDU constructor for getting ExtHDUs by number.
578 // Necessary since EXTNAME is a reserved not required
579 // keyword.
580 ExtHDU (FITS* p, HduType xtype, int number);
581
582 virtual std::ostream & put (std::ostream &s) const = 0;
583 virtual void setColumn (const String& colname, Column* value);
584 virtual void checkExtensionType () const;
585 int getVersion ();
586 long pcount () const;
587 void pcount (long value);
588 long gcount () const;
589 void gcount (long value);
590 HduType xtension () const;
591 void xtension (HduType value);
592
593 // Additional Protected Declarations
594
595 private:
596 virtual void initRead () = 0;
597 void checkXtension ();
598
599 // Additional Private Declarations
600
601 private: //## implementation
602 // Data Members for Class Attributes
603 long m_pcount;
604 long m_gcount;
605 int m_version;
606 HduType m_xtension;
607 static String s_missHDU;
608
609 // Data Members for Associations
610 String m_name;
611
612 // Additional Implementation Declarations
613
614 };
615
616 // Class CCfits::ExtHDU::WrongExtensionType
617
618 // Class CCfits::ExtHDU
619
620 inline bool operator<(const ExtHDU &left,const ExtHDU &right)
621 {
622 if (left.m_name < right.m_name) return true;
623 if (left.m_name > right.m_name) return false;
624 if (left.m_name == right.m_name)
625 {
626 if (left.m_version < right.m_version) return true;
627 }
628 return false;
629 }
630
631 inline bool operator>(const ExtHDU &left,const ExtHDU &right)
632 {
633 return !operator<=(left,right);
634 }
635
636 inline bool operator<=(const ExtHDU &left,const ExtHDU &right)
637 {
638 if (left.m_name <= right.m_name)
639 {
640 if (left.m_version <= right.m_version) return true;
641 }
642 return false;
643 }
644
645 inline bool operator>=(const ExtHDU &left,const ExtHDU &right)
646 {
647 return !operator<(left,right);
648 }
649
650
651 inline const String& ExtHDU::name () const
652 {
653
654 return m_name;
655 }
656
657 inline long ExtHDU::pcount () const
658 {
659 return m_pcount;
660 }
661
662 inline void ExtHDU::pcount (long value)
663 {
664 m_pcount = value;
665 }
666
667 inline long ExtHDU::gcount () const
668 {
669 return m_gcount;
670 }
671
672 inline void ExtHDU::gcount (long value)
673 {
674 m_gcount = value;
675 }
676
677 inline int ExtHDU::version () const
678 {
679 return m_version;
680 }
681
682 inline void ExtHDU::version (int value)
683 {
684 m_version = value;
685 }
686
687 inline HduType ExtHDU::xtension () const
688 {
689 return m_xtension;
690 }
691
692 inline void ExtHDU::xtension (HduType value)
693 {
694 m_xtension = value;
695 }
696
697 inline const String& ExtHDU::missHDU ()
698 {
699 return s_missHDU;
700 }
701
702 inline void ExtHDU::setMissHDU (const String& value)
703 {
704 s_missHDU = value;
705 }
706
707} // namespace CCfits
708
709
710#endif
Abstract base class for Column objects.
Definition Column.h:842
Exception to be thrown on unmatched extension types.
Definition ExtHDU.h:446
base class for all FITS extension HDUs, i.e. Image Extensions and Tables.
Definition ExtHDU.h:439
virtual long getRowsize() const
return the optimal number of rows to read or write at a time
Definition ExtHDU.cxx:290
virtual void readData(bool readFlag=false, const std::vector< String > &keys=std::vector< String >())=0
read data from HDU depending on readFlag and keys.
const String & name() const
return the name of the extension.
Definition ExtHDU.h:651
virtual void addColumn(ValueType type, const String &columnName, long repeatWidth, const String &colUnit=String(""), long decimals=-1, size_t columnNumber=0)
add a new column to an existing table HDU.
Definition ExtHDU.cxx:248
void read(std::valarray< S > &image)
Read image data into container.
Definition ExtHDUT.h:18
virtual int numCols() const
return the number of Columns in the Table (the TFIELDS keyword).
Definition ExtHDU.cxx:298
virtual void makeThisCurrent() const
move the fitsfile pointer to this current HDU.
Definition ExtHDU.cxx:208
virtual void copyColumn(const Column &inColumn, int colIndx, bool insertNewCol=true)
copy a column (from different or same HDU and file) into an existing table HDU.
Definition ExtHDU.cxx:255
bool isCompressed() const
return true if image is stored using compression.
Definition ExtHDU.cxx:312
HduType xtension() const
return the extension type
Definition ExtHDU.h:687
static void readHduName(const fitsfile *fptr, int hduIndex, String &hduName, int &hduVersion)
read extension name.
Definition ExtHDU.cxx:148
virtual ~ExtHDU()
destructor
Definition ExtHDU.cxx:131
virtual void deleteColumn(const String &columnName)
delete a column in a Table extension by name.
Definition ExtHDU.cxx:260
void write(const std::vector< long > &first, long nElements, const std::valarray< S > &data, S *nullValue)
Write a set of pixels to an image extension with the first pixel specified by an n-tuple,...
Definition ExtHDUT.h:426
long pcount() const
return required pcount keyword value
Definition ExtHDU.h:657
long gcount() const
return required gcount keyword value
Definition ExtHDU.h:667
virtual HDU * clone(FITS *p) const =0
virtual copy constructor
int version() const
return the extension version number.
Definition ExtHDU.h:677
virtual const ColMap & column() const
return a reference to the multimap containing the columns.
Definition ExtHDU.cxx:306
virtual long rows() const
return the number of rows in the extension.
Definition ExtHDU.cxx:235
Memory object representation of a disk FITS file.
Definition FITS.h:629
FitsException is the base class for all exceptions thrown by this library.
Definition FitsError.h:94
Base class for all HDU [Header-Data Unit] objects.
Definition HDU.h:687
long bitpix() const
return the data type keyword.
Definition HDU.h:1013
long axes() const
return the number of axes in the HDU data section (always 2 for tables).
Definition HDU.h:993
Namespace enclosing all CCfits classes and globals definitions.
Definition AsciiTable.cxx:26
ValueType
CCfits value types and their CFITSIO equivalents (in caps)
Definition CCfits.h:81
std::multimap< std::string, CCfits::Column * > ColMap
Type definition for a table's column container.
Definition CCfits.h:142