source: trunk/Mars/mcorsika/MCorsikaFormat.h @ 19349

Last change on this file since 19349 was 19349, checked in by tbretz, 8 months ago
For an older gcc
File size: 2.0 KB
Line 
1#ifndef MARS_MDataFormat
2#define MARS_MDataFormat
3
4#ifndef MARS_MAGIC
5#include "MAGIC.h"
6#endif
7
8#ifndef ROOT_Rtypes
9#include <Rtypes.h>
10#endif
11
12#include <stdint.h>
13
14#include <iosfwd>
15#include <fstream>
16
17class MCorsikaFormat
18{
19protected:
20   std::istream  *fIn;
21
22public:
23    enum
24    {
25        kBlockLengthRaw  = 0x00005994, // Raw Corsika without Thinning
26        kBlockLengthThin = 0x00006660, // Raw Corsika with Thinning
27
28        kSyncMarker  = 0xd41f8a37,     // EventIO
29
30        kRUNH = 0x484e5552, // "RUNH"
31        kRUNE = 0x454e5552, // "RUNE"
32        kEVTH = 0x48545645, // "EVTH"
33        kEVTE = 0x45545645, // "EVTE"
34    };
35
36   MCorsikaFormat(std::istream * in)
37        : fIn(in) { }
38   virtual ~MCorsikaFormat();
39
40   virtual Bool_t NextBlock(Int_t   readState, Int_t & blockType, Int_t & blockVersion,
41                            Int_t & blockIdentifier, Int_t & blockLength) const = 0;
42
43           void   Seek(std::streampos offset)    {fIn->seekg(offset, std::ios::cur);}
44
45   virtual Bool_t SeekEvtEnd() = 0;
46
47   virtual Bool_t IsEventioFormat() const = 0;
48
49   virtual Bool_t Eof() const;
50
51           Bool_t Read(void *ptr, Int_t i) const;
52
53   static MCorsikaFormat *CorsikaFormatFactory(const char *fileName);
54};
55
56
57class MCorsikaFormatRaw : public MCorsikaFormat
58{
59private:
60   uint32_t fBlockLength;
61
62public:
63   MCorsikaFormatRaw(std::istream * in, const uint32_t &bl)
64        : MCorsikaFormat(in), fBlockLength(bl) {}
65
66   Bool_t NextBlock(Int_t   readState, Int_t & blockType, Int_t & blockVersion,
67                    Int_t & blockIdentifier, Int_t & blockLength) const;
68
69   Bool_t SeekEvtEnd();
70
71   Bool_t IsEventioFormat() const {return kFALSE;}
72};
73
74
75class MCorsikaFormatEventIO : public MCorsikaFormat
76{
77
78public:
79    MCorsikaFormatEventIO(std::istream *in)
80        : MCorsikaFormat(in) {}
81
82
83    Bool_t NextBlock(Int_t   readState, Int_t & blockType, Int_t & blockVersion,
84                     Int_t & blockIdentifier, Int_t & blockLength) const;
85
86    Bool_t SeekEvtEnd();
87
88    Bool_t IsEventioFormat() const { return kTRUE; }
89
90};
91
92#endif
93
Note: See TracBrowser for help on using the repository browser.