source: trunk/MagicSoft/Mars/mcorsika/MCorsikaFormat.h@ 9620

Last change on this file since 9620 was 9616, checked in by rohlfs, 14 years ago
can read also EventIO files
File size: 2.0 KB
Line 
1#ifndef MARS_MDataFormat
2#define MARS_MDataFormat
3
4
5#ifndef ROOT_Rtypes
6#include <Rtypes.h>
7#endif
8
9
10#include <iosfwd>
11
12#include "MLog.h"
13
14
15class MCorsikaFormat
16{
17protected:
18 MLog * fLog;
19 std::istream * fIn;
20
21 std::streampos fPrevPos; // file position before previous read
22 std::streampos fPos;
23
24public:
25 MCorsikaFormat(MLog * log, std::istream * in)
26 : fIn(in) {fLog = log;}
27 virtual ~MCorsikaFormat();
28
29 virtual Bool_t SeekNextBlock(const char * id, unsigned short type) = 0;
30 virtual void UnreadLastHeader() = 0;
31
32 virtual Bool_t ReadData(Int_t numValues, Float_t * buffer,
33 Int_t minSeekValues = 272);
34 virtual void UnreadLastData();
35
36 virtual Bool_t SeekEvtEnd() = 0;
37 virtual void StorePos();
38 virtual void ResetPos();
39
40 virtual Bool_t GetNextEvent(Float_t ** buffer, Bool_t & readError) = 0;
41 virtual Bool_t IsEventioFormat() = 0;
42
43 virtual Bool_t Eof() {return fIn->eof();}
44
45
46 std::streampos GetCurrPos() {return fIn->tellg();}
47};
48
49
50class MCorsikaFormatRaw : public MCorsikaFormat
51{
52private:
53
54public:
55 MCorsikaFormatRaw(MLog * log, std::istream * in)
56 : MCorsikaFormat(log, in) {}
57
58 Bool_t SeekNextBlock(const char * id, unsigned short type);
59 void UnreadLastHeader();
60
61 Bool_t SeekEvtEnd();
62
63 Bool_t GetNextEvent(Float_t ** buffer, Bool_t & readError);
64 Bool_t IsEventioFormat() {return kFALSE;}
65};
66
67
68class MCorsikaFormatEventIO : public MCorsikaFormat
69{
70private:
71
72public:
73 MCorsikaFormatEventIO(MLog * log, std::istream * in)
74 : MCorsikaFormat(log, in) {}
75
76 Bool_t SeekNextBlock(const char * id, unsigned short type);
77 void UnreadLastHeader();
78
79 Bool_t SeekEvtEnd();
80
81 Bool_t GetNextEvent(Float_t ** buffer, Bool_t & readError);
82 Bool_t IsEventioFormat() {return kTRUE;}
83
84private:
85 Bool_t NextTopLevelBlock(Int_t & length, Bool_t & readError);
86 Bool_t NextEventBlock(Int_t & length, Bool_t & readError);
87
88};
89
90
91MCorsikaFormat * CorsikaFormatFactory(MLog * log, const char * fileName);
92
93
94#endif
95
Note: See TracBrowser for help on using the repository browser.