* AliHLTHOMERBlockDesc holds now a copy of the data
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTHOMERBlockDesc.h
1 //-*- Mode: C++ -*-
2 #ifndef ALIHLTHOMERBLOCKDESC_H
3 #define ALIHLTHOMERBLOCKDESC_H
4
5 /* This file is property of and copyright by the ALICE HLT Project        * 
6  * ALICE Experiment at CERN, All rights reserved.                         *
7  * See cxx source for full Copyright notice                               */
8
9 /** @file   AliHLTHOMERBlockDesc.h
10     @author Jochen Thaeder
11     @date   
12     @brief  Container for HOMER Blocks
13 */
14
15 // see below for class documentation
16 // or
17 // refer to README to build package
18 // or
19 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
20
21 class AliHLTMessage;
22
23 #include "TString.h"
24 #include "TObject.h"
25
26 #include "AliHLTLoggingVariadicFree.h"
27
28 /**
29  * @class AliHLTHOMERBlockDesc
30  * This class contains the data which comes from 1 block, delivered via the 
31  * HOMER interface. It used in order to fill these block in TLists. ( It has 
32  * to inherit from TObject ). Further more it reads the specification of the 
33  * block and classifies the data as TObject, raw data, or something else. Mainly 
34  * used in the AliEVEHOMERManager, as data objects for AliEVE.
35  * 
36  * @ingroup alihlt_homer
37  */
38 class AliHLTHOMERBlockDesc : public TObject, public AliHLTLogging {
39
40 public:
41
42  /*
43   * ---------------------------------------------------------------------------------
44   *                            Constructor / Destructor 
45   * --------------------------------------------------------------------------------- 
46   */
47
48   /** standard constructor */
49   AliHLTHOMERBlockDesc();       
50
51   /** destructor */
52   virtual ~AliHLTHOMERBlockDesc();
53
54   /*
55    * ---------------------------------------------------------------------------------
56    *                            Data Handling - Setter - public
57    * --------------------------------------------------------------------------------- 
58    */
59
60   /** Set block data 
61    * @param data           Pointer to data
62    * @param size           Size of data
63    * @param origin         Detector
64    * @param dataType       HLT data type  
65    * @param specification  HLT specification
66    */
67   void SetBlock( void * data, ULong_t size, TString origin, TString dataType, ULong_t specification );
68
69   /*
70    * ---------------------------------------------------------------------------------
71    *                            TObject Handling - public
72    * --------------------------------------------------------------------------------- 
73    */
74
75   /** Returns if block contains a TObject
76    * @return           Returns kTRUE if block contains a TObject, kFALSE otherwise.
77    */
78   Bool_t IsTObject()              { return fIsTObject;} 
79
80   /** Returns Pointer to TObject */
81   TObject* GetTObject()           { return fTObject;   }
82
83   /** Get class name of this block 
84    * @return           class name
85    */
86   TString GetClassName()          { return fClassName; }
87
88   /*
89    * ---------------------------------------------------------------------------------
90    *                            Data Handling - Getter - public
91    * --------------------------------------------------------------------------------- 
92    */
93   
94   /** Returns if block contains a raw data, fClassName is not set in this case.
95    * @return           Returns kTRUE if block contains raw data, kFALSE otherwise.
96    */
97   Bool_t IsRawData()              { return fIsRawData;} 
98
99   /** Get pointer to data 
100    * @return           Pointer to data
101    */
102   void* GetData()                 { return fData; }
103
104   /** Get size of data 
105    * @return           Size of data
106    */
107   ULong_t GetSize()               { return fSize; }
108
109   /** Get name of this block
110    * @return           name
111    */
112   TString GetBlockName()          { return fBlockName; }
113
114   /** Get detector of this block 
115    * @return           Detector name
116    */
117   TString GetDetector()           { return fDetector; }
118   
119   /** Get HLT data type of this block 
120    * @return           HLT data type
121    */
122   TString GetDataType()           { return fDataType; }
123   
124   /** Get HLT specification of this block 
125    * @return           HLT specification
126    */
127   ULong_t GetSpecification()      { return fSpecification; }
128
129   /** Get sub detector of this block 
130    * @return           subdetector
131    */
132   Int_t   GetSubDetector()        { return fSubDetector; }
133
134   /** Get sub sub detector of this block
135    * @return           subsubdetector
136    */
137   Int_t   GetSubSubDetector()     { return fSubSubDetector; }
138
139   /** Returns kTRUE if HLT specification indicates a subdetector range
140    * @return           kTRUE if subdetector range
141    */
142   Bool_t  HasSubDetectorRange()   { return fHasSubDetectorRange; }
143
144   /** Returns kTRUE if HLT specification indicates a subsubdetector range
145    * @return           kTRUE if subsubdetector range
146    */
147   Bool_t  HasSubSubDetectorRange(){ return fHasSubSubDetectorRange; }
148
149   ///////////////////////////////////////////////////////////////////////////////////
150
151 private:
152
153   /** copy constructor prohibited */
154   AliHLTHOMERBlockDesc(const AliHLTHOMERBlockDesc&);
155
156   /** assignment operator prohibited */
157   AliHLTHOMERBlockDesc& operator=(const AliHLTHOMERBlockDesc&);
158
159   /*
160    * ---------------------------------------------------------------------------------
161    *                            Data Handling - private
162    * --------------------------------------------------------------------------------- 
163    */
164
165   /** Set all additional members*/
166   void SetBlockParameters();
167
168   /** Checks if Block contains a TObject. 
169    * If so, set fIsTObject to kTRUE, otherwise kFALSE
170    * @return           fIsTObject
171    */
172   Bool_t CheckIfTObject();
173
174   /** Checks if Block contains a TObject raw data.
175    * If so, set fIsRawData to kTRUE, otherwise kFALSE
176    * @return           fIsRawData
177    */
178   Bool_t CheckIfRawData();
179
180   /*
181    * ---------------------------------------------------------------------------------
182    *                            Members - private
183    * --------------------------------------------------------------------------------- 
184    */
185
186   // -- Block properties --
187   // ----------------------
188
189   /** Pointer to data of the block */
190   Char_t* fData;                    //! transient
191               
192   /** Size of data */
193   ULong_t fSize;                    // see above
194
195   /** Block Name */
196   TString fBlockName;               // see above
197
198   // -- Data flags --
199   // ----------------
200
201   /** States if block contains a TObject */
202   Bool_t fIsTObject;                // see above
203
204   /** States if block contains a raw data */
205   Bool_t fIsRawData;                // see above
206
207   // -- TObject properties --
208   // ------------------------
209
210   /** AliHTMessage object containg a TObject */
211   AliHLTMessage* fMessage;          //! transient
212
213   /** TObject extracted out of @see AliHLTMessage */
214   TObject*       fTObject;          //! transient
215
216   /** Class Name of the block */
217   TString        fClassName;        // see above
218   
219   // -- Data Specifications --
220   // -------------------------
221
222   /** HLT DataType */
223   TString fDataType;                // see above 
224
225   /** Detector Name, e.g. PHOS */
226   TString fDetector;                // see above
227
228   /** HLT Specification */
229   ULong_t fSpecification;           // see above
230
231   // XXXXXXXXXXXXXXXXXXXXXXXX REMOVE IF NOT NEEDED XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
232
233   // -- Sub Detector Specifications --
234   // ---------------------------------
235   
236   /** SubDetector Name e.g. MODULE */
237   Int_t   fSubDetector;             // see above
238
239   /** SubSubDetector Name e.g. PARTITION */
240   Int_t   fSubSubDetector;          // see above
241
242   /** States id block has a subdetector range */
243   Bool_t  fHasSubDetectorRange;     // see above
244
245   /** States id block has a subsubdetector range */
246   Bool_t  fHasSubSubDetectorRange;  // see above
247
248   // XXXXXXXXXXXXXXXXXXXXXXXX REMOVE IF NOT NEEDED XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
249
250   ClassDef( AliHLTHOMERBlockDesc, 0 )
251 };
252
253 #endif