ROOT logo
//-*- Mode: C++ -*-
// $Id$
#ifndef ALIHLTHOMERBLOCKDESC_H
#define ALIHLTHOMERBLOCKDESC_H

/* This file is property of and copyright by the ALICE HLT Project        * 
 * ALICE Experiment at CERN, All rights reserved.                         *
 * See cxx source for full Copyright notice                               */

/** @file   AliHLTHOMERBlockDesc.h
    @author Jochen Thaeder
    @date   
    @brief  Container for HOMER Blocks
*/

// see below for class documentation
// or
// refer to README to build package
// or
// visit http://web.ift.uib.no/~kjeks/doc/alice-hlt

class AliHLTMessage;

#include "TString.h"
#include "TObject.h"

#include "AliHLTLoggingVariadicFree.h"

/**
 * @class AliHLTHOMERBlockDesc
 * This class contains the data which comes from 1 block, delivered via the 
 * HOMER interface. It used in order to fill these block in TLists. ( It has 
 * to inherit from TObject ). Further more it reads the specification of the 
 * block and classifies the data as TObject, raw data, or something else. Mainly 
 * used in the AliEVEHOMERManager, as data objects for AliEVE.
 * 
 * @ingroup alihlt_homer
 */
class AliHLTHOMERBlockDesc : public TObject, public AliHLTLogging {

public:

 /*
  * ---------------------------------------------------------------------------------
  *                            Constructor / Destructor 
  * --------------------------------------------------------------------------------- 
  */

  /** standard constructor */
  AliHLTHOMERBlockDesc();       

  /** destructor */
  virtual ~AliHLTHOMERBlockDesc();

  /*
   * ---------------------------------------------------------------------------------
   *                            Data Handling - Setter - public
   * --------------------------------------------------------------------------------- 
   */

  /** Set block data 
   * @param data           Pointer to data
   * @param size           Size of data
   * @param origin         Detector
   * @param dataType       HLT data type  
   * @param specification  HLT specification
   */
  void SetBlock( void * data, ULong_t size, TString origin, TString dataType, ULong_t specification );

  /*
   * ---------------------------------------------------------------------------------
   *                            TObject Handling - public
   * --------------------------------------------------------------------------------- 
   */

  /** Returns if block contains a TObject
   * @return           Returns kTRUE if block contains a TObject, kFALSE otherwise.
   */
  Bool_t IsTObject()              { return fIsTObject;} 

  /** Returns Pointer to TObject */
  TObject* GetTObject()           { return fTObject;   }

  /** Get class name of this block 
   * @return           class name
   */
  TString GetClassName()          { return fClassName; }

  /*
   * ---------------------------------------------------------------------------------
   *                            Data Handling - Getter - public
   * --------------------------------------------------------------------------------- 
   */
  
  /** Returns if block contains a raw data, fClassName is not set in this case.
   * @return           Returns kTRUE if block contains raw data, kFALSE otherwise.
   */
  Bool_t IsRawData()              { return fIsRawData;} 

  /** Get pointer to data 
   * @return           Pointer to data
   */
  void* GetData()                 { return fData; }

  /** Get size of data 
   * @return           Size of data
   */
  ULong_t GetSize()               { return fSize; }

  /** Get name of this block
   * @return           name
   */
  TString GetBlockName()          { return fBlockName; }

  /** Get detector of this block 
   * @return           Detector name
   */
  TString GetDetector()           { return fDetector; }
  
  /** Get HLT data type of this block 
   * @return           HLT data type
   */
  TString GetDataType()           { return fDataType; }
  
  /** Get HLT specification of this block 
   * @return           HLT specification
   */
  ULong_t GetSpecification()      { return fSpecification; }

  /** Get sub detector of this block 
   * @return           subdetector
   */
  Int_t   GetSubDetector()        { return fSubDetector; }

  /** Get sub sub detector of this block
   * @return           subsubdetector
   */
  Int_t   GetSubSubDetector()     { return fSubSubDetector; }

  /** Returns kTRUE if HLT specification indicates a subdetector range
   * @return           kTRUE if subdetector range
   */
  Bool_t  HasSubDetectorRange()   { return fHasSubDetectorRange; }

