source: Sophya/trunk/SophyaExt/FitsIOServer/fabtwriter.h@ 3534

Last change on this file since 3534 was 3493, checked in by ansari, 17 years ago

1/ Ajout methodes FitsArrayHandler<T>::ReadAtOffset() WriteAtOffset() pour lecture/ecriture de tableaux <> HDU IMAGE par morceaux
2/ Ajout entete commentaire avec copyright LAL+DAPNIA dans les fichiers .h

Reza 30/04/2008

File size: 6.9 KB
Line 
1/*
2 --- SOPHYA software - FitsIOServer module ---
3 C. Magneville, 2001
4 (C) UPS+LAL IN2P3/CNRS (C) DAPNIA-SPP/CEA
5*/
6/* Interface Fits BINARY/ASCII Table Writer cmv 26/09/2001 */
7#ifndef FABTWRITER_H_SEEN
8#define FABTWRITER_H_SEEN
9
10#include "machdefs.h"
11#include <iostream>
12#include <string.h>
13#include <string>
14
15#include "anydataobj.h"
16#include "tvector.h"
17#include "FitsIO/fitsio.h"
18
19#include <vector>
20
21namespace SOPHYA {
22
23///////////////////////////////////////////////////////////////////////////
24///////////////////////////////////////////////////////////////////////////
25//! Class for writing into a FITS file (DO NOT USE)
26class FitsWriter : public AnyDataObj {
27protected:
28 FitsWriter(string fname,int lp=0);
29 FitsWriter(const char* cfname,int lp=0);
30 FitsWriter(string fname,bool update,int lp=0);
31 FitsWriter(const char* cfname,bool update,int lp=0);
32 virtual ~FitsWriter();
33
34public:
35 void Flush(void);
36
37 //! Write a double value in Fits header.
38 void WriteKey(const char *keyname,double val,char* comment=NULL);
39 //! Write a long value in Fits header.
40 void WriteKey(const char *keyname,long val,char* comment=NULL);
41 //! Write a long long value in Fits header.
42 void WriteKey(const char *keyname,LONGLONG val,char* comment=NULL);
43 //! Write a string value in Fits header.
44 void WriteKey(const char *keyname,string val,char* comment=NULL);
45 //! Write a character string value in Fits header.
46 inline void WriteKey(const char *keyname,char* val,char* comment=NULL)
47 {string dum=val; WriteKey(keyname,dum,comment);}
48 //! Set debug level
49 inline void SetDebug(int lp=0) {DbgLevel = (unsigned short) lp;}
50
51 //! Return the number of overflows managed by cfitsio
52 inline LONGLONG GetNOverFlow(void) {return NOverFlow;}
53
54 //! Return the c-fitsio file pointer
55 inline fitsfile * GetFitsPtr() { return FitsPtr; }
56protected:
57 struct KeyDouble {string keyname; double val; string comment;};
58 struct KeyLong {string keyname; long val; string comment;};
59 struct KeyLongLong {string keyname; LONGLONG val; string comment;};
60 struct KeyString {string keyname; string val; string comment;};
61
62 void cr_or_upd_fits(const char *cfname,bool update,int lp);
63
64 void writekeys(void);
65 void printerrorwrite(const char* type,int col,LONGLONG row,int sta);
66 void printerror(int sta) const;
67
68 string FitsFN,ExtName;
69 bool Update;
70 int HduType;
71 unsigned short DbgLevel;
72 fitsfile *FitsPtr;
73 LONGLONG NOverFlow;
74
75 vector<struct KeyDouble> DoubleKey;
76 vector<struct KeyLong> LongKey;
77 vector<struct KeyLongLong> LongLongKey;
78 vector<struct KeyString> StringKey;
79};
80
81///////////////////////////////////////////////////////////////////////////
82///////////////////////////////////////////////////////////////////////////
83//! Class for writing a FITS ASCII or BINARY table
84class FitsABTWriter : public FitsWriter {
85public:
86 FitsABTWriter(string fname,int hdutype=BINARY_TBL,int lp=0);
87 FitsABTWriter(const char* cfname,int hdutype=BINARY_TBL,int lp=0);
88 FitsABTWriter(string fname,bool update,int hdutype=BINARY_TBL,int lp=0);
89 FitsABTWriter(const char* cfname,bool update,int hdutype=BINARY_TBL,int lp=0);
90 virtual ~FitsABTWriter();
91
92 //! Set the FITS table extension name
93 inline void SetExtName(string extname=string("")) {ExtName = extname;}
94 //! Set the FITS table extension name
95 inline void SetExtName(char* extname="") {ExtName = extname;}
96
97 //! Add a new column to the FITS table and return its number (see addcol).
98 inline int AddCol(string label,string tform=string("")
99 ,string tunit=string(""),int datatype=TDOUBLE)
100 {return addcol(label.c_str(),tform.c_str(),tunit.c_str(),datatype);}
101 //! Add a new column to the FITS table and return its number (see addcol).
102 inline int AddCol(const char* label,const char* tform=""
103 ,const char* tunit="",int datatype=TDOUBLE)
104 {return addcol(label,tform,tunit,datatype);}
105
106 void Write(int col,LONGLONG row,int_1 val);
107 void Write(int col,LONGLONG row,uint_1 val);
108 void Write(int col,LONGLONG row,int_2 val);
109 void Write(int col,LONGLONG row,uint_2 val);
110 void Write(int col,LONGLONG row,int_4 val);
111 void Write(int col,LONGLONG row,uint_4 val);
112 void Write(int col,LONGLONG row,int_8 val);
113 void Write(int col,LONGLONG row,float val);
114 void Write(int col,LONGLONG row,double val);
115 LONGLONG Write(int col,LONGLONG row,TVector<uint_2>& val);
116 LONGLONG Write(int col,LONGLONG row,TVector<int_4>& val);
117 LONGLONG Write(int col,LONGLONG row,TVector<int_8>& val);
118 LONGLONG Write(int col,LONGLONG row,TVector<float>& val);
119 LONGLONG Write(int col,LONGLONG row,TVector<double>& val);
120
121 //! Return the number of created columns
122 inline int GetNbCol(void) {return (int) Label.size();}
123
124 //! Print to os
125 virtual void Print(ostream& os,int lp=1) const;
126 //! Print to stdout
127 inline void Print(int lp=1) const {Print(cout,lp);}
128
129protected:
130 int addcol(const char* label,const char* tform,const char* tunit,int datatype);
131 void createtbl(void);
132
133 bool FirstTime;
134 vector<string> Label;
135 vector<string> TForm;
136 vector<string> TUnit;
137};
138
139///////////////////////////////////////////////////////////////////////////
140///////////////////////////////////////////////////////////////////////////
141//! Class for writing a FITS Image
142class FitsImg2DWriter : public FitsWriter {
143public:
144 FitsImg2DWriter(string fname,int bitpix=FLOAT_IMG,int lp=0);
145 FitsImg2DWriter(const char* cfname,int bitpix=FLOAT_IMG,int lp=0);
146 FitsImg2DWriter(string fname,bool update,int bitpix=FLOAT_IMG,int lp=0);
147 FitsImg2DWriter(const char* cfname,bool update,int bitpix=FLOAT_IMG,int lp=0);
148 virtual ~FitsImg2DWriter();
149
150 void Write(TMatrix<uint_2>& data);
151 void Write(TMatrix<int_4>& data);
152 void Write(TMatrix<float>& data);
153 void Write(TMatrix<double>& data);
154
155 //! Print to os
156 virtual void Print(ostream& os) const;
157 //! Print to stdout
158 inline void Print(void) const {Print(cout);}
159
160protected:
161 void createimg(void);
162
163 int BitPix;
164 LONGLONG Naxis[2];
165 bool FirstTime;
166};
167
168///////////////////////////////////////////////////////////////////////////
169///////////////////////////////////////////////////////////////////////////
170//! Class for writing a FITS Image
171class FitsImg3DWriter : public FitsWriter {
172public:
173 FitsImg3DWriter(string fname,int bitpix=FLOAT_IMG,int lp=0);
174 FitsImg3DWriter(const char* cfname,int bitpix=FLOAT_IMG,int lp=0);
175 FitsImg3DWriter(string fname,bool update,int bitpix=FLOAT_IMG,int lp=0);
176 FitsImg3DWriter(const char* cfname,bool update,int bitpix=FLOAT_IMG,int lp=0);
177 virtual ~FitsImg3DWriter();
178
179 void Write(TArray<uint_2>& data);
180 void Write(TArray<int_4>& data);
181 void Write(TArray<float>& data);
182 void Write(TArray<double>& data);
183
184 //! Print to os
185 virtual void Print(ostream& os) const;
186 //! Print to stdout
187 inline void Print(void) const {Print(cout);}
188
189protected:
190 void createimg(void);
191
192 int BitPix;
193 LONGLONG Naxis[3];
194 bool FirstTime;
195};
196
197} // namespace SOPHYA
198#endif /* FABTWRITER_H_SEEN */
Note: See TracBrowser for help on using the repository browser.