source: trunk/MagicSoft/Mars/mraw/MRawRunHeader.h @ 9542

Last change on this file since 9542 was 9542, checked in by snruegam, 11 years ago
*** empty log message ***
File size: 8.2 KB
Line 
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
13class TBuffer;
14class MArrayS;
15
16class MRawRunHeader : public MParContainer
17{
18public:
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
40private:
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
85public:
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 SetSourceInfo(const TString src, char epoch='J', UShort_t date=2000);
112    void SetRunTime(const MTime &start, const MTime &end);
113    void SetRunTimeMjd(Float_t start, Float_t stop) { fRunStart.SetMjd(start); fRunStop.SetMjd(stop); }
114    void SetObservation(const TString mode, const TString proj);
115    void SetNumEvents(UInt_t num);
116    void SetValidMagicNumber() { fMagicNumber=kMagicNumber; }
117
118    // This is to get the numbers...
119    UShort_t GetMagicNumber() const       { return fMagicNumber; }
120    UInt_t   GetHeaderSizeEvt() const     { return fHeaderSizeEvt; }
121    UInt_t   GetHeaderSizeCrate() const   { return fHeaderSizeCrate; }
122    UShort_t GetFormatVersion() const     { return fFormatVersion; }
123    UShort_t GetSoftVersion() const       { return fSoftVersion; }
124    UInt_t   GetRunNumber() const         { return fRunNumber; }
125    UInt_t   GetFileNumber() const        { return fFileNumber; }
126    UInt_t   GetTypeID() const            { return (fRunNumber/1000000)%100; }
127    UInt_t   GetFileID() const            { return fRunNumber>1000000?(fRunNumber%1000000)*1000+(fFileNumber%1000):fRunNumber; }
128    TString  GetStringID() const;
129    UShort_t GetTelescopeNumber() const   { return fTelescopeNumber; }
130    UShort_t GetRunType() const           { return fRunType; }
131    const Char_t *GetRunTypeStr() const;
132    const Char_t  GetRunTypeChar() const;
133    const Char_t *GetProjectName() const  { return fProjectName; }
134    const Char_t *GetSourceName() const   { return fSourceName; }
135    const Char_t *GetSourceEpocheChar() const { return fSourceEpochChar; }
136    const Char_t *GetObservationMode() const  { return fObservationMode; }
137    UShort_t GetSourceEpocheDate() const  { return fSourceEpochDate; }
138    UShort_t GetNumCrates() const         { return fNumCrates; }
139    UShort_t GetNumPixInCrate() const     { return fNumPixInCrate; }
140    UShort_t GetNumSamplesLoGain() const  { return fNumSamplesLoGain; }
141    UShort_t GetNumSamplesHiGain() const  { return fNumSamplesHiGain; }
142    UInt_t   GetNumSamples() const        { return fNumSamplesHiGain+fNumSamplesLoGain; }
143    UShort_t GetNumBytesPerSample() const { return fNumBytesPerSample; }
144    UInt_t   GetNumEvents() const         { return fNumEvents; }
145    UInt_t   GetNumEventsRead() const     { return fNumEventsRead; }
146    UShort_t GetFreqSampling() const      { return fSamplingFrequency; }
147    const MTime &GetRunStart() const      { return fRunStart; }
148    const MTime &GetRunEnd() const        { return fRunStop; }
149    Double_t GetRunLength() const         { return !fRunStart || !fRunStop ? 0 : fRunStop-fRunStart; }
150    Short_t GetPixAssignment(UShort_t i) const;
151    UShort_t GetMaxPixId() const;
152    UShort_t GetMinPixId() const;
153    UShort_t GetNumConnectedPixels() const;
154    UShort_t GetNumNormalPixels() const;
155    UShort_t GetNumSpecialPixels() const;
156    UInt_t   GetScale() const { switch (fNumBytesPerSample) { case 1: return 0x1; case 2: return 0x100; case 4: return 0x1000000; } return 0; }
157    UInt_t   GetMax() const { switch (fNumBytesPerSample) { case 1: return 0xff; case 2: return 0xffff; case 4: return 0xffffffff; } return 0; }
158
159    UInt_t GetNumSamplesPerCrate() const
160    {
161        return fNumPixInCrate*(fNumSamplesLoGain+fNumSamplesHiGain);
162    }
163
164    UShort_t GetNumPixel() const;
165    Int_t GetNumTotalBytes() const;
166
167    Bool_t IsValid() const { return fMagicNumber==0xc0c0 || fMagicNumber==0xc0c1; }
168    Bool_t IsMonteCarloRun() const { return fRunType>0x00ff; }
169    Bool_t IsDataRun() const        { return (fRunType&0xff)==kRTData; }
170    Bool_t IsPedestalRun() const    { return (fRunType&0xff)==kRTPedestal; }
171    Bool_t IsCalibrationRun() const { return (fRunType&0xff)==kRTCalibration; }
172    Bool_t IsPointRun() const       { return (fRunType&0xff)==kRTPointRun; }
173
174    Bool_t IsValidRun() const { return fRunType!=kRTNone; }
175
176    Bool_t IsConsistent(const MRawRunHeader &h) const;
177
178    void Print(Option_t *t=NULL) const;
179
180    Bool_t ReadEvt(istream& fin);
181    //Bool_t WriteEvt(ostream& fout) const;
182
183    ClassDef(MRawRunHeader, 10) // storage container for general info
184};
185#endif
Note: See TracBrowser for help on using the repository browser.