1 | #ifndef MINIFITS_H_SEEN
|
---|
2 | #define MINIFITS_H_SEEN
|
---|
3 |
|
---|
4 | #include <stdio.h>
|
---|
5 | #include <string>
|
---|
6 |
|
---|
7 | #include "brtypes.h"
|
---|
8 |
|
---|
9 | /*
|
---|
10 | Classe d'I/O simplifie FITS pour ACQ BAO-radio
|
---|
11 | R. Ansari, C. Magneville - Fev 2008
|
---|
12 | */
|
---|
13 |
|
---|
14 | using namespace std;
|
---|
15 |
|
---|
16 | class MiniFITSException {
|
---|
17 | public:
|
---|
18 | explicit MiniFITSException(const char * m) { msg = m; }
|
---|
19 | explicit MiniFITSException(const string& m) { msg = m; }
|
---|
20 | virtual ~MiniFITSException() { }
|
---|
21 | virtual string const& Msg() const {return msg;}
|
---|
22 | private:
|
---|
23 | string msg;
|
---|
24 | };
|
---|
25 |
|
---|
26 |
|
---|
27 | enum MiniFITS_DT { MF_Byte, MF_Int16, MF_Float32 };
|
---|
28 | enum MiniFITS_Mode { MF_Read, MF_Write };
|
---|
29 |
|
---|
30 | class MiniFITSFile {
|
---|
31 | public:
|
---|
32 | MiniFITSFile();
|
---|
33 | MiniFITSFile(string const & nom, MiniFITS_Mode rwm);
|
---|
34 | MiniFITSFile(const char* nom, MiniFITS_Mode rwm);
|
---|
35 |
|
---|
36 | ~MiniFITSFile();
|
---|
37 |
|
---|
38 | void Open(const char* nom, MiniFITS_Mode rwm);
|
---|
39 | inline void Open(string const & nom, MiniFITS_Mode rwm)
|
---|
40 | { return Open(nom.c_str(), rwm); }
|
---|
41 |
|
---|
42 | void Close();
|
---|
43 |
|
---|
44 | inline MiniFITS_DT DataType() { return dtype; }
|
---|
45 | string DataTypeToString();
|
---|
46 |
|
---|
47 | size_t NAxis1() { return nax1; }
|
---|
48 | size_t NAxis2() { return nax2; }
|
---|
49 |
|
---|
50 | void setDTypeNaxis(MiniFITS_DT dt, size_t na1, size_t na2);
|
---|
51 |
|
---|
52 | // Lecture avec indication de la taille (nb d'elements) et offset
|
---|
53 | int Read(void* data, size_t sz, size_t offset=0);
|
---|
54 | inline int ReadB(Byte* data, size_t nel, size_t offsel=0)
|
---|
55 | { return ( Read((void *)data, nel, offsel) ); }
|
---|
56 | inline int ReadI(Int16* data, size_t nel, size_t offsel=0)
|
---|
57 | { return ( Read((void *)data, nel*sizeof(Int16), offsel*sizeof(Int16)) ); }
|
---|
58 | inline int ReadF(Float32* data, size_t nel, size_t offsel=0)
|
---|
59 | { return ( Read((void *)data, nel*sizeof(Float32), offsel*sizeof(Float32)) ); }
|
---|
60 |
|
---|
61 | // Ecriture en mode append (fin de fichier)
|
---|
62 | int Write(void* data, size_t sz);
|
---|
63 | inline int WriteB(Byte* data, size_t nel)
|
---|
64 | { return ( Write((void *)data, nel) ); }
|
---|
65 | inline int WriteI(Int16* data, size_t nel)
|
---|
66 | { return ( Write((void *)data, nel*sizeof(Int16)) ); }
|
---|
67 | inline int WriteF(Float32* data, size_t nel)
|
---|
68 | { return ( Write((void *)data, nel*sizeof(Float32)) ); }
|
---|
69 |
|
---|
70 | // string getKey(string& key);
|
---|
71 | protected:
|
---|
72 | void FillHeader();
|
---|
73 | void DecodeHeader();
|
---|
74 | void Init();
|
---|
75 |
|
---|
76 | FILE* fip;
|
---|
77 | MiniFITS_Mode rwmode;
|
---|
78 | MiniFITS_DT dtype;
|
---|
79 | size_t nax1, nax2;
|
---|
80 | size_t totwsz; // total bytes ecrits
|
---|
81 | char* header; // entete FITS
|
---|
82 | };
|
---|
83 |
|
---|
84 | #endif
|
---|