1 | #ifndef MARS_MRawRunHeader |
---|
2 | #define MARS_MRawRunHeader |
---|
3 | /////////////////////////////////////////////////////////////////////// |
---|
4 | // // |
---|
5 | // MRunHeader // |
---|
6 | // // |
---|
7 | /////////////////////////////////////////////////////////////////////// |
---|
8 | |
---|
9 | #ifndef MARS_MTime |
---|
10 | #include "MTime.h" |
---|
11 | #endif |
---|
12 | |
---|
13 | class TBuffer; |
---|
14 | class MArrayS; |
---|
15 | |
---|
16 | class MRawRunHeader : public MParContainer |
---|
17 | { |
---|
18 | public: |
---|
19 | // |
---|
20 | // enum for the Run Type. Monte Carlo Runs have |
---|
21 | // to have a value greater than 255 (>0xff) |
---|
22 | // |
---|
23 | enum { |
---|
24 | kRTData = 0x0000, |
---|
25 | kRTPedestal = 0x0001, |
---|
26 | kRTCalibration = 0x0002, |
---|
27 | kRTDominoCal = 0x0003, |
---|
28 | kRTLinearity = 0x0004, |
---|
29 | kRTPointRun = 0x0007, |
---|
30 | kRTMonteCarlo = 0x0100, |
---|
31 | kRTNone = 0xffff |
---|
32 | }; |
---|
33 | |
---|
34 | // |
---|
35 | // Magic number to detect the magic file type |
---|
36 | // |
---|
37 | static const UShort_t kMagicNumber; |
---|
38 | static const Byte_t kMaxFormatVersion; |
---|
39 | |
---|
40 | private: |
---|
41 | /* ---- Run Header Informations ---- */ |
---|
42 | UShort_t fMagicNumber; // File type identifier |
---|
43 | |
---|
44 | UInt_t fHeaderSizeRun; // Size of run header |
---|
45 | UInt_t fHeaderSizeEvt; // Size of evt header |
---|
46 | UInt_t fHeaderSizeCrate; // Size of crate header |
---|
47 | |
---|
48 | UShort_t fFormatVersion; // File format version |
---|
49 | UShort_t fSoftVersion; // DAQ software version |
---|
50 | UShort_t fFadcType; // FADC type (1=Siegen, 2=MUX) |
---|
51 | UShort_t fCameraVersion; // Camera Version (1=MAGIC I) |
---|
52 | UShort_t fTelescopeNumber; // Telescope number (1=Magic I) |
---|
53 | UShort_t fRunType; // Run Type |
---|
54 | UInt_t fRunNumber; // Run number |
---|
55 | UInt_t fFileNumber; // File number |
---|
56 | Char_t fProjectName[101]; // Project name |
---|
57 | Char_t fSourceName[81]; // Source name |
---|
58 | Char_t fObservationMode[61]; // observation mode |
---|
59 | Char_t fSourceEpochChar[4]; // epoch char of the source |
---|
60 | UShort_t fSourceEpochDate; // epoch date of the source |
---|
61 | UShort_t fNumCrates; // number of electronic boards |
---|
62 | UShort_t fNumPixInCrate; // number of pixels in crate |
---|
63 | UShort_t fNumSamplesLoGain; // number of logain samples stored |
---|
64 | UShort_t fNumSamplesHiGain; // number of higain samples stored |
---|
65 | UShort_t fNumBytesPerSample; // number of bytes per sample |
---|
66 | UInt_t fNumEvents; // number of events stored |
---|
67 | UInt_t fNumEventsRead; // number of events read by the electronics |
---|
68 | UShort_t fSamplingFrequency; // Sampling Frequency [MHz] |
---|
69 | Byte_t fFadcResolution; // number of significant bits |
---|
70 | MTime fRunStart; // time of run start |
---|
71 | MTime fRunStop; // time of run stop |
---|
72 | MArrayS *fPixAssignment; //-> pixel assignment table |
---|
73 | |
---|
74 | Bool_t SwapAssignment(Short_t id0, Short_t id1); |
---|
75 | void FixRunNumbers(); |
---|
76 | Bool_t FixAssignment(); |
---|
77 | Bool_t Fixes(); |
---|
78 | Bool_t IsConsistent() const; |
---|
79 | |
---|
80 | Bool_t ReadEvtOld(istream& fin); |
---|
81 | |
---|
82 | // MParContainer |
---|
83 | Int_t ReadEnv(const TEnv &env, TString prefix, Bool_t print); |
---|
84 | |
---|
85 | public: |
---|
86 | MRawRunHeader(const char *name=NULL, const char *title=NULL); |
---|
87 | MRawRunHeader(const MRawRunHeader &h); |
---|
88 | ~MRawRunHeader(); |
---|
89 | |
---|
90 | // This is to be used in the MC chain only! |
---|
91 | /* |
---|
92 | void SetMagicNumber(UShort_t a) { fMagicNumber=a; } |
---|
93 | void SetFormatVersion(UShort_t a) { fFormatVersion=a; } |
---|
94 | void SetSoftVersion(UShort_t a) { fSoftVersion=a; } |
---|
95 | void SetRunType(UShort_t a) { fRunType=a; } |
---|
96 | void SetRunNumber(UInt_t a) { fRunNumber=a; } |
---|
97 | void SetNumEvents(UInt_t a) { fNumEvents=a; } |
---|
98 | void SetNumSamples(UShort_t low, UShort_t high) |
---|
99 | { |
---|
100 | fNumSamplesLoGain=low; |
---|
101 | fNumSamplesHiGain=high; |
---|
102 | } |
---|
103 | void SetNumCrates(UShort_t a) { fNumCrates=a; } |
---|
104 | void SetNumPixInCrate(UShort_t a) { fNumPixInCrate=a; } |
---|
105 | */ |
---|
106 | void InitFadcType(UShort_t type); |
---|
107 | void InitCamera(UShort_t type, UShort_t pix=0); |
---|
108 | void InitPixels(UShort_t pix) { InitCamera((UShort_t)-1, pix); } |
---|
109 | void SetRunType(UShort_t type) { fRunType=type; } |
---|
110 | void SetRunInfo(UShort_t tel, UInt_t run, UInt_t file=0); |
---|
111 | void SetFileNumber(UInt_t file) { fFileNumber=file; } |
---|
112 | void SetSourceInfo(const TString src, char epoch='J', UShort_t date=2000); |
---|
113 | void SetRunTime(const MTime &start, const MTime &end); |
---|
114 | void SetRunTimeMjd(Float_t start, Float_t stop) { fRunStart.SetMjd(start); fRunStop.SetMjd(stop); } |
---|
115 | void SetObservation(const TString mode, const TString proj); |
---|
116 | void SetNumEvents(UInt_t num); |
---|
117 | void SetValidMagicNumber() { fMagicNumber=kMagicNumber; } |
---|
118 | |
---|
119 | // This is to get the numbers... |
---|
120 | UShort_t GetMagicNumber() const { return fMagicNumber; } |
---|
121 | UInt_t GetHeaderSizeEvt() const { return fHeaderSizeEvt; } |
---|
122 | UInt_t GetHeaderSizeCrate() const { return fHeaderSizeCrate; } |
---|
123 | UShort_t GetFormatVersion() const { return fFormatVersion; } |
---|
124 | UShort_t GetSoftVersion() const { return fSoftVersion; } |
---|
125 | UInt_t GetRunNumber() const { return fRunNumber; } |
---|
126 | UInt_t GetFileNumber() const { return fFileNumber; } |
---|
127 | UInt_t GetTypeID() const { return (fRunNumber/1000000)%100; } |
---|
128 | UInt_t GetFileID() const { return fRunNumber>1000000?(fRunNumber%1000000)*1000+(fFileNumber%1000):fRunNumber; } |
---|
129 | TString GetStringID() const; |
---|
130 | UShort_t GetTelescopeNumber() const { return fTelescopeNumber; } |
---|
131 | UShort_t GetRunType() const { return fRunType; } |
---|
132 | const Char_t *GetRunTypeStr() const; |
---|
133 | const Char_t GetRunTypeChar() const; |
---|
134 | const Char_t *GetProjectName() const { return fProjectName; } |
---|
135 | const Char_t *GetSourceName() const { return fSourceName; } |
---|
136 | const Char_t *GetSourceEpocheChar() const { return fSourceEpochChar; } |
---|
137 | const Char_t *GetObservationMode() const { return fObservationMode; } |
---|
138 | UShort_t GetSourceEpocheDate() const { return fSourceEpochDate; } |
---|
139 | UShort_t GetNumCrates() const { return fNumCrates; } |
---|
140 | UShort_t GetNumPixInCrate() const { return fNumPixInCrate; } |
---|
141 | UShort_t GetNumSamplesLoGain() const { return fNumSamplesLoGain; } |
---|
142 | UShort_t GetNumSamplesHiGain() const { return fNumSamplesHiGain; } |
---|
143 | UInt_t GetNumSamples() const { return fNumSamplesHiGain+fNumSamplesLoGain; } |
---|
144 | UShort_t GetNumBytesPerSample() const { return fNumBytesPerSample; } |
---|
145 | UInt_t GetNumEvents() const { return fNumEvents; } |
---|
146 | UInt_t GetNumEventsRead() const { return fNumEventsRead; } |
---|
147 | UShort_t GetFreqSampling() const { return fSamplingFrequency; } |
---|
148 | const MTime &GetRunStart() const { return fRunStart; } |
---|
149 | const MTime &GetRunEnd() const { return fRunStop; } |
---|
150 | Double_t GetRunLength() const { return !fRunStart || !fRunStop ? 0 : fRunStop-fRunStart; } |
---|
151 | Short_t GetPixAssignment(UShort_t i) const; |
---|
152 | UShort_t GetMaxPixId() const; |
---|
153 | UShort_t GetMinPixId() const; |
---|
154 | UShort_t GetNumConnectedPixels() const; |
---|
155 | UShort_t GetNumNormalPixels() const; |
---|
156 | UShort_t GetNumSpecialPixels() const; |
---|
157 | UInt_t GetScale() const { switch (fNumBytesPerSample) { case 1: return 0x1; case 2: return 0x100; case 4: return 0x1000000; } return 0; } |
---|
158 | UInt_t GetMax() const { switch (fNumBytesPerSample) { case 1: return 0xff; case 2: return 0xffff; case 4: return 0xffffffff; } return 0; } |
---|
159 | |
---|
160 | UInt_t GetNumSamplesPerCrate() const |
---|
161 | { |
---|
162 | return fNumPixInCrate*(fNumSamplesLoGain+fNumSamplesHiGain); |
---|
163 | } |
---|
164 | |
---|
165 | UShort_t GetNumPixel() const; |
---|
166 | Int_t GetNumTotalBytes() const; |
---|
167 | |
---|
168 | Bool_t IsValid() const { return fMagicNumber==0xc0c0 || fMagicNumber==0xc0c1; } |
---|
169 | Bool_t IsMonteCarloRun() const { return fRunType>0x00ff; } |
---|
170 | Bool_t IsDataRun() const { return (fRunType&0xff)==kRTData; } |
---|
171 | Bool_t IsPedestalRun() const { return (fRunType&0xff)==kRTPedestal; } |
---|
172 | Bool_t IsCalibrationRun() const { return (fRunType&0xff)==kRTCalibration; } |
---|
173 | Bool_t IsPointRun() const { return (fRunType&0xff)==kRTPointRun; } |
---|
174 | |
---|
175 | Bool_t IsValidRun() const { return fRunType!=kRTNone; } |
---|
176 | |
---|
177 | Bool_t IsConsistent(const MRawRunHeader &h) const; |
---|
178 | |
---|
179 | void Print(Option_t *t=NULL) const; |
---|
180 | |
---|
181 | Bool_t ReadEvt(istream& fin); |
---|
182 | //Bool_t WriteEvt(ostream& fout) const; |
---|
183 | |
---|
184 | ClassDef(MRawRunHeader, 10) // storage container for general info |
---|
185 | }; |
---|
186 | #endif |
---|