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