  /** Returns kTRUE if HLT specification indicates a subsubdetector range
   * @return           kTRUE if subsubdetector range
   */
  Bool_t  HasSubSubDetectorRange(){ return fHasSubSubDetectorRange; }

  ///////////////////////////////////////////////////////////////////////////////////

private:

  /** copy constructor prohibited */
  AliHLTHOMERBlockDesc(const AliHLTHOMERBlockDesc&);

  /** assignment operator prohibited */
  AliHLTHOMERBlockDesc& operator=(const AliHLTHOMERBlockDesc&);

  /*
   * ---------------------------------------------------------------------------------
   *                            Data Handling - private
   * --------------------------------------------------------------------------------- 
   */

  /** Set all additional members*/
  void SetBlockParameters();

  /** Checks if Block contains a TObject. 
   * If so, set fIsTObject to kTRUE, otherwise kFALSE
   * @return           fIsTObject
   */
  Bool_t CheckIfTObject();

  /** Checks if Block contains a TObject raw data.
   * If so, set fIsRawData to kTRUE, otherwise kFALSE
   * @return           fIsRawData
   */
  Bool_t CheckIfRawData();

  /*
   * ---------------------------------------------------------------------------------
   *                            Members - private
   * --------------------------------------------------------------------------------- 
   */

  // -- Block properties --
  // ----------------------

  /** Pointer to data of the block */
  Char_t* fData;                    //
	      
  /** Size of data */
  ULong_t fSize;                    // see above

  /** Block Name */
  TString fBlockName;               // see above

  // -- Data flags --
  // ----------------

  /** States if block contains a TObject */
  Bool_t fIsTObject;                // see above

  /** States if block contains a raw data */
  Bool_t fIsRawData;                // see above

  // -- TObject properties --
  // ------------------------

  /** AliHTMessage object containg a TObject */
  AliHLTMessage* fMessage;          //

  /** TObject extracted out of @see AliHLTMessage */
  TObject*       fTObject;          //

  /** Class Name of the block */
  TString        fClassName;        // see above
  
  // -- Data Specifications --
  // -------------------------

  /** HLT DataType */
  TString fDataType;                // see above 

  /** Detector Name, e.g. PHOS */
  TString fDetector;                // see above

  /** HLT Specification */
  ULong_t fSpecification;           // see above

  // XXXXXXXXXXXXXXXXXXXXXXXX REMOVE IF NOT NEEDED XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  // -- Sub Detector Specifications --
  // ---------------------------------
  
  /** SubDetector Name e.g. MODULE */
  Int_t   fSubDetector;             // see above

  /** SubSubDetector Name e.g. PARTITION */
  Int_t   fSubSubDetector;          // see above

  /** States id block has a subdetector range */
  Bool_t  fHasSubDetectorRange;     // see above

  /** States id block has a subsubdetector range */
  Bool_t  fHasSubSubDetectorRange;  // see above

  // XXXXXXXXXXXXXXXXXXXXXXXX REMOVE IF NOT NEEDED XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  ClassDef( AliHLTHOMERBlockDesc, 2 )
};

