- moving the cluster parameter evalution from own component to clusterizer
[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 ALIHLTCALOCLUSTERIZERCOMPONENT_H
21 #define ALIHLTCALOCLUSTERIZERCOMPONENT_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 "AliHLTCaloConstantsHandler.h"
41 #include "AliHLTCaloProcessor.h"
42
43
44 class AliHLTCaloDigitDataStruct;
45 class AliHLTCaloDigitContainerDataStruct;
46 class AliHLTCaloClusterizer;
47 class AliHLTCaloClusterAnalyser;
48 class AliHLTCaloRecPointDataStruct;
49
50 /**
51  * @class AliHLTCaloClusterizerComponent
52  *
53  * Class for running clusterization for PHOS in HLT. It takes digits as input and
54  * gives reconstruction points as output.
55  *
56  * The component has the following component arguments:
57  * -clusterthreshold       The energy threshold for starting a new rec point
58  * -energythreshold        The energy threshold for including a digit in a
59  *                         rec point
60  * @ingroup alihlt_phos
61  */
62
63 /**
64  * @class AliHLTCaloClusterizerComponent
65  *
66  * Class for running clusterization for PHOS in HLT.
67  *
68  * <h2>General properties:</h2>
69  *
70  * Component ID: \b PhosClusterizer <br>
71  * Library: \b libAliHLTPHOS.so     <br>
72  * Input Data Types: @ref AliHLTPHOSDefinitions::fgkDigitDataType<br>
73  * Output Data Types: @ref AliHLTPHOSDefinitions::fgkRecPointDataType<br>
74  *
75  * <h2>Mandatory arguments:</h2>
76  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
77  * \li No mandatory arguments for component                           <br>
78  *
79  * <h2>Optional arguments:</h2>
80  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
81  * \li -digitthreshold      <i> value </i> <br>
82  *      threshold for a digit to be added to a rec point in GeV (default value: 0.03)
83  * \li -recpointthreshold <i> value </i> <br>
84  *      threshold for starting a new rec point  (default value: 0.2)
85  * \li -partitionmode
86  *      if we want to do clusterisation on the partition level (not available...) (defaul value: false)
87  *
88  * <h2>Configuration:</h2>
89  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
90  * \li No configuration arguments
91  *
92  * <h2>Default CDB entries:</h2>
93  * \li No CDB entry yet, will come.
94  *
95  * <h2>Performance:</h2>
96  * Pretty good (~ 3 kHz), depends on amount of data...
97  *
98  * <h2>Memory consumption:</h2>
99  * Depends on the amount of data, but pretty godd
100  *
101  * <h2>Output size:</h2>
102  * Depends on the amount of data...
103  *
104  * More detailed description. (At some point...)
105  *
106  * @ingroup alihlt_phos
107  */
108
109 //class AliHLTCaloClusterizerComponent : public AliHLTCaloConstantsHandler, public AliHLTCaloProcessor
110 class AliHLTCaloClusterizerComponent : public AliHLTCaloProcessor, public AliHLTCaloConstantsHandler
111   {
112   public:
113
114     /** Constructor */
115     AliHLTCaloClusterizerComponent(TString det);
116
117     /** Destructor */
118     virtual ~AliHLTCaloClusterizerComponent();
119
120 //     /** interface function, see @ref AliHLTComponent for description */
121 //     void GetInputDataTypes ( std::vector<AliHLTComponentDataType>& list );
122
123 //     /** interface function, see @ref AliHLTComponent for description */
124 //     AliHLTComponentDataType GetOutputDataType();
125
126 //     /** interface function, see @ref AliHLTComponent for description */
127 //     void GetOutputDataSize ( unsigned long& constBase, double& inputMultiplier );
128
129     /** interface function, see @ref AliHLTComponent for description */
130
131     using  AliHLTCaloProcessor::DoEvent;
132
133     int DoEvent ( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
134                   AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr, AliHLTUInt32_t& size,
135                   std::vector<AliHLTComponentBlockData>& outputBlocks );
136
137     /** 
138      * Compare two digits, used during the sorting
139      */
140     static Int_t CompareDigits(const void *dig0, const void *dig);
141     
142   protected:
143
144     /** interface function, see @ref AliHLTComponent for
145         description */
146     int DoInit ( int argc, const char** argv );
147
148     /** interface function, see @ref AliHLTComponent for description */
149     int Deinit();
150
151     /** interface function, see @ref AliHLTComponent for description */
152     int Reconfigure ( const char* cdbEntry, const char* chainId );
153
154     /** interface function, see @ref AliHLTComponent for description */
155     int ScanConfigurationArgument ( int argc, const char** argv );
156     
157      /** The data origin */
158     char* fDataOrigin;                           //COMMENT
159
160     /** Pointer to the cluster analyser */
161     AliHLTCaloClusterAnalyser *fAnalyserPtr;                         //! transient
162     
163   private:
164
165     /** Array of pointers to our digits */
166     AliHLTCaloDigitDataStruct **fDigitsPointerArray;              //! transient
167     
168     /** Array of pointers to our digits */
169     AliHLTCaloDigitDataStruct *fOutputDigitsArray;              //! transient
170     
171     /** Pointer to the clusterizer it self */
172     AliHLTCaloClusterizer* fClusterizerPtr;                       //! transient
173
174     /** Number of digits in event */
175     Int_t fDigitCount;                                            //COMMENT
176     
177     /** Default constructor, not implemented */
178     AliHLTCaloClusterizerComponent();                             //COMMENT
179
180     /** Copy constructor  not implemented */
181     AliHLTCaloClusterizerComponent ( const AliHLTCaloClusterizerComponent &); // not implemented
182     
183     /** Assignment */
184     AliHLTCaloClusterizerComponent & operator = ( const AliHLTCaloClusterizerComponent &); // not implemented
185   };
186
187 #endif