- a fast HLT version of the SSD clusterfinder created. The speed on pp mc is ~20kHz...
[u/mrichter/AliRoot.git] / HLT / ITS / AliHLTITSClusterFinderComponent.h
1 //-*- Mode: C++ -*-
2 // $Id$
3 #ifndef ALIHLTITSCLUSTERFINDERCOMPONENT_H
4 #define ALIHLTITSCLUSTERFINDERCOMPONENT_H
5
6 //* This file is property of and copyright by the ALICE HLT Project        * 
7 //* ALICE Experiment at CERN, All rights reserved.                         *
8 //* See cxx source for full Copyright notice                               *
9
10 /** @file   AliHLTITSClusterFinderComponent.cxx
11     @author Gaute Ã˜vrebekk <st05886@alf.uib.no>
12     @date   
13     @brief  Component to run the offline clusterfinder.
14 */
15
16 #include "AliHLTProcessor.h"
17 #include "AliRawReaderMemory.h"
18 #include "AliITSDetTypeRec.h"
19 #include "AliITSgeom.h"
20 #include "AliITSInitGeometry.h"
21 #include "TClonesArray.h"
22
23 class AliHLTITSClusterFinderSPD;
24
25
26 /**
27  * @class AliHLTITSClusterFinderComponent
28  * HLT Component to run the ITS offline clusterfinders.
29  *
30  * <h2>General properties:</h2>
31  *
32  * Component ID: \b ITSClusterFinderSPD or ITSClusterFinderSDD or ITSClusterFinderSSD <br>
33  * Library: \b libAliHLTITS.so                              <br>
34  * Input Data Types:                                        <br> 
35  *    kAliHLTDataTypeDDLRaw|kAliHLTDataOriginITSSPD or kAliHLTDataTypeDDLRaw|kAliHLTDataOriginITSSDD or kAliHLTDataTypeDDLRaw|kAliHLTDataOriginITSSD <br>
36  *      
37  * Output Data Types:                                       <br>
38  *    kAliHLTDataTypeClusters|kAliHLTDataOriginITSSPD or kAliHLTDataTypeClusters|kAliHLTDataOriginITSSDD or kAliHLTDataTypeClusters|kAliHLTDataOriginITSSSD <br>
39  *
40  * <h2>Mandatory arguments:</h2>
41  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
42  *
43  * <h2>Optional arguments:</h2>
44  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
45  *
46  * <h2>Configuration:</h2>
47  * <!-- NOTE: ignore the \li. <i> and </i>: it's just doxygen formatting -->
48  * \li -config1      <i> teststring   </i> <br>
49  *      a configuration argument with one parameter
50  * \li -config2                            <br>
51  *      a configuration argument without parameters
52  *
53  * <h2>Default CDB entries:</h2>
54  * TODO
55  *
56  * <h2>Performance:</h2>
57  * TODO
58  *
59  * <h2>Memory consumption:</h2>
60  * TODO
61  *
62  * <h2>Output size:</h2>
63  * TODO
64  *
65  * @ingroup alihlt_its_components
66  */
67 class AliHLTITSClusterFinderComponent : public AliHLTProcessor
68 {
69  public:
70   /**
71    * Defines for selecting clusterfinder for SPD, SDD or SSD.
72    */
73   enum {
74     kClusterFinderSPD,
75     kClusterFinderSDD,
76     kClusterFinderSSD
77   };
78   /*
79    * ---------------------------------------------------------------------------------
80    *                            Constructor / Destructor
81    * ---------------------------------------------------------------------------------
82    */
83   
84   /** constructor
85    *  @param mode    input type see e.g. @ref kClusterFinderSPD
86    */
87   AliHLTITSClusterFinderComponent(int mode);
88
89   /** destructor */
90   virtual ~AliHLTITSClusterFinderComponent();
91
92   /*
93    * ---------------------------------------------------------------------------------
94    * Public functions to implement AliHLTComponent's interface.
95    * These functions are required for the registration process
96    * ---------------------------------------------------------------------------------
97    */
98
99   /** interface function, see @ref AliHLTComponent for description */
100   const char* GetComponentID();
101
102   /** interface function, see @ref AliHLTComponent for description */
103    void GetInputDataTypes( vector<AliHLTComponentDataType>& list);
104
105   /** interface function, see @ref AliHLTComponent for description */
106   AliHLTComponentDataType GetOutputDataType();
107
108   /** interface function, see @ref AliHLTComponent for description */
109   virtual void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier );
110
111   /** interface function, see @ref AliHLTComponent for description */
112   AliHLTComponent* Spawn();
113
114  protected:
115         
116   /*
117    * ---------------------------------------------------------------------------------
118    * Protected functions to implement AliHLTComponent's interface.
119    * These functions provide initialization as well as the actual processing
120    * capabilities of the component. 
121    * ---------------------------------------------------------------------------------
122    */
123         
124   /** Initialization */
125   Int_t DoInit( int argc, const char** argv );
126
127   /** DeInitialization */
128   Int_t DoDeinit();
129   
130   /** EventLoop */
131   //Int_t DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks, 
132   //     AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr
133   //     ,AliHLTUInt32_t& size, AliHLTComponentBlockList& outputBlocks);
134
135   Int_t DoEvent( const AliHLTComponentEventData& /*evtData*/, AliHLTComponentTriggerData& /*trigData*/);
136
137   int Reconfigure(const char* cdbEntry, const char* chainId);
138                 
139   using AliHLTProcessor::DoEvent;
140  
141   ///////////////////////////////////////////////////////////////////////////////////
142     
143  private:
144   /** standard constructor prohibited */
145   AliHLTITSClusterFinderComponent();
146   /** copy constructor prohibited */
147   AliHLTITSClusterFinderComponent(const AliHLTITSClusterFinderComponent&);
148   /** assignment operator prohibited */
149   AliHLTITSClusterFinderComponent& operator=(const AliHLTITSClusterFinderComponent&);
150   /**
151    * Configure the component.
152    * Parse a string for the configuration arguments and set the component
153    * properties.
154    */
155   int Configure(const char* arguments);
156   /*
157    * ---------------------------------------------------------------------------------
158    *                             Members - private
159    * ---------------------------------------------------------------------------------
160    */
161
162   /**
163    * switch to indicated the ClusterFinder
164    * use fModeSwitch = 0 for SPD
165    * use fModeSwitch = 1 for SDD
166    * use fModeSwitch = 2 for SSD
167    */
168   Int_t fModeSwitch;      
169
170   Int_t fNModules;             // total number of modules
171   Int_t fId;                   // ddl offset
172   Int_t fNddl;                 // number of ddl's
173   
174    TClonesArray** fClusters;                                  //!transient
175   
176   /** the reader object for data decoding */
177   AliRawReaderMemory* fRawReader;                             //!transient
178
179   AliITSDetTypeRec* fDettype;                                 //!transient
180
181   AliITSgeom* fgeom;                                          //!transient
182
183   AliITSInitGeometry* fgeomInit;                              //!transient
184
185   AliHLTITSClusterFinderSPD *fSPD;
186
187   double fStatTime;
188   double fStatTimeAll;
189   double fStatTimeC;
190   double fStatTimeAllC;
191   int fStatNEv;
192
193   ClassDef(AliHLTITSClusterFinderComponent, 0)
194     
195     };
196 #endif