#endif
 AliHLTHOMERBlockDesc.h:1
 AliHLTHOMERBlockDesc.h:2
 AliHLTHOMERBlockDesc.h:3
 AliHLTHOMERBlockDesc.h:4
 AliHLTHOMERBlockDesc.h:5
 AliHLTHOMERBlockDesc.h:6
 AliHLTHOMERBlockDesc.h:7
 AliHLTHOMERBlockDesc.h:8
 AliHLTHOMERBlockDesc.h:9
 AliHLTHOMERBlockDesc.h:10
 AliHLTHOMERBlockDesc.h:11
 AliHLTHOMERBlockDesc.h:12
 AliHLTHOMERBlockDesc.h:13
 AliHLTHOMERBlockDesc.h:14
 AliHLTHOMERBlockDesc.h:15
 AliHLTHOMERBlockDesc.h:16
 AliHLTHOMERBlockDesc.h:17
 AliHLTHOMERBlockDesc.h:18
 AliHLTHOMERBlockDesc.h:19
 AliHLTHOMERBlockDesc.h:20
 AliHLTHOMERBlockDesc.h:21
 AliHLTHOMERBlockDesc.h:22
 AliHLTHOMERBlockDesc.h:23
 AliHLTHOMERBlockDesc.h:24
 AliHLTHOMERBlockDesc.h:25
 AliHLTHOMERBlockDesc.h:26
 AliHLTHOMERBlockDesc.h:27
 AliHLTHOMERBlockDesc.h:28
 AliHLTHOMERBlockDesc.h:29
 AliHLTHOMERBlockDesc.h:30
 AliHLTHOMERBlockDesc.h:31
 AliHLTHOMERBlockDesc.h:32
 AliHLTHOMERBlockDesc.h:33
 AliHLTHOMERBlockDesc.h:34
 AliHLTHOMERBlockDesc.h:35
 AliHLTHOMERBlockDesc.h:36
 AliHLTHOMERBlockDesc.h:37
 AliHLTHOMERBlockDesc.h:38
 AliHLTHOMERBlockDesc.h:39
 AliHLTHOMERBlockDesc.h:40
 AliHLTHOMERBlockDesc.h:41
 AliHLTHOMERBlockDesc.h:42
 AliHLTHOMERBlockDesc.h:43
 AliHLTHOMERBlockDesc.h:44
 AliHLTHOMERBlockDesc.h:45
 AliHLTHOMERBlockDesc.h:46
 AliHLTHOMERBlockDesc.h:47
 AliHLTHOMERBlockDesc.h:48
 AliHLTHOMERBlockDesc.h:49
 AliHLTHOMERBlockDesc.h:50
 AliHLTHOMERBlockDesc.h:51
 AliHLTHOMERBlockDesc.h:52
 AliHLTHOMERBlockDesc.h:53
 AliHLTHOMERBlockDesc.h:54
 AliHLTHOMERBlockDesc.h:55
 AliHLTHOMERBlockDesc.h:56
 AliHLTHOMERBlockDesc.h:57
 AliHLTHOMERBlockDesc.h:58
 AliHLTHOMERBlockDesc.h:59
 AliHLTHOMERBlockDesc.h:60
 AliHLTHOMERBlockDesc.h:61
 AliHLTHOMERBlockDesc.h:62
 AliHLTHOMERBlockDesc.h:63
 AliHLTHOMERBlockDesc.h:64
 AliHLTHOMERBlockDesc.h:65
 AliHLTHOMERBlockDesc.h:66
 AliHLTHOMERBlockDesc.h:67
 AliHLTHOMERBlockDesc.h:68
 AliHLTHOMERBlockDesc.h:69
 AliHLTHOMERBlockDesc.h:70
 AliHLTHOMERBlockDesc.h:71
 AliHLTHOMERBlockDesc.h:72
 AliHLTHOMERBlockDesc.h:73
 AliHLTHOMERBlockDesc.h:74
 AliHLTHOMERBlockDesc.h:75
 AliHLTHOMERBlockDesc.h:76
 AliHLTHOMERBlockDesc.h:77
 AliHLTHOMERBlockDesc.h:78
 AliHLTHOMERBlockDesc.h:79
 AliHLTHOMERBlockDesc.h:80
 AliHLTHOMERBlockDesc.h:81
 AliHLTHOMERBlockDesc.h:82
 AliHLTHOMERBlockDesc.h:83
 AliHLTHOMERBlockDesc.h:84
 AliHLTHOMERBlockDesc.h:85
 AliHLTHOMERBlockDesc.h:86
 AliHLTHOMERBlockDesc.h:87
 AliHLTHOMERBlockDesc.h:88
 AliHLTHOMERBlockDesc.h:89
 AliHLTHOMERBlockDesc.h:90
 AliHLTHOMERBlockDesc.h:91
 AliHLTHOMERBlockDesc.h:92
 AliHLTHOMERBlockDesc.h:93
 AliHLTHOMERBlockDesc.h:94
 AliHLTHOMERBlockDesc.h:95
 AliHLTHOMERBlockDesc.h:96
 AliHLTHOMERBlockDesc.h:97
 AliHLTHOMERBlockDesc.h:98
 AliHLTHOMERBlockDesc.h:99
 AliHLTHOMERBlockDesc.h:100
 AliHLTHOMERBlockDesc.h:101
 AliHLTHOMERBlockDesc.h:102
 AliHLTHOMERBlockDesc.h:103
 AliHLTHOMERBlockDesc.h:104
 AliHLTHOMERBlockDesc.h:105
 AliHLTHOMERBlockDesc.h:106
 AliHLTHOMERBlockDesc.h:107
 AliHLTHOMERBlockDesc.h:108
 AliHLTHOMERBlockDesc.h:109
 AliHLTHOMERBlockDesc.h:110
 AliHLTHOMERBlockDesc.h:111
 AliHLTHOMERBlockDesc.h:112
 AliHLTHOMERBlockDesc.h:113
 AliHLTHOMERBlockDesc.h:114
 AliHLTHOMERBlockDesc.h:115
 AliHLTHOMERBlockDesc.h:116
 AliHLTHOMERBlockDesc.h:117
 AliHLTHOMERBlockDesc.h:118
 AliHLTHOMERBlockDesc.h:119
 AliHLTHOMERBlockDesc.h:120
 AliHLTHOMERBlockDesc.h:121
 AliHLTHOMERBlockDesc.h:122
 AliHLTHOMERBlockDesc.h:123
 AliHLTHOMERBlockDesc.h:124
 AliHLTHOMERBlockDesc.h:125
 AliHLTHOMERBlockDesc.h:126
 AliHLTHOMERBlockDesc.h:127
 AliHLTHOMERBlockDesc.h:128
 AliHLTHOMERBlockDesc.h:129
 AliHLTHOMERBlockDesc.h:130
 AliHLTHOMERBlockDesc.h:131
 AliHLTHOMERBlockDesc.h:132
 AliHLTHOMERBlockDesc.h:133
 AliHLTHOMERBlockDesc.h:134
 AliHLTHOMERBlockDesc.h:135
 AliHLTHOMERBlockDesc.h:136
 AliHLTHOMERBlockDesc.h:137
 AliHLTHOMERBlockDesc.h:138
 AliHLTHOMERBlockDesc.h:139
 AliHLTHOMERBlockDesc.h:140
 AliHLTHOMERBlockDesc.h:141
 AliHLTHOMERBlockDesc.h:142
 AliHLTHOMERBlockDesc.h:143
 AliHLTHOMERBlockDesc.h:144
 AliHLTHOMERBlockDesc.h:145
 AliHLTHOMERBlockDesc.h:146
 AliHLTHOMERBlockDesc.h:147
 AliHLTHOMERBlockDesc.h:148
 AliHLTHOMERBlockDesc.h:149
 AliHLTHOMERBlockDesc.h:150
 AliHLTHOMERBlockDesc.h:151
 AliHLTHOMERBlockDesc.h:152
 AliHLTHOMERBlockDesc.h:153
 AliHLTHOMERBlockDesc.h:154
 AliHLTHOMERBlockDesc.h:155
 AliHLTHOMERBlockDesc.h:156
 AliHLTHOMERBlockDesc.h:157
 AliHLTHOMERBlockDesc.h:158
 AliHLTHOMERBlockDesc.h:159
 AliHLTHOMERBlockDesc.h:160
 AliHLTHOMERBlockDesc.h:161
 AliHLTHOMERBlockDesc.h:162
 AliHLTHOMERBlockDesc.h:163
 AliHLTHOMERBlockDesc.h:164
 AliHLTHOMERBlockDesc.h:165
 AliHLTHOMERBlockDesc.h:166
 AliHLTHOMERBlockDesc.h:167
 AliHLTHOMERBlockDesc.h:168
 AliHLTHOMERBlockDesc.h:169
 AliHLTHOMERBlockDesc.h:170
 AliHLTHOMERBlockDesc.h:171
 AliHLTHOMERBlockDesc.h:172
 AliHLTHOMERBlockDesc.h:173
 AliHLTHOMERBlockDesc.h:174
 AliHLTHOMERBlockDesc.h:175
 AliHLTHOMERBlockDesc.h:176
 AliHLTHOMERBlockDesc.h:177
 AliHLTHOMERBlockDesc.h:178
 AliHLTHOMERBlockDesc.h:179
 AliHLTHOMERBlockDesc.h:180
 AliHLTHOMERBlockDesc.h:181
 AliHLTHOMERBlockDesc.h:182
 AliHLTHOMERBlockDesc.h:183
 AliHLTHOMERBlockDesc.h:184
 AliHLTHOMERBlockDesc.h:185
 AliHLTHOMERBlockDesc.h:186
 AliHLTHOMERBlockDesc.h:187
 AliHLTHOMERBlockDesc.h:188
 AliHLTHOMERBlockDesc.h:189
 AliHLTHOMERBlockDesc.h:190
 AliHLTHOMERBlockDesc.h:191
 AliHLTHOMERBlockDesc.h:192
 AliHLTHOMERBlockDesc.h:193
 AliHLTHOMERBlockDesc.h:194
 AliHLTHOMERBlockDesc.h:195
 AliHLTHOMERBlockDesc.h:196
 AliHLTHOMERBlockDesc.h:197
 AliHLTHOMERBlockDesc.h:198
 AliHLTHOMERBlockDesc.h:199
 AliHLTHOMERBlockDesc.h:200
 AliHLTHOMERBlockDesc.h:201
 AliHLTHOMERBlockDesc.h:202
 AliHLTHOMERBlockDesc.h:203
 AliHLTHOMERBlockDesc.h:204
 AliHLTHOMERBlockDesc.h:205
 AliHLTHOMERBlockDesc.h:206
 AliHLTHOMERBlockDesc.h:207
 AliHLTHOMERBlockDesc.h:208
 AliHLTHOMERBlockDesc.h:209
 AliHLTHOMERBlockDesc.h:210
 AliHLTHOMERBlockDesc.h:211
 AliHLTHOMERBlockDesc.h:212
 AliHLTHOMERBlockDesc.h:213
 AliHLTHOMERBlockDesc.h:214
 AliHLTHOMERBlockDesc.h:215
 AliHLTHOMERBlockDesc.h:216
 AliHLTHOMERBlockDesc.h:217
 AliHLTHOMERBlockDesc.h:218
 AliHLTHOMERBlockDesc.h:219
 AliHLTHOMERBlockDesc.h:220
 AliHLTHOMERBlockDesc.h:221
 AliHLTHOMERBlockDesc.h:222
 AliHLTHOMERBlockDesc.h:223
 AliHLTHOMERBlockDesc.h:224
 AliHLTHOMERBlockDesc.h:225
 AliHLTHOMERBlockDesc.h:226
 AliHLTHOMERBlockDesc.h:227
 AliHLTHOMERBlockDesc.h:228
 AliHLTHOMERBlockDesc.h:229
 AliHLTHOMERBlockDesc.h:230
 AliHLTHOMERBlockDesc.h:231
 AliHLTHOMERBlockDesc.h:232
 AliHLTHOMERBlockDesc.h:233
 AliHLTHOMERBlockDesc.h:234
 AliHLTHOMERBlockDesc.h:235
 AliHLTHOMERBlockDesc.h:236
 AliHLTHOMERBlockDesc.h:237
 AliHLTHOMERBlockDesc.h:238
 AliHLTHOMERBlockDesc.h:239
 AliHLTHOMERBlockDesc.h:240
 AliHLTHOMERBlockDesc.h:241
 AliHLTHOMERBlockDesc.h:242
 AliHLTHOMERBlockDesc.h:243
 AliHLTHOMERBlockDesc.h:244
 AliHLTHOMERBlockDesc.h:245
 AliHLTHOMERBlockDesc.h:246
 AliHLTHOMERBlockDesc.h:247
 AliHLTHOMERBlockDesc.h:248
 AliHLTHOMERBlockDesc.h:249
 AliHLTHOMERBlockDesc.h:250
 AliHLTHOMERBlockDesc.h:251
 AliHLTHOMERBlockDesc.h:252
 AliHLTHOMERBlockDesc.h:253
 AliHLTHOMERBlockDesc.h:254