- adding clusterizer component to the CALO library
[u/mrichter/AliRoot.git] / HLT / CALO / AliHLTCaloClusterizerComponent.h
1 //-*- Mode: C++ -*-
2 // $Id: AliHLTCaloClusterizerComponent.h 36636 2009-11-11 02:16:41Z odjuvsla $
3
4
5 /**************************************************************************
6  * This file is property of and copyright by the ALICE HLT Project        *
7  * All rights reserved.                                                   *
8  *                                                                        *
9  * Primary Authors: Oystein Djuvsland                                     *
10  *                                                                        *
11  * Permission to use, copy, modify and distribute this software and its   *
12  * documentation strictly for non-commercial purposes is hereby granted   *
13  * without fee, provided that the above copyright notice appears in all   *
14  * copies and that both the copyright notice and this permission notice   *
15  * appear in the supporting documentation. The authors make no claims     *
16  * about the suitability of this software for any purpose. It is          *
17  * provided "as is" without express or implied warranty.                  *
18  **************************************************************************/
19
20 #ifndef ALIHLTPHOSCLUSTERIZERCOMPONENT_H
21 #define ALIHLTPHOSCLUSTERIZERCOMPONENT_H
22
23
24
25 /**
26  * Clusterizer component for PHOS HLT
27  *
28  * @file   AliHLTCaloClusterizerComponent.h
29  * @author Oystein Djuvsland
30  * @date
31  * @brief  A clusterizer component for PHOS HLT
32 */
33
34 // see below for class documentation
35 // or
36 // refer to README to build package
37 // or
38 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
39
40 #include "AliHLTPHOSProcessor.h"
41
42 class AliHLTCaloDigitDataStruct;
43 class AliHLTCaloDigitContainerStruct;
44 class AliHLTCaloClusterizer;
45 class AliHLTCaloRecPointDataStruct;
46
47 /**
48  * @class AliHLTCaloClusterizerComponent
49  *
50  * Class for running clusterization for PHOS in HLT. It takes digits as input and
51  * gives reconstruction points as output.
52  *
53  * The component has the following component arguments:
54  * -clusterthreshold       The energy threshold for starting a new rec point
55  * -energythreshold        The energy threshold for including a digit in a
56  *                         rec point
57  * @ingroup alihlt_phos
58  */
59
60 /**
61  * @class AliHLTCaloClusterizerComponent
62  *
63  * Class for running clusterization for PHOS in HLT.
64  *
65  * <h2>General properties:</h2>
66  *
67  * Component ID: \b PhosClusterizer <br>
68  * Library: \b libAliHLTPHOS.so     <br>
69  * Input Data Types: @ref AliHLTPHOSDefinitions::fgkDigitDataType<br>
70  * Output Data Types: @ref AliHLTPHOSDefinitions::fgkRecPointDataType<br>
71  *
72  * <h2>Mandatory arguments:</h2>
73  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
74  * \li No mandatory arguments for component                           <br>
75  *
76  * <h2>Optional arguments:</h2>
77  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
78  * \li -digitthreshold      <i> value </i> <br>
79  *      threshold for a digit to be added to a rec point in GeV (default value: 0.03)
80  * \li -recpointthreshold <i> value </i> <br>
81  *      threshold for starting a new rec point  (default value: 0.2)
82  * \li -partitionmode
83  *      if we want to do clusterisation on the partition level (not available...) (defaul value: false)
84  *
85  * <h2>Configuration:</h2>
86  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
87  * \li No configuration arguments
88  *
89  * <h2>Default CDB entries:</h2>
90  * \li No CDB entry yet, will come.
91  *
92  * <h2>Performance:</h2>
93  * Pretty good (~ 3 kHz), depends on amount of data...
94  *
95  * <h2>Memory consumption:</h2>
96  * Depends on the amount of data, but pretty godd
97  *
98  * <h2>Output size:</h2>
99  * Depends on the amount of data...
100  *
101  * More detailed description. (At some point...)
102  *
103  * @ingroup alihlt_phos
104  */
105
106 class AliHLTCaloClusterizerComponent: public AliHLTPHOSProcessor
107   {
108   public:
109
110     /** Constructor */
111     AliHLTCaloClusterizerComponent();
112
113     /** Destructor */
114     virtual ~AliHLTCaloClusterizerComponent();
115
116     /** Copy constructor */
117     AliHLTCaloClusterizerComponent ( const AliHLTCaloClusterizerComponent & ) :
118         AliHLTPHOSProcessor(),
119         fAllDigitsPtr ( 0 ),
120         fClusterizerPtr ( 0 ),
121         //    fRecPointStructArrayPtr(0),
122         fDigitCount ( 0 )
123     {
124       //Copy constructor not implemented
125     }
126
127     /** Assignment */
128     AliHLTCaloClusterizerComponent & operator = ( const AliHLTCaloClusterizerComponent )
129     {
130       //Assignment
131       return *this;
132     }
133
134     /** interface function, see @ref AliHLTComponent for description */
135     void GetInputDataTypes ( std::vector<AliHLTComponentDataType>& list ) = 0;
136
137     /** interface function, see @ref AliHLTComponent for description */
138     AliHLTComponentDataType GetOutputDataType();
139
140     /** interface function, see @ref AliHLTComponent for description */
141     void GetOutputDataSize ( unsigned long& constBase, double& inputMultiplier );
142
143     /** interface function, see @ref AliHLTComponent for description */
144
145     using  AliHLTPHOSProcessor::DoEvent;
146     int DoEvent ( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
147                   AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr, AliHLTUInt32_t& size,
148                   std::vector<AliHLTComponentBlockData>& outputBlocks );
149     
150   protected:
151
152     /** interface function, see @ref AliHLTComponent for description */
153     int DoInit ( int argc, const char** argv );
154
155     /** interface function, see @ref AliHLTComponent for description */
156     int Deinit();
157
158     /** interface function, see @ref AliHLTComponent for description */
159     int Reconfigure ( const char* cdbEntry, const char* chainId );
160
161     /** interface function, see @ref AliHLTComponent for description */
162     int ScanConfigurationArgument ( int argc, const char** argv );
163
164     /** The data type we want */
165     AliHLTComponentDataType fDataType;            //COMMENT
166
167   private:
168
169     /** Pointer to our digits */
170     AliHLTCaloDigitContainerStruct *fAllDigitsPtr;             //! transient
171
172     /** Pointer to the clusterizer it self */
173     AliHLTCaloClusterizer* fClusterizerPtr;                       //! transient
174
175     /** Number of digits in event */
176     Int_t fDigitCount;                                            //COMMENT
177
178   };
179
180 #endif