source: trunk/MagicSoft/Mars/mjobs/MSequence.h@ 9017

Last change on this file since 9017 was 9015, checked in by tbretz, 17 years ago
*** empty log message ***
File size: 8.5 KB
Line 
1#ifndef MARS_MSequence
2#define MARS_MSequence
3
4#ifndef ROOT_TArrayI
5#include <TArrayI.h>
6#endif
7
8#ifndef MARS_MTime
9#include "MTime.h"
10#endif
11
12class MDirIter;
13
14class MSequence : public MParContainer
15{
16 friend class MSequenceSQL;
17public:
18 enum LightCondition_t { kNA, kNoMoon, kTwilight, kMoon, kDay };
19 enum FileType_t {
20 kRawDat, kRawPed, kRawCal, kRawAll,
21 kRootDat, kRootPed, kRootCal, kRootAll,
22 kCalibrated, kImages
23 };
24
25private:
26 TString fFileName; // Expanded file name
27 TString fDataPath; // Path to data files
28
29 UShort_t fTelescope; // Telescope number
30 UInt_t fSequence; // Sequence number
31
32 MTime fStart; // Start time of sequence
33
34 UInt_t fLastRun; // Last run in sequence (necessary?)
35 UInt_t fNumEvents; // Number of events in sequence
36
37 UInt_t fPeriod; // Observation period of the sequence
38 MTime fNight; // Night (day of sunrise) of the sequence
39
40 LightCondition_t fLightCondition;
41
42 TString fProject;
43 TString fSource;
44 TString fTriggerTable;
45 TString fHvSettings;
46 TString fComment;
47
48 TArrayI fRuns; // Run numbers
49 TArrayI fRunsSub; // Sub runs (files)
50
51 TArrayI fCalRuns; // Numbers of calibration runs/files
52 TArrayI fCalRunsSub; // Sub runs (files) of calibration runs
53
54 TArrayI fPedRuns; // Numbers of pedestal runs/files
55 TArrayI fPedRunsSub; // Sub runs (files) of pedestal runs
56
57 TArrayI fDatRuns; // Numbers of data runs/files
58 TArrayI fDatRunsSub; // Sub runs (files) of data runs
59
60 TArrayI fExclRuns; // Numbers of excluded runs/files
61 TArrayI fExclRunsSub; // Sub runs (files) of excluded runs
62
63 Bool_t fMonteCarlo; // Flag for Monte Carlo sequences
64
65 // Helper for interpretation
66 void AddEntry(Int_t run, Int_t file, TArrayI &data, TArrayI &sub) const;
67 void EvalEntry(const TEnv *env, const TString &prefix, const TString &num, TArrayI &data, TArrayI &sub) const;
68
69 void Split(TString &runs, TArrayI &data, TArrayI &sub, const TEnv *env=0, const TString prefix="") const;
70 void Split(const TEnv &env, const TString &prefix, const char *name, TArrayI &data, TArrayI &sub) const;
71
72 LightCondition_t GetLightCondition(const TString &str) const;
73
74 // Helper for file setup
75 TString GetPathName(TString d, FileType_t type) const;
76 TString GetFileName(UInt_t num, const TArrayI &arr, const TArrayI &sub, FileType_t type) const;
77 UInt_t SetupRuns(MDirIter &iter, const TArrayI &arr, const TArrayI &file, FileType_t type, const char *path=0) const;
78
79 // Helper for Print()
80 TString GetNumSequence(Int_t pos, Int_t n, const TArrayI &f) const;
81 TString GetNumSequence(Int_t &pos, const TArrayI &n, const TArrayI &f) const;
82
83 void PrintRunsClassic(ostream &out, const char *pre, const char *name, const TArrayI &r) const;
84 TString PrintRuns(ostream &out, const char *pre, const char *name, const TArrayI &r, const TArrayI &f) const;
85
86 // General helper
87 Bool_t HasSubRuns() const { return fRunsSub.GetSize()!=0 || fDatRunsSub.GetSize()!=0 || fPedRunsSub.GetSize()!=0 || fCalRunsSub.GetSize()!=0 || fExclRunsSub.GetSize()!=0; }
88 Bool_t IsContained(const TArrayI &arr, const TArrayI &sub, UInt_t num, UInt_t file) const;
89
90 // Some helpers to handle the arrays
91 static Int_t SortArraySub(Int_t p, Int_t n, Int_t *arr1, Int_t *arr2);
92 static void SortArrays(TArrayI &arr1, TArrayI &arr2);
93 static Int_t GetSubArray(Int_t p, Int_t n, Int_t *arr1);
94
95public:
96 MSequence() : fTelescope(0), fSequence((UInt_t)-1), fLastRun((UInt_t)-1),
97 fNumEvents((UInt_t)-1), fPeriod((UInt_t)-1), fLightCondition(kNA), fMonteCarlo(kFALSE)
98 {
99 fName = "MSequence";
100 fTitle = "Sequence file";
101 }
102 MSequence(const char *fname, const char *path="", UInt_t id=(UInt_t)-1);
103 MSequence(const char *fname, UInt_t seq, UShort_t tel=0);
104 MSequence(const MSequence &s) : MParContainer(s),
105 fFileName(s.fFileName), fDataPath(s.fDataPath),
106 fTelescope(s.fTelescope),
107 fSequence(s.fSequence), fStart(s.fStart),
108 fLastRun(s.fLastRun), fNumEvents(s.fNumEvents), fPeriod(s.fPeriod),
109 fNight(s.fNight), fLightCondition(s.fLightCondition),
110 fProject(s.fProject), fSource(s.fSource),
111 fTriggerTable(s.fTriggerTable), fHvSettings(s.fHvSettings),
112 fRuns(s.fRuns), fRunsSub(s.fRunsSub), fCalRuns(s.fCalRuns),
113 fCalRunsSub(s.fCalRunsSub), fPedRuns(s.fPedRuns),
114 fPedRunsSub(s.fPedRunsSub), fDatRuns(s.fDatRuns),
115 fDatRunsSub(s.fDatRunsSub), fExclRuns(s.fExclRuns),
116 fExclRunsSub(s.fExclRunsSub), fMonteCarlo(s.fMonteCarlo) { }
117
118 Bool_t IsCompatible(const MSequence &s) const;
119 Bool_t IsIdentical(const MSequence &s) const;
120 Bool_t operator==(const MSequence &s) const;
121
122 // I/O
123 Bool_t WriteFile(const char *filename, const Option_t *o) const;
124 Bool_t WriteFile(const char *filename) const { return WriteFile(filename,""); } //*MENU *ARGS={filename=>fBaseName}
125
126 // TObject
127 void Print(ostream &out, Option_t *o) const;
128 void Print(Option_t *o) const;
129 void Print() const { Print(""); } //*MENU*
130
131 // Genaral interface
132 Bool_t IsValid() const { return fTelescope>0 && fSequence!=(UInt_t)-1; }
133 Bool_t IsMonteCarlo() const { return fMonteCarlo; }
134 Bool_t IsExcluded(UInt_t run, UInt_t file) const { return IsContained(fExclRuns, fExclRunsSub, run, file); }
135 Bool_t IsContained(UInt_t run, UInt_t file) const { return IsContained(fCalRuns, fCalRunsSub, run, file) || IsContained(fPedRuns, fPedRunsSub, run, file) || IsContained(fDatRuns, fDatRunsSub, run, file); }
136
137 // Setter
138 void SetNight(const char*night);
139
140 void AddRun(UInt_t run, char type='*') { AddFile(run, 0, type); }
141 void AddRuns(UInt_t run1, UInt_t run2, char type='*') { for (UInt_t i=run1; i<=run2; i++) AddFile(i, 0, type); }
142 void AddFile(UInt_t run, UInt_t file, char type='*');
143 void AddFiles(UInt_t run, UInt_t f1, UInt_t f2, char type='*') { for (UInt_t i=f1; i<=f2; i++) AddFile(run, i, type); }
144
145 void ExcludeFile(UInt_t run, UInt_t file=0) { /*if (!force || !IsExcluded(run, file))*/ AddFile(run, file, 'X'); }
146 void ExcludeRuns(TString runs);
147
148 void SetMonteCarlo(Bool_t ismc=kTRUE) { fMonteCarlo=ismc; }
149
150 // Getter
151 UInt_t GetNumExclRuns() const { return fExclRuns.GetSize(); }
152
153 UShort_t GetTelescope() const { return fTelescope; }
154 UInt_t GetSequence() const { return fSequence; }
155 UInt_t GetLastRun() const { return fLastRun; }
156 UInt_t GetPeriod() const { return fPeriod; }
157 Bool_t HasMoon() const { return fLightCondition==kMoon; }
158
159 LightCondition_t GetLightCondition() const { return fLightCondition; }
160
161 const MTime &GetStart() const { return fStart; }
162 const MTime &GetNight() const { return fNight; }
163 const TString &GetSource() const { return fSource; }
164
165 const TString GetExcludedRuns() const;
166
167 // Filesystem interface
168 UInt_t SetupPedRuns(MDirIter &iter, const char *path=0, Bool_t raw=kFALSE) const;
169 UInt_t SetupDatRuns(MDirIter &iter, const char *path=0, Bool_t raw=kFALSE) const;
170 UInt_t SetupAllRuns(MDirIter &iter, const char *path=0, Bool_t raw=kFALSE) const;
171 UInt_t SetupCalRuns(MDirIter &iter, const char *path=0, Bool_t raw=kFALSE) const;
172 UInt_t SetupDatRuns(MDirIter &iter, FileType_t type, const char *path=0) const;
173
174 // Filesystem getter
175 const char *GetBaseName() const;
176 const char *GetFilePath() const;
177 const TString &GetFileName() const { return fFileName; }
178 const TString &GetDataPath() const { return fDataPath; }
179
180 const TString GetStandardPath() const { return GetStandardPath(fMonteCarlo); }
181
182 // Static function for external access
183 static TString GetStandardPath(Bool_t mc) { return mc?"/magic/montecarlo/":"/magic/data/"; }
184 static Bool_t InflateSeq(TString &seq, /*FIXME: TELNUM*/ Bool_t ismc=kFALSE);
185
186 static TString InflateRunName(const MTime &night, UShort_t tel, Int_t run, Int_t file, Int_t type=kRawAll);
187 static TString InflateRunName(const MTime &night, Int_t run, Int_t type=kRawAll) { return InflateRunName(night, 1, run, 0, type); }
188
189 static TString InflateRunPath(const MTime &night, UShort_t tel, Int_t run, Int_t file=0, Int_t type=kRawAll);
190 static TString InflateRunPath(const MTime &night, Int_t run, Int_t type=kRawAll) { return InflateRunPath(night, 1, run, 0, type); }
191
192 static TString InflateRunPath(const MTime &night, Bool_t mc=kFALSE);
193
194 ClassDef(MSequence, 6) // Describes a sequences, reads and writes sequence files
195};
196
197#endif
Note: See TracBrowser for help on using the repository browser.