X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=RAW%2FAliRawReader.h;h=40051b95ea5a6a918120afb7339448c5cc3f96a8;hp=564524cdaca8e165400dc971bb113c3726723e15;hb=e94ad92c90b8d94fc386e85f7ba4d5bc6abd752d;hpb=04fa961a68e4ca38be22e31a659eabd80ad1ffcf diff --git a/RAW/AliRawReader.h b/RAW/AliRawReader.h index 564524cdaca..40051b95ea5 100644 --- a/RAW/AliRawReader.h +++ b/RAW/AliRawReader.h @@ -3,40 +3,80 @@ /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ -#include +/* $Id$ */ +/////////////////////////////////////////////////////////////////////////////// +/// +/// This is the base class for reading raw data. +/// +/////////////////////////////////////////////////////////////////////////////// + +#include +#include "AliRawDataHeader.h" -struct AliMiniHeader { - UInt_t fSize; - UChar_t fDetectorID; - UChar_t fMagicWord[3]; - UChar_t fVersion; - UChar_t fCompressionFlag; - UShort_t fDDLID; -}; class AliRawReader: public TObject { public : AliRawReader(); + AliRawReader(const AliRawReader& rawReader); + AliRawReader& operator = (const AliRawReader& rawReader); + virtual ~AliRawReader() {}; void Select(Int_t detectorID, Int_t minDDLID = -1, Int_t maxDDLID = -1); + void SelectEquipment(Int_t equipmentType, + Int_t minEquipmentId = -1, + Int_t maxEquipmentId = -1); + void SkipInvalid(Bool_t skip = kTRUE) + {fSkipInvalid = skip;}; + void SelectEvents(Int_t type); + + virtual UInt_t GetType() const = 0; + virtual UInt_t GetRunNumber() const = 0; + virtual const UInt_t* GetEventId() const = 0; + virtual const UInt_t* GetTriggerPattern() const = 0; + virtual const UInt_t* GetDetectorPattern() const = 0; + virtual const UInt_t* GetAttributes() const = 0; + virtual const UInt_t* GetSubEventAttributes() const = 0; + virtual UInt_t GetLDCId() const = 0; + virtual UInt_t GetGDCId() const = 0; + + virtual Int_t GetEquipmentSize() const = 0; + virtual Int_t GetEquipmentType() const = 0; + virtual Int_t GetEquipmentId() const = 0; + virtual const UInt_t* GetEquipmentAttributes() const = 0; + virtual Int_t GetEquipmentElementSize() const = 0; + + Int_t GetDetectorID() const + {if (GetEquipmentId() >= 0) return (GetEquipmentId() >> 8); else return -1;}; + Int_t GetDDLID() const + {if (GetEquipmentId() >= 0) return (GetEquipmentId() & 0xFF); else return -1;}; - virtual UInt_t GetType() = 0; - virtual UInt_t GetRunNumber() = 0; - virtual const UInt_t* GetEventId() = 0; - virtual const UInt_t* GetTriggerPattern() = 0; - virtual const UInt_t* GetDetectorPattern() = 0; - virtual const UInt_t* GetAttributes() = 0; - virtual UInt_t GetGDCId() = 0; - - inline Int_t GetDataSize() const {return fMiniHeader->fSize;}; - inline Int_t GetDetectorID() const {return fMiniHeader->fDetectorID;}; - inline Int_t GetDDLID() const {return fMiniHeader->fDDLID;}; - inline Int_t GetVersion() const {return fMiniHeader->fVersion;}; - inline Bool_t IsCompressed() const {return fMiniHeader->fCompressionFlag != 0;}; - - virtual Bool_t ReadMiniHeader() = 0; + Int_t GetDataSize() const + {if (fHeader) return fHeader->fSize - sizeof(AliRawDataHeader); + else return GetEquipmentSize();}; + + Int_t GetVersion() const + {if (fHeader) return fHeader->fVersion; else return -1;}; + Bool_t IsValid() const + {if (fHeader) return fHeader->TestAttribute(0); + else return kFALSE;}; + Bool_t IsCompressed() const + {if (fHeader) return fHeader->TestAttribute(1); + else return kFALSE;}; + Bool_t TestBlockAttribute(Int_t index) const + {if (fHeader) return fHeader->TestAttribute(index); + else return kFALSE;}; + UChar_t GetBlockAttributes() const + {if (fHeader) return fHeader->GetAttributes(); + else return 0;}; + UInt_t GetStatusBits() const + {if (fHeader) return fHeader->GetStatus(); + else return 0;}; + const AliRawDataHeader* GetDataHeader() const + {return fHeader;} + + virtual Bool_t ReadHeader() = 0; virtual Bool_t ReadNextData(UChar_t*& data) = 0; virtual Bool_t ReadNextInt(UInt_t& data); virtual Bool_t ReadNextShort(UShort_t& data); @@ -44,18 +84,32 @@ class AliRawReader: public TObject { virtual Bool_t Reset() = 0; + virtual Bool_t NextEvent() = 0; + virtual Bool_t RewindEvents() = 0; + + enum {kErrMagic=1, kErrNoDataHeader=2, + kErrSize=4, kErrOutOfBounds=8}; + virtual Int_t CheckData() const; + Int_t GetErrorCode() const {return fErrorCode;}; + + void DumpData(Int_t limit = -1); + protected : - Bool_t IsSelected(); + Bool_t IsSelected() const; + Bool_t IsEventSelected() const; - Bool_t CheckMiniHeader(); virtual Bool_t ReadNext(UChar_t* data, Int_t size) = 0; - AliMiniHeader* fMiniHeader; // current mini header + AliRawDataHeader* fHeader; // current data header Int_t fCount; // counter of bytes to be read for current DDL - Int_t fSelectDetectorID; // id of selected detector (<0 = no selection) - Int_t fSelectMinDDLID; // minimal index of selected DDLs (<0 = no selection) - Int_t fSelectMaxDDLID; // maximal index of selected DDLs (<0 = no selection) + Int_t fSelectEquipmentType; // type of selected equipment (<0 = no selection) + Int_t fSelectMinEquipmentId; // minimal index of selected equipment (<0 = no selection) + Int_t fSelectMaxEquipmentId; // maximal index of selected equipment (<0 = no selection) + Bool_t fSkipInvalid; // skip invalid data + Int_t fSelectEventType; // type of selected events (<0 = no selection) + + Int_t fErrorCode; // code of last error ClassDef(AliRawReader, 0) // base class for reading raw digits };