summaryrefslogtreecommitdiffstats
path: root/fitsy++/file.h
diff options
context:
space:
mode:
Diffstat (limited to 'fitsy++/file.h')
-rw-r--r--fitsy++/file.h233
1 files changed, 233 insertions, 0 deletions
diff --git a/fitsy++/file.h b/fitsy++/file.h
new file mode 100644
index 0000000..a8cfc46
--- /dev/null
+++ b/fitsy++/file.h
@@ -0,0 +1,233 @@
+// Copyright (C) 1999-2018
+// Smithsonian Astrophysical Observatory, Cambridge, MA, USA
+// For conditions of distribution and use, see copyright notice in "copyright"
+
+#ifndef __fitsfile_h__
+#define __fitsfile_h__
+
+#include "head.h"
+
+#define B4KB 4096
+#define B1MB 1048576
+#define MAXWAVES 2048
+
+extern int DebugGZ;
+extern int DebugCompress;
+
+class OutFitsStream;
+
+class FitsFile {
+public:
+ enum FlushMode {NOFLUSH,FLUSH};
+ enum ScanMode {RELAX, EXACT};
+ enum ArchType {NATIVE,BIG,LITTLE};
+ enum EncodingType {RAW,ASCII,HEX,GZIP,BZ2,BIP,BIL,BSQ};
+
+protected:
+ FitsHead* primary_; // pointer to primary header
+ int managePrimary_; // flag, true if we manage primary header
+
+ FitsHead* head_; // pointer to header
+ int manageHead_; // flag, true if we manage header
+
+ void* data_; // pointer to raw data
+ size_t dataSize_; // size of data memory segment
+ size_t dataSkip_; // skip into data memory segment
+
+ int ext_; // extension number
+ int inherit_; // do we have inheritence?
+ int byteswap_; // flag, true if byteswap is needed
+ ArchType endian_; // endian of data
+ int valid_; // flag, true if file is valid
+
+ char* pName_; // parsed file name
+ char* pExt_; // parsed ext name
+ int pIndex_; // parsed ext number
+
+ char* pFilter_; // unparsed filter spec
+ char* pBinX_; // parsed bin table x col name
+ char* pBinY_; // parsed bin table y col name
+ char* pBinZ_; // parsed bin table z col name
+
+ int pBitpix_; // parsed bitpix
+ int pWidth_; // parsed width
+ int pHeight_; // parsed height
+ int pDepth_; // parsed depth
+ size_t pSkip_; // parsed skip size
+ ArchType pArch_; // parsed arch type
+ EncodingType pEncoding_; // parsed encoding
+
+ int pHPXOrder_; // parsed HPX params
+ int pHPXSystem_;
+ int pHPXLayout_;
+ int pHPXColumn_;
+ int pHPXQuad_;
+
+ double pCRPIX3_; // WCS_3 axis params
+ double pCRVAL3_;
+ double pCDELT3_;
+
+ int pcoord_;
+ int pxvalid_;
+ int pxmin_;
+ int pxmax_;
+ int pyvalid_;
+ int pymin_;
+ int pymax_;
+ int pzvalid_;
+ int pzmin_;
+ int pzmax_;
+ int pbvalid_;
+ int pblock_;
+
+protected:
+ void parse(const char*);
+ void parseNRRD(istream&);
+ void parseENVI(istream&);
+ int validParams();
+ int findEnd(const char*);
+ void setByteSwap();
+ int saveFitsHeaderCards(OutFitsStream&, int, int);
+
+public:
+ FitsFile();
+ virtual ~FitsFile();
+
+ int manageHead() {return manageHead_;}
+
+ virtual void done() {}
+ virtual char* page(char* ptr, size_t r) {return ptr;}
+ virtual void resetpage() {}
+ void error(const char*);
+ void* data() {return data_;}
+ size_t dataSize() {return dataSize_;}
+ size_t dataSkip() {return dataSkip_;}
+ FitsHead* head() {return head_;}
+ FitsHead* primary() {return primary_;}
+ int ext() {return ext_;}
+ const char* extname() {return head_ ? head_->extname() : NULL;}
+ int extver() {return head_ ? head_->extver() : 1;}
+ int extlevel() {return head_ ? head_->extlevel() : 1;}
+ int inherit() {return inherit_;}
+ void setValid(int vv) {valid_=vv;}
+ int isValid() {return valid_;}
+ int isImage() {return head_ ? head_->isImage() : 0;}
+ int isTable() {return head_ ? head_->isTable() : 0;}
+ int isAsciiTable() {return head_ ? head_->isAsciiTable() : 0;}
+ int isBinTable() {return head_ ? head_->isBinTable() : 0;}
+ int byteswap() {return byteswap_;}
+ ArchType endian() {return endian_;}
+
+ void setpName(const char*);
+ void setpExt(const char*);
+ void setpIndex(int i) {pIndex_ = i;}
+ void setpFilter(const char*);
+ void setpBinX(const char*);
+ void setpBinY(const char*);
+ void setpBinZ(const char*);
+ void setpBinXY(const char* x, const char* y)
+ {setpBinX(x); setpBinY(y);}
+ void setpBinXYZ(const char* x, const char* y, const char* z)
+ {setpBinX(x); setpBinY(y); setpBinZ(z);}
+
+ const char* pName() {return pName_;}
+ const char* pExt() {return pExt_;}
+ int pIndex() {return pIndex_;}
+
+ const char* pFilter() {return pFilter_;}
+ const char* pBinX() {return pBinX_;}
+ const char* pBinY() {return pBinY_;}
+ const char* pBinZ() {return pBinZ_;}
+
+ int pBitpix() {return pBitpix_;}
+ int pWidth() {return pWidth_;}
+ int pHeight() {return pHeight_;}
+ int pDepth() {return pDepth_;}
+ size_t pSkip() {return pSkip_;}
+ ArchType pArch() {return pArch_;}
+
+ void setpWidth(int i) {pWidth_ = i;}
+ void setpHeight(int i) {pHeight_ = i;}
+ void setpDepth(int i) {pDepth_ = i;}
+ void setpBitpix(int b) {pBitpix_ = b;}
+ void setpSkip(size_t s) {pSkip_ = s;}
+ void setpArch(ArchType a) {pArch_ = a;}
+
+ EncodingType pEncoding() {return pEncoding_;}
+ void setpEncoding(EncodingType e) {pEncoding_ = e;}
+
+ int pHPXOrder() {return pHPXOrder_;}
+ int pHPXSystem() {return pHPXSystem_;}
+ int pHPXLayout() {return pHPXLayout_;}
+ int pHPXColumn() {return pHPXColumn_;}
+ int pHPXQuad() {return pHPXQuad_;}
+
+ void setpHPXOrder(int oo) {pHPXOrder_ = oo;}
+ void setpHPXSystem(int ss) {pHPXSystem_ = ss;}
+ void setpHPXLayout(int ll) {pHPXLayout_ = ll;}
+ void setpHPXColumn(int cc) {pHPXColumn_ = cc-1;}
+ void setpHPXQuad(int qq) {pHPXQuad_ = qq-1;}
+
+ double pCRPIX3() {return pCRPIX3_;}
+ double pCRVAL3() {return pCRVAL3_;}
+ double pCDELT3() {return pCDELT3_;}
+
+ void setpCRPIX3(double dd) {pCRPIX3_ = dd;}
+ void setpCRVAL3(double dd) {pCRVAL3_ = dd;}
+ void setpCDELT3(double dd) {pCDELT3_ = dd;}
+
+ int pcoord() {return pcoord_;}
+ int pxvalid() {return pxvalid_;}
+ int pxmin() {return pxmin_;}
+ int pxmax() {return pxmax_;}
+ int pyvalid() {return pyvalid_;}
+ int pymin() {return pymin_;}
+ int pymax() {return pymax_;}
+ int pzvalid() {return pzvalid_;}
+ int pzmin() {return pzmin_;}
+ int pzmax() {return pzmax_;}
+ int pbvalid() {return pbvalid_;}
+ int pblock() {return pblock_;}
+
+ void setpcoord(int vv) {pcoord_ = vv;}
+ void setpxvalid(int vv) {pxvalid_ = vv;}
+ void setpxmin(int vv) {pxmin_ = vv;}
+ void setpxmax(int vv) {pxmax_ = vv;}
+ void setpyvalid(int vv) {pyvalid_ = vv;}
+ void setpymin(int vv) {pymin_ = vv;}
+ void setpymax(int vv) {pymax_ = vv;}
+ void setpzvalid(int vv) {pzvalid_ = vv;}
+ void setpzmin(int vv) {pzmin_ = vv;}
+ void setpzmax(int vv) {pzmax_ = vv;}
+ void setpbvalid(int vv) {pbvalid_ = vv;}
+ void setpblock(int vv) {pblock_ = vv;}
+
+ Vector getColMinMax(const char*);
+ Vector getColDim(const char*);
+
+ void setColMinMax(const char*, const Vector&);
+
+ int find(const char* name);
+
+ int getLogical(const char* name, int def);
+ int getInteger(const char* name, int def);
+ double getReal(const char* name, double def);
+ void getComplex(const char* name, double* real, double* img,
+ double rdef, double idef);
+ char* getString(const char* name);
+ char* getComment(const char* name);
+ char* getKeyword(const char* name);
+
+ int saveFitsPrimHeader(OutFitsStream&);
+ int saveFitsHeader(OutFitsStream&, int);
+ int saveFitsXtHeader(OutFitsStream&, int);
+ int saveFits(OutFitsStream&);
+ int saveFitsPad(OutFitsStream&, size_t, char);
+ int saveFitsTable(OutFitsStream&);
+ int saveFitsIISHeader(OutFitsStream&);
+ int saveFitsIIS(OutFitsStream&, Vector&);
+
+ int saveArray(OutFitsStream&, ArchType);
+};
+
+#endif