]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/rec/AliRawReaderHLT.h
handling of HLTOUT data added; access to parent raw reader restructured
[u/mrichter/AliRoot.git] / HLT / rec / AliRawReaderHLT.h
1 //-*- Mode: C++ -*-
2 // $Id$
3
4 #ifndef ALIRAWREADERHLT_H
5 #define ALIRAWREADERHLT_H
6 //* This file is property of and copyright by the ALICE HLT Project        * 
7 //* ALICE Experiment at CERN, All rights reserved.                         *
8 //* See cxx source for full Copyright notice                               *
9
10 /** @file   AliRawReaderHLT.h
11     @author Matthias Richter
12     @date   
13     @brief  AliRawReader implementation which replaces original input of
14             detectors with the appropriate HLT output.                    */
15
16 // see below for class documentation
17 // or
18 // refer to README to build package
19 // or
20 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
21
22 #include "AliHLTDataTypes.h"
23 #include "AliRawReader.h"      // RAW, base class
24 #include "TString.h"
25 #include <vector>
26
27 class AliHLTOUT;
28 /**
29  * @class AliRawReaderHLT
30  * Handler of HLTOUT data for AliRawReader input.
31  */
32 class AliRawReaderHLT : public AliRawReader {
33  public:
34   /** constructor */
35   AliRawReaderHLT(AliRawReader* pParentReader, const char* options=NULL);
36   /** destructor */
37   virtual ~AliRawReaderHLT();
38
39   // interface methods of AliRawReader
40   void     Select(Int_t detectorID, 
41                   Int_t minDDLID = -1, Int_t maxDDLID = -1);
42 //   void     Select(const char *detectorName, 
43 //                Int_t minDDLID = -1, Int_t maxDDLID = -1);
44   void     SelectEquipment(Int_t equipmentType, 
45                            Int_t minEquipmentId = -1, 
46                            Int_t maxEquipmentId = -1);
47   void     SkipInvalid(Bool_t skip = kTRUE);
48   void     SelectEvents(Int_t type);
49
50   UInt_t   GetType() const;
51   UInt_t   GetRunNumber() const;
52   const UInt_t* GetEventId() const;
53   const UInt_t* GetTriggerPattern() const;
54   const UInt_t* GetDetectorPattern() const;
55   const UInt_t* GetAttributes() const;
56   const UInt_t* GetSubEventAttributes() const;
57   UInt_t   GetLDCId() const;
58   UInt_t   GetGDCId() const;
59   UInt_t   GetTimestamp() const;
60
61   const UInt_t* GetEquipmentAttributes() const;
62   Int_t    GetEquipmentElementSize() const;
63   Int_t    GetEquipmentHeaderSize() const;
64
65   Int_t    GetEquipmentSize() const;
66   Int_t    GetEquipmentType() const;
67   Int_t    GetEquipmentId() const;
68   Bool_t   ReadHeader();
69   Bool_t   ReadNextData(UChar_t*& data);
70   Bool_t   ReadNextInt(UInt_t& data);
71   Bool_t   ReadNextShort(UShort_t& data);
72   Bool_t   ReadNextChar(UChar_t& data);
73   Bool_t   ReadNext(UChar_t* data, Int_t size);
74
75   Bool_t   Reset();
76
77   Bool_t   NextEvent();
78   Bool_t   RewindEvents();
79
80  protected:
81
82  private:
83   /** standard constructor prohibited */
84   AliRawReaderHLT();
85   /** copy constructor prohibited */
86   AliRawReaderHLT(const AliRawReaderHLT&);
87   /** assignment operator prohibited */
88   AliRawReaderHLT& operator=(const AliRawReaderHLT&);
89
90   /**
91    * Scan the options.
92    * Set the ids for the specified detectors in the detector
93    * list. Currently, no other options are available.
94    */
95   int ScanOptions(const char* options);
96
97   /**
98    * Read the next data block from the HLT stream
99    */
100   Bool_t ReadNextHLTData();
101
102   /**
103    * Check if a ddlid is part of the ones which are selected for
104    * input replacement.
105    */
106   Bool_t IsHLTInput(int ddlid);
107
108   /** the rawreader */
109   AliRawReader* fpParentReader; //!transient
110
111   /** options */
112   TString fOptions; //!transient
113
114   /** current data set, either extracted from the HLT stream or parent raw reader */
115   const AliHLTUInt8_t* fpData; // !transient
116
117   /** size of the current data set */
118   int fDataSize; // !transient
119
120   /** current stream offset in the data set */
121   int fOffset; // !transient
122
123   /** equipment id of the current data set, >0 indicates data set from HLT stream */
124   int fEquipmentId; // !transient
125
126   /** indicates the availibility of data from the HLT stream */
127   bool fbHaveHLTData; // !transient
128
129   /** list of detectors for which data will be taken from HLT stream */
130   vector<int> fDetectors; // !transient
131
132   /** instance of the HLTOUT handler */
133   AliHLTOUT* fpHLTOUT; // !transient
134
135   ClassDef(AliRawReaderHLT, 1)
136 };
137
138 #define ALIHLTREC_LIBRARY                   "libHLTrec.so"
139 #define ALIHLTREC_LIBRARY_VERSION           0
140 #define ALIRAWREADERHLT_CREATE_INSTANCE     "AliRawReaderHLTCreateInstance"
141
142 #ifdef __cplusplus
143 extern "C" {
144 #endif
145   typedef AliRawReader* (*AliRawReaderHLTCreateInstance_t)(AliRawReader* pParentReader, const char* options);
146
147   /**
148    * Create an instance of the AliRawReader class
149    */
150   AliRawReader* AliRawReaderHLTCreateInstance(AliRawReader* pParentReader, const char* options);
151 #ifdef __cplusplus
152 }
153 #endif
154 #endif