]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RAW/AliRawEvent.h
neatening
[u/mrichter/AliRoot.git] / RAW / AliRawEvent.h
CommitLineData
c689d2f6 1#ifndef ALIRAWEVENT_H
2#define ALIRAWEVENT_H
5ea08be4 3// @(#)alimdc:$Name$:$Id$
4// Author: Fons Rademakers 26/11/99
5// Updated: Dario Favretto 15/04/2003
6
5ea08be4 7
8#ifndef ROOT_TObject
9#include <TObject.h>
10#endif
11
5ea08be4 12#ifndef ROOT_TDatime
13#include <TDatime.h>
14#endif
15
16#ifndef ROOT_TString
17#include <TString.h>
18#endif
19
20#ifndef ROOT_TFile
21#include <TFile.h>
22#endif
23
24#ifndef ROOT_TTree
25#include <TTree.h>
26#endif
27
04fa961a 28#ifndef ROOT_TH1
29#include <TH1.h>
30#endif
31
5ea08be4 32
33// Forward class declarations
5ea08be4 34class AliRawDB;
35
36
37// The following enumeration can be used once the kEventTypeMask has been
38// applied to the raw event type
39enum EAliRawEventType {
40 kStartOfRun = 1, // START_OF_RUN
41 kEndOfRun = 2, // END_OF_RUN
42 kStartOfRunFiles = 3, // START_OF_RUN_FILES
43 kEndOfRunFiles = 4, // END_OF_RUN_FILES
44 kStartOfBurst = 5, // START_OF_BURST
45 kEndOfBurst = 6, // END_OF_BURST
46 kPhysicsEvent = 7, // PHYSICS_EVENT
47 kCalibrationEvent = 8, // CALIBRATION_EVENT
48 kFormatError = 9 // EVENT_FORMAT_ERROR
49};
50
51const Int_t kEventTypeMin = kStartOfRun;
52const Int_t kEventTypeMax = kFormatError;
53
54const UInt_t kEventMagicNumber = 0xDA1E5AFE;
55const UInt_t kEventMagicNumberSwapped = 0xFE5A1EDA;
56
57// Type sizes
58const Int_t kIdWords = 2;
59const Int_t kTriggerWords = 2;
60const Int_t kDetectorWords = 1;
61const Int_t kAttributeWords = 3;
62
63
64class AliRawEventHeader : public TObject {
65
5ea08be4 66public:
67 AliRawEventHeader() { fSize = 0; }
68 virtual ~AliRawEventHeader() { }
69
70 void *HeaderBegin() { return (void *) &fSize; }
71 Int_t HeaderSize() const { return (Long_t) &fGDCId - (Long_t) &fSize + sizeof(fGDCId); }
72 Bool_t DataIsSwapped() const;
73 Bool_t IsSwapped() const { return (fMagic == kEventMagicNumberSwapped) ? kTRUE : kFALSE; }
74 Bool_t IsValid() const { return IsSwapped() ? kTRUE : ((fMagic == kEventMagicNumber) ? kTRUE : kFALSE); }
75 void Swap();
76
77 UInt_t GetEventSize() const { return fSize; }
78 UInt_t GetMagic() const { return fMagic; }
79 UInt_t GetHeaderLength() const { return fHeadLen; }
80 UInt_t GetVersion() const { return fVersion; }
81 UInt_t GetType() const { return fType; }
82 const char *GetTypeName() const;
83 UInt_t GetRunNumber() const { return fRunNb; }
84 UInt_t GetEventInRun() const;
85 const UInt_t *GetId() const { return fId; }
86 const UInt_t *GetTriggerPattern() const { return fTriggerPattern; }
87 const UInt_t *GetDetectorPattern() const { return fDetectorPattern; }
88 const UInt_t *GetTypeAttribute() const { return fTypeAttribute; }
89 UInt_t GetLDCId() const { return fLDCId; }
90 UInt_t GetGDCId() const { return fGDCId; }
91
c689d2f6 92private:
93 UInt_t fSize; // size of event in bytes
94 UInt_t fMagic; // magic number used for consistency check
95 UInt_t fHeadLen; // size of header in bytes
96 UInt_t fVersion; // unique version identifier
97 UInt_t fType; // event type
98 UInt_t fRunNb; // run number
99 UInt_t fId[kIdWords]; // id field
100 UInt_t fTriggerPattern[kTriggerWords]; // trigger pattern
101 UInt_t fDetectorPattern[kDetectorWords]; // detector pattern
102 UInt_t fTypeAttribute[kAttributeWords]; // system (0,1) and user (2) attributes
103 UInt_t fLDCId; // LDC id
104 UInt_t fGDCId; // GDC id
105
5ea08be4 106 ClassDef(AliRawEventHeader,1) // Alice raw event header
107};
108
109
110class AliRawEquipmentHeader : public TObject {
111
5ea08be4 112public:
113 AliRawEquipmentHeader() { fSize = 0; }
114 ~AliRawEquipmentHeader() { }
115
116 void *HeaderBegin() { return (void *) &fSize; }
117 Int_t HeaderSize() const { return (Long_t) &fBasicElementSizeType - (Long_t) &fSize + sizeof(fBasicElementSizeType); }
118 void Swap();
119
120 UInt_t GetEquipmentSize() const { return fSize; }
121 UInt_t GetEquipmentType() const { return fEquipmentType; }
122 UInt_t GetId() const { return fEquipmentID; }
123 const UInt_t *GetTypeAttribute() const { return fTypeAttribute; }
124 UInt_t GetBasicSizeType() const { return fBasicElementSizeType; }
125
c689d2f6 126private:
127 UInt_t fSize; // number of raw data bytes
128 UInt_t fEquipmentType; // equipment type
129 UInt_t fEquipmentID; // equipment ID
130 UInt_t fTypeAttribute[kAttributeWords]; // system (0,1) and user (2) attributes
131 UInt_t fBasicElementSizeType; // basic element size type
132
5ea08be4 133 ClassDef(AliRawEquipmentHeader,1) //Alice equipment header
134};
135
136
137class AliRawData : public TObject {
138
5ea08be4 139public:
8f66d77e 140 AliRawData() { fSize = fBufSize = 0; fRawData = 0; fOwner = kTRUE; }
c689d2f6 141 AliRawData(const AliRawData& rawData): TObject(rawData)
142 {Fatal("AliRawData", "copy constructor not implemented");};
143 AliRawData& operator = (const AliRawData& /*rawData*/) {
144 Fatal("operator =", "assignment operator not implemented");
145 return *this;
146 };
5ea08be4 147 virtual ~AliRawData() { if (fOwner) delete [] fRawData; }
148
c689d2f6 149 inline void SetSize(Int_t size);
150 inline void SetBuffer(void *buf, Int_t size);
5ea08be4 151 Int_t GetSize() const { return fSize; }
152 void *GetBuffer() { return fRawData; }
153
c689d2f6 154private:
155 Int_t fSize; // number of raw data bytes
156 Int_t fBufSize; //!actual size of fRawData
157 char *fRawData; //[fSize] raw event data
158 Bool_t fOwner; //!if true object owns fRawData buffer
159
5ea08be4 160 ClassDef(AliRawData,1) // Alice raw event buffer
161};
162
c689d2f6 163void AliRawData::SetSize(Int_t size)
164{
165 if (size > fBufSize) {
166 if (fOwner) delete [] fRawData;
167 fRawData = new char [size];
168 fBufSize = size;
169 fOwner = kTRUE;
170 }
171 fSize = size;
172}
173
174void AliRawData::SetBuffer(void *buf, Int_t size)
175{
176 if (fOwner) delete [] fRawData;
177 fRawData = (char *) buf;
178 fBufSize = size;
179 fSize = size;
180 fOwner = kFALSE;
181}
5ea08be4 182
5ea08be4 183
c689d2f6 184class AliRawEvent : public TObject {
5ea08be4 185
186public:
187 AliRawEvent();
c689d2f6 188 AliRawEvent(const AliRawEvent& rawEvent): TObject(rawEvent)
189 {Fatal("AliRawEvent", "copy constructor not implemented");};
190 AliRawEvent& operator = (const AliRawEvent& /*rawEvent*/) {
191 Fatal("operator =", "assignment operator not implemented");
192 return *this;
193 };
5ea08be4 194 virtual ~AliRawEvent();
195
c51de60d 196 AliRawEventHeader *GetHeader();
5ea08be4 197 AliRawEquipmentHeader *GetEquipmentHeader();
198 AliRawData *GetRawData();
199 Int_t GetNSubEvents() const { return fNSubEvents; }
200 AliRawEvent *NextSubEvent();
5459c838 201 AliRawEvent *GetSubEvent(Int_t index) const;
5ea08be4 202 void Reset();
203
c689d2f6 204private:
205 Int_t fNSubEvents; // number of valid sub-events
206 AliRawEventHeader *fEvtHdr; // event header object
207 AliRawEquipmentHeader *fEqpHdr; // equipment header
208 AliRawData *fRawData; // raw data container
209 TObjArray *fSubEvents; // sub AliRawEvent's
210
5ea08be4 211 ClassDef(AliRawEvent,1) // ALICE raw event object
212};
213
214
215class AliStats : public TObject {
216
5ea08be4 217public:
218 AliStats(const char *filename = "", Int_t compmode = 0, Bool_t filter = kFALSE);
c689d2f6 219 AliStats(const AliStats& stats): TObject(stats)
220 {Fatal("AliStats", "copy constructor not implemented");};
5ea08be4 221 virtual ~AliStats();
222 AliStats &operator=(const AliStats &rhs);
223
224 void SetEvents(Int_t events) { fEvents = events; }
225 void SetFirstId(Int_t run, Int_t event) { fFirstRun = run; fFirstEvent = event; }
226 void SetLastId(Int_t run, Int_t event) { fLastRun = run; fLastEvent = event; }
227 void SetBeginTime() { fBegin.Set(); }
228 void SetEndTime() { fEnd.Set(); }
229 void SetFileSize(Double_t size) { fFileSize = size; }
230 void SetCompressionFactor(Float_t comp) { fCompFactor = comp; }
231 void Fill(Float_t time);
232 void WriteToDB(AliRawDB *rawdb);
233
234 Int_t GetEvents() const { return fEvents; }
235 Int_t GetFirstRun() const { return fFirstRun; }
236 Int_t GetFirstEvent() const { return fFirstEvent; }
237 Int_t GetLastRun() const { return fLastRun; }
238 Int_t GetLastEvent() const { return fLastEvent; }
239 TDatime &GetBeginTime() { return fBegin; }
240 TDatime &GetEndTime() { return fEnd; }
241 Double_t GetFileSize() const { return fFileSize; }
242 Int_t GetCompressionMode() const { return fCompMode; }
243 Float_t GetCompressionFactor() const { return fCompFactor; }
244 Bool_t GetFilterState() const { return fFilter; }
245 const char *GetFileName() const { return fFileName; }
246 TH1F *GetRTHist() const { return fRTHist; }
247
c689d2f6 248private:
249 Int_t fEvents; // number of events in this file
250 Int_t fFirstRun; // run number of first event in file
251 Int_t fFirstEvent; // event number of first event in file
252 Int_t fLastRun; // run number of last event in file
253 Int_t fLastEvent; // event number of last event in file
254 TDatime fBegin; // begin of filling time
255 TDatime fEnd; // end of filling time
256 TString fFileName; // name of file containing this data
257 Double_t fFileSize; // size of file
258 Float_t fCompFactor; // tree compression factor
259 Int_t fCompMode; // compression mode
260 Bool_t fFilter; // 3rd level filter on/off
261 TH1F *fRTHist; // histogram of real-time to process chunck of data
262 Float_t fChunk; //!chunk to be histogrammed
263
5ea08be4 264 ClassDef(AliStats,1) // Statistics object
265};
266
267
268class AliRawDB : public TObject {
269
5ea08be4 270public:
271 AliRawDB(AliRawEvent *event, Double_t maxsize, Int_t compress,
272 Bool_t create = kTRUE);
c689d2f6 273 AliRawDB(const AliRawDB& rawDB): TObject(rawDB)
274 {Fatal("AliRawDB", "copy constructor not implemented");};
275 AliRawDB& operator = (const AliRawDB& /*rawDB*/) {
276 Fatal("operator =", "assignment operator not implemented");
277 return *this;
278 };
279 virtual ~AliRawDB() { Close(); }
5ea08be4 280
06c6fef1 281 virtual const char *GetOpenOption() const { return "RECREATE"; }
282 virtual Bool_t Create();
283 virtual void Close();
284 void Fill() { fTree->Fill(); }
285 Bool_t FileFull() { return (fRawDB->GetBytesWritten() > fMaxSize) ?
286 kTRUE : kFALSE; }
5ea08be4 287
06c6fef1 288 Bool_t NextFile();
5ea08be4 289
290 Double_t GetBytesWritten() const { return fRawDB->GetBytesWritten(); }
291 TFile *GetDB() const { return fRawDB; }
292 const char *GetDBName() const { return fRawDB->GetName(); }
293 Int_t GetEvents() const { return (Int_t) fTree->GetEntries(); }
294 AliRawEvent *GetEvent() const { return fEvent; }
295 Float_t GetCompressionFactor() const;
296 Int_t GetCompressionMode() const { return fRawDB->GetCompressionLevel(); }
297
c689d2f6 298protected:
299 TFile *fRawDB; // DB to store raw data
300 TTree *fTree; // tree used to store raw data
301 AliRawEvent *fEvent; // AliRawEvent via which data is stored
302 Int_t fCompress; // compression mode (1 default)
303 Double_t fMaxSize; // maximum size in bytes of the raw DB
304
305 virtual const char *GetFileName() const;
306 virtual Bool_t FSHasSpace(const char *fs) const;
307 virtual void MakeTree();
308
5ea08be4 309 ClassDef(AliRawDB,0) // Raw DB
310};
311
312
313class AliRawRFIODB : public AliRawDB {
314
5ea08be4 315public:
316 AliRawRFIODB(AliRawEvent *event, Double_t maxsize, Int_t compress);
317 ~AliRawRFIODB() { Close(); }
318
319 void Close();
320
c689d2f6 321private:
322 const char *GetFileName() const;
323
5ea08be4 324 ClassDef(AliRawRFIODB,0) // Raw DB via RFIO
325};
326
327
9174317d 328class AliRawCastorDB : public AliRawDB {
329
9174317d 330public:
331 AliRawCastorDB(AliRawEvent *event, Double_t maxsize, Int_t compress);
332 ~AliRawCastorDB() { Close(); }
333
06c6fef1 334 const char *GetOpenOption() const { return "-RECREATE"; }
335 void Close();
9174317d 336
c689d2f6 337private:
338 const char *GetFileName() const;
339
9174317d 340 ClassDef(AliRawCastorDB,0) // Raw DB via CASTOR and rootd
341};
342
343
5ea08be4 344class AliRawRootdDB : public AliRawDB {
345
5ea08be4 346public:
347 AliRawRootdDB(AliRawEvent *event, Double_t maxsize, Int_t compress);
348 ~AliRawRootdDB() { Close(); }
349
350 void Close();
351
c689d2f6 352private:
353 const char *GetFileName() const;
354
5ea08be4 355 ClassDef(AliRawRootdDB,0) // Raw DB via rootd
356};
357
358
359class AliRawNullDB : public AliRawDB {
360
5ea08be4 361public:
362 AliRawNullDB(AliRawEvent *event, Double_t maxsize, Int_t compress);
363 ~AliRawNullDB() { Close(); }
364
365 void Close();
366
c689d2f6 367private:
368 const char *GetFileName() const;
369
5ea08be4 370 ClassDef(AliRawNullDB,0) // Raw DB to /dev/null
371};
372
373
374class AliTagDB : public TObject {
375
5ea08be4 376public:
377 AliTagDB(AliRawEventHeader *header, Double_t maxsize, Bool_t create = kTRUE);
c689d2f6 378 AliTagDB(const AliTagDB& tagDB): TObject(tagDB)
379 {Fatal("AliTagDB", "copy constructor not implemented");};
380 AliTagDB& operator = (const AliTagDB& /*tagDB*/) {
381 Fatal("operator =", "assignment operator not implemented");
382 return *this;
383 };
384 virtual ~AliTagDB() { Close(); }
5ea08be4 385
386 Bool_t Create();
387 virtual void Close();
388 void Fill() { fTree->Fill(); }
389 Bool_t FileFull()
390 { return (fTagDB->GetBytesWritten() > fMaxSize) ? kTRUE : kFALSE; }
391
392 Bool_t NextFile();
393
394 Double_t GetBytesWritten() const { return fTagDB->GetBytesWritten(); }
395 TFile *GetDB() const { return fTagDB; }
396 const char *GetDBName() const { return fTagDB->GetName(); }
397 AliRawEventHeader *GetHeader() const { return fHeader; }
398 Int_t GetEvents() const { return (Int_t) fTree->GetEntries(); }
399 Float_t GetCompressionFactor() const;
400
c689d2f6 401protected:
402 TFile *fTagDB; // DB to store header information only (tag)
403 TTree *fTree; // tree use to store header
404 AliRawEventHeader *fHeader; // header via which data is stored
405 Double_t fMaxSize; // maximum size in bytes of tag DB
406
407 virtual const char *GetFileName() const;
408
5ea08be4 409 ClassDef(AliTagDB,0) // Tag DB
410};
411
412
413class AliTagNullDB : public AliTagDB {
414
5ea08be4 415public:
416 AliTagNullDB(AliRawEventHeader *header, Double_t maxsize);
417 ~AliTagNullDB() { Close(); }
418
419 void Close();
420
c689d2f6 421private:
422 const char *GetFileName() const;
423
5ea08be4 424 ClassDef(AliTagNullDB,0) // Tag DB to /dev/null
425};
426
427
428class AliRunDB : public TObject {
429
5ea08be4 430public:
8ee17d63 431 AliRunDB(Bool_t noLocalDB = kFALSE);
c689d2f6 432 AliRunDB(const AliRunDB& runDB): TObject(runDB)
433 {Fatal("AliRunDB", "copy constructor not implemented");};
434 AliRunDB& operator = (const AliRunDB& /*runDB*/) {
435 Fatal("operator =", "assignment operator not implemented");
436 return *this;
437 };
5ea08be4 438 ~AliRunDB() { Close(); }
439
440 void Update(AliStats *stats);
441 void UpdateRDBMS(AliStats *stats);
9174317d 442 void UpdateAliEn(AliStats *stats);
5ea08be4 443 void Close();
444
c689d2f6 445private:
446 TFile *fRunDB; // run database
447
5ea08be4 448 ClassDef(AliRunDB,0) // Run (bookkeeping) DB
449};
450
451
452class AliMDC : public TObject {
453
9174317d 454public:
455 enum EWriteMode { kLOCAL, kRFIO, kROOTD, kCASTOR, kDEVNULL };
456
c689d2f6 457 AliMDC(Int_t fd, Int_t compress, Double_t maxFileSize, Bool_t useFilter,
458 EWriteMode mode, Bool_t useLoop, Bool_t delFiles);
459 ~AliMDC() { }
460
461 Int_t Run();
462 void SetStopLoop() { fStopLoop = kTRUE; }
463 Bool_t StopLoop() const { return fStopLoop; }
464
465 void SetDebugLevel(Int_t level) { fDebugLevel = level; }
466 Int_t GetDebugLevel() const { return fDebugLevel; }
467
468 static Bool_t DeleteFiles() { return fgDeleteFiles; }
469
5ea08be4 470private:
9174317d 471 Int_t fFd; // DATE input stream
472 Int_t fCompress; // compression factor used for raw output DB
473 Int_t fNumEvents; // number of events processed
474 Int_t fDebugLevel; // controls debug print-out
475 Double_t fMaxFileSize; // maximum size of raw output DB
476 EWriteMode fWriteMode; // write mode (local, rfio, rootd, castor, /dev/null)
477 Bool_t fUseFifo; // read from fifo, file otherwise
478 Bool_t fUseEb; // use event builder API instead of fifo
479 Bool_t fUseFilter; // use 3rd level trigger filter
480 Bool_t fUseLoop; // loop on input source (must be file)
481 Bool_t fStopLoop; // break from endless loop (triggered by SIGUSR1)
5ea08be4 482
c689d2f6 483 static Bool_t fgDeleteFiles; // flag for deletion of files
5ea08be4 484
485 Int_t Read(const char *name) { return TObject::Read(name); }
486 Int_t Read(void *buffer, Int_t length);
487 Int_t ReadHeader(AliRawEventHeader &header, void *eb = 0);
488 Int_t ReadEquipmentHeader(AliRawEquipmentHeader &header,
489 Bool_t isSwapped, void *eb = 0);
490 Int_t ReadRawData(AliRawData &raw, Int_t size, void *eb = 0);
491 Int_t DumpEvent(Int_t toRead);
492 Int_t Filter(AliRawData &raw);
493
5ea08be4 494 ClassDef(AliMDC,0) // MDC processor
495};
496
497R__EXTERN AliMDC *gAliMDC;
498
499#define ALIDEBUG(level) \
86f15b50 500 if (gAliMDC && (gAliMDC->GetDebugLevel() >= (level)))
5ea08be4 501
502#endif