Update master to aliroot
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCATrackerComponent.h
1 //-*- Mode: C++ -*-
2 // @(#) $Id$
3 // ************************************************************************
4 // This file is property of and copyright by the ALICE HLT Project        *
5 // ALICE Experiment at CERN, All rights reserved.                         *
6 // See cxx source for full Copyright notice                               *
7 //                                                                        *
8 //*************************************************************************
9
10 #ifndef ALIHLTTPCCATRACKERCOMPONENT_H
11 #define ALIHLTTPCCATRACKERCOMPONENT_H
12
13 #include "AliHLTProcessor.h"
14 #include "AliHLTComponentBenchmark.h"
15
16 class AliHLTTPCCATrackerFramework;
17 class AliHLTTPCCASliceOutput;
18 class AliHLTTPCCAClusterData;
19 struct AliHLTTPCSpacePointData;
20
21 /**
22  * @class AliHLTTPCCATrackerComponent
23  * The Cellular Automaton tracker component.
24  */
25 class AliHLTTPCCATrackerComponent : public AliHLTProcessor
26 {
27   public:
28     /** standard constructor */
29     AliHLTTPCCATrackerComponent();
30
31     /** dummy copy constructor, defined according to effective C++ style */
32     AliHLTTPCCATrackerComponent( const AliHLTTPCCATrackerComponent& );
33
34     /** dummy assignment op, but defined according to effective C++ style */
35     AliHLTTPCCATrackerComponent& operator=( const AliHLTTPCCATrackerComponent& );
36
37     /** standard destructor */
38     virtual ~AliHLTTPCCATrackerComponent();
39
40     // Public functions to implement AliHLTComponent's interface.
41     // These functions are required for the registration process
42
43     /** @see component interface @ref AliHLTComponent::GetComponentID */
44     const char* GetComponentID() ;
45
46     /** @see component interface @ref AliHLTComponent::GetInputDataTypes */
47     void GetInputDataTypes( vector<AliHLTComponentDataType>& list )  ;
48
49     /** @see component interface @ref AliHLTComponent::GetOutputDataType */
50     AliHLTComponentDataType GetOutputDataType() ;
51
52     /** @see component interface @ref AliHLTComponent::GetOutputDataSize */
53     virtual void GetOutputDataSize( unsigned long& constBase, double& inputMultiplier ) ;
54
55     /** @see component interface @ref AliHLTComponent::Spawn */
56     AliHLTComponent* Spawn() ;
57
58   protected:
59
60     // Protected functions to implement AliHLTComponent's interface.
61     // These functions provide initialization as well as the actual processing
62     // capabilities of the component.
63
64     /** @see component interface @ref AliHLTComponent::DoInit */
65     int DoInit( int argc, const char** argv );
66
67     /** @see component interface @ref AliHLTComponent::DoDeinit */
68     int DoDeinit();
69
70     /** reconfigure **/
71     int Reconfigure( const char* cdbEntry, const char* chainId );
72
73     /** @see component interface @ref AliHLTProcessor::DoEvent */
74     int DoEvent( const AliHLTComponentEventData& evtData, const AliHLTComponentBlockData* blocks,
75                  AliHLTComponentTriggerData& trigData, AliHLTUInt8_t* outputPtr,
76                  AliHLTUInt32_t& size, vector<AliHLTComponentBlockData>& outputBlocks );
77
78   private:
79
80     static const int fgkNSlices = 36;       //* N slices
81
82     /** the tracker object */
83     AliHLTTPCCATrackerFramework* fTracker;                      //! transient
84     AliHLTTPCCAClusterData* fClusterData;                       //Storage classes for cluser data in slice
85     AliHLTTPCCASliceOutput* fSliceOutput[fgkNSlices];           //Pointers to slice tracker output structures
86
87     //The following parameters are maintained for compatibility to be able to change the component
88     //such to process less than all 36 slices. Currently, fMinSlice is always 0 and fSliceCount is 36
89     int fMinSlice;                                              //minimum slice number to be processed
90     int fSliceCount;                                            //Number of slices to be processed
91
92     /** magnetic field */
93     double fSolenoidBz;               // see above
94     int fMinNTrackClusters;           //* required min number of clusters on the track
95     double fMinTrackPt;               //* required min Pt of tracks
96     double fClusterZCut;              //* cut on cluster Z position (for noise rejection at the age of TPC)
97     double fNeighboursSearchArea;     //* area in cm for the neighbour search algorithm
98     double fClusterErrorCorrectionY;  // correction for the cluster errors
99     double fClusterErrorCorrectionZ;  // correction for the cluster errors
100
101     AliHLTComponentBenchmark fBenchmark; // benchmarks
102     bool fAllowGPU;                   //* Allow this tracker to run on GPU
103     int fGPUHelperThreads;            // Number of helper threads for GPU tracker, set to -1 to use default number
104     int fCPUTrackers;                 //Number of CPU trackers to run in addition to GPU tracker
105     bool fGlobalTracking;             //Activate global tracking feature
106         int fGPUDeviceNum;                                //GPU Device to use, default -1 for auto detection
107         TString fGPULibrary;                      //Name of the library file that provides the GPU tracker object
108
109     /** set configuration parameters **/
110     void SetDefaultConfiguration();
111     int ReadConfigurationString(  const char* arguments );
112     int ReadCDBEntry( const char* cdbEntry, const char* chainId );
113     int Configure( const char* cdbEntry, const char* chainId, const char *commandLine );
114     void ConfigureSlices();
115
116     ClassDef( AliHLTTPCCATrackerComponent, 0 );
117
118 };
119 #endif //ALIHLTTPCCATRACKERCOMPONENT_H