source: Sophya/trunk/AddOn/TAcq/minifits.h@ 3672

Last change on this file since 3672 was 3658, checked in by ansari, 16 years ago

1/ Gestion multi-fibre ds RAcqMemZoneMgr et les DMAReader/DiskWriter (brproc.cc)
2/ Possibilite d'ajout de mot cle ds l'entete FITS par la classe MiniFITSFile

Reza , 18/10/2009

File size: 3.4 KB
Line 
1#ifndef MINIFITS_H_SEEN
2#define MINIFITS_H_SEEN
3
4#include <stdio.h>
5#include <exception>
6#include <string>
7
8#include "brtypes.h"
9
10/*
11 Classe d'I/O simplifie FITS pour ACQ BAO-radio
12 R. Ansari, C. Magneville - Fev 2008
13*/
14
15using namespace std;
16
17#define MFEX_MAXMSGLEN 160
18
19class MiniFITSException : public std::exception {
20 public:
21 explicit MiniFITSException(const char * m) throw() ;
22 explicit MiniFITSException(const string& m) throw() ;
23 virtual ~MiniFITSException() throw() ;
24 //! Implementation of std::exception what() method, returning the exception message
25 virtual const char* what() const throw();
26 virtual string const Msg() const ;
27 private:
28 char msg_[MFEX_MAXMSGLEN];
29};
30
31
32enum MiniFITS_DT { MF_Byte, MF_Int16, MF_Float32 };
33enum MiniFITS_Mode { MF_Read, MF_Write };
34
35class MiniFITSFile {
36 public:
37 MiniFITSFile();
38 MiniFITSFile(string const & nom, MiniFITS_Mode rwm);
39 MiniFITSFile(const char* nom, MiniFITS_Mode rwm);
40
41 ~MiniFITSFile();
42
43 void Open(const char* nom, MiniFITS_Mode rwm);
44 inline void Open(string const & nom, MiniFITS_Mode rwm)
45 { return Open(nom.c_str(), rwm); }
46
47 void Close();
48
49 inline MiniFITS_DT DataType() { return dtype; }
50 string DataTypeToString();
51
52 size_t NAxis1() { return nax1; }
53 size_t NAxis2() { return nax2; }
54
55 void setDTypeNaxis(MiniFITS_DT dt, size_t na1, size_t na2);
56
57 // Lecture avec indication de la taille (nb d'elements) et offset
58 int Read(void* data, size_t sz, size_t offset=0);
59 inline int ReadB(Byte* data, size_t nel, size_t offsel=0)
60 { return ( Read((void *)data, nel, offsel) ); }
61 inline int ReadI(Int16* data, size_t nel, size_t offsel=0)
62 { return ( Read((void *)data, nel*sizeof(Int16), offsel*sizeof(Int16)) ); }
63 inline int ReadF(Float32* data, size_t nel, size_t offsel=0)
64 { return ( Read((void *)data, nel*sizeof(Float32), offsel*sizeof(Float32)) ); }
65
66 // Ecriture en mode append (fin de fichier)
67 int Write(void* data, size_t sz);
68 inline int WriteB(Byte* data, size_t nel)
69 { return ( Write((void *)data, nel) ); }
70 inline int WriteI(Int16* data, size_t nel)
71 { return ( Write((void *)data, nel*sizeof(Int16)) ); }
72 inline int WriteF(Float32* data, size_t nel)
73 { return ( Write((void *)data, nel*sizeof(Float32)) ); }
74
75 // Ajout de mots-cle a l'entete FITS
76 int AddKeyI(const char* key, long val, const char* comm=NULL);
77 inline int AddKeyI(string const& key, long val)
78 { return AddKeyI(key.c_str(), val); }
79 inline int AddKeyI(string const& key, long val, string const& comm)
80 { return AddKeyI(key.c_str(), val, comm.c_str()); }
81 int AddKeyD(const char* key, double val, const char* comm=NULL);
82 inline int AddKeyD(string const& key, double val)
83 { return AddKeyD(key.c_str(), val); }
84 inline int AddKeyD(string const& key, double val, string const& comm)
85 { return AddKeyD(key.c_str(), val, comm.c_str()); }
86 int AddKeyS(const char* key, const char* val, const char* comm=NULL);
87 inline int AddKeyS(string const& key, string const& val)
88 { return AddKeyS(key.c_str(), val.c_str()); }
89 inline int AddKeyS(string const& key, string const& val, string const& comm)
90 { return AddKeyS(key.c_str(), val.c_str(), comm.c_str()); }
91
92 // string getKey(string& key);
93 protected:
94 void FillHeader();
95 void DecodeHeader();
96 void Init();
97
98 FILE* fip;
99 MiniFITS_Mode rwmode;
100 MiniFITS_DT dtype;
101 size_t nax1, nax2;
102 size_t totwsz; // total bytes ecrits
103 char* header; // entete FITS
104 int nkeya_; //
105};
106
107#endif
Note: See TracBrowser for help on using the repository browser.