]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/tracking-ca/AliHLTTPCCATrackletConstructor.h
bug fix: reconstruction crash when the output buffer size exceed
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCATrackletConstructor.h
1 //-*- Mode: C++ -*-
2 // ************************************************************************
3 // This file is property of and copyright by the ALICE HLT Project        *
4 // ALICE Experiment at CERN, All rights reserved.                         *
5 // See cxx source for full Copyright notice                               *
6 //                                                                        *
7 //*************************************************************************
8
9 #ifndef ALIHLTTPCCATRACKLETCONSTRUCTOR_H
10 #define ALIHLTTPCCATRACKLETCONSTRUCTOR_H
11
12 #ifdef HLTCA_GPUCODE
13 #define HLTCA_GPU_USE_INT short
14 #else
15 #define HLTCA_GPU_USE_INT int
16 #endif //HLTCA_GPUCODE
17
18 #include "AliHLTTPCCADef.h"
19 #include "AliHLTTPCCAGPUConfig.h"
20 #include "AliHLTTPCCATrackParam.h"
21
22 /**
23  * @class AliHLTTPCCATrackletConstructor
24  *
25  */
26 class AliHLTTPCCATracker;
27
28 class AliHLTTPCCATrackletConstructor
29 {
30   public:
31
32     class   AliHLTTPCCASharedMemory
33     {
34         friend class AliHLTTPCCATrackletConstructor;
35       public:
36 #if !defined(HLTCA_GPUCODE)
37         AliHLTTPCCASharedMemory()
38                         : fNextTrackletFirst(0), fNextTrackletCount(0), fNextTrackletNoDummy(0), fNextTrackletStupidDummy(0), fNextTrackletFirstRun(0), fNTracklets(0), fSliceDone(0) {}
39
40         AliHLTTPCCASharedMemory( const AliHLTTPCCASharedMemory& /*dummy*/ )
41                         : fNextTrackletFirst(0), fNextTrackletCount(0), fNextTrackletNoDummy(0), fNextTrackletStupidDummy(0), fNextTrackletFirstRun(0), fNTracklets(0), fSliceDone(0) {}
42         AliHLTTPCCASharedMemory& operator=( const AliHLTTPCCASharedMemory& /*dummy*/ ) { return *this; }
43 #endif //HLTCA_GPUCODE
44
45       protected:
46 #ifdef HLTCA_GPU_PREFETCHDATA
47         uint4 fData[2][ALIHLTTPCCATRACKLET_CONSTRUCTOR_TEMP_MEM / 4]; // temp memory
48                 AliHLTTPCCARow fRow[2]; // row
49 #else
50                 AliHLTTPCCARow fRows[HLTCA_ROW_COUNT];
51 #endif //HLTCA_GPU_PREFETCHDATA
52                 int fNextTrackletFirst;
53                 int fNextTrackletCount;
54                 int fNextTrackletNoDummy;
55                 int fNextTrackletStupidDummy;
56                 int fNextTrackletFirstRun;
57                 int fNTracklets;
58                 int fSliceDone;
59
60 #ifdef HLTCA_GPU_TRACKLET_CONSTRUCTOR_DO_PROFILE
61                 int fMaxSync;
62 #endif //HLTCA_GPU_TRACKLET_CONSTRUCTOR_DO_PROFILE
63
64                 int fTrackletStoreCount[2][HLTCA_ROW_COUNT / HLTCA_GPU_SCHED_ROW_STEP + 1];
65     };
66
67     class  AliHLTTPCCAThreadMemory
68     {
69         friend class AliHLTTPCCATrackletConstructor;
70       public:
71 #if !defined(HLTCA_GPUCODE)
72         AliHLTTPCCAThreadMemory()
73             : fItr( 0 ), fFirstRow( 0 ), fLastRow( 0 ), fStartRow( 0 ), fEndRow( 0 ), fCurrIH( 0 ), fGo( 0 ), fCurrentData( 0 ), fStage( 0 ), fNHits( 0 ), fNMissed( 0 ), fLastY( 0 ), fLastZ( 0 ) {}
74
75         AliHLTTPCCAThreadMemory( const AliHLTTPCCAThreadMemory& /*dummy*/ )
76             : fItr( 0 ), fFirstRow( 0 ), fLastRow( 0 ), fStartRow( 0 ), fEndRow( 0 ), fCurrIH( 0 ), fGo( 0 ), fCurrentData( 0 ), fStage( 0 ), fNHits( 0 ), fNMissed( 0 ), fLastY( 0 ), fLastZ( 0 ) {}
77         AliHLTTPCCAThreadMemory& operator=( const AliHLTTPCCAThreadMemory& /*dummy*/ ) { return *this; }
78 #endif //!HLTCA_GPUCODE
79
80       protected:
81         int fItr; // track index
82         int fFirstRow;  // first row index
83         int fLastRow; // last row index
84         int fStartRow;  // first row index
85         int fEndRow;  // first row index
86         int fCurrIH; // indef of the current hit
87         bool fGo; // do fit/searching flag
88         bool fCurrentData; // index of the current memory array
89         int fStage; // reco stage
90         int fNHits; // n track hits
91         int fNMissed; // n missed hits during search
92         float fLastY; // Y of the last fitted cluster
93         float fLastZ; // Z of the last fitted cluster
94     };
95
96         struct AliHLTTPCCAGPUTempMemory
97         {
98                 AliHLTTPCCAThreadMemory fThreadMem;
99                 AliHLTTPCCATrackParam fParam;
100         };
101
102         GPUd() static void InitTracklet ( AliHLTTPCCATrackParam &tParam );
103
104     GPUd() static void ReadData( int iThread, AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, int iRow );
105
106     GPUd() static void UpdateTracklet
107     ( int nBlocks, int nThreads, int iBlock, int iThread,
108       AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam, int iRow );
109
110     GPUd() static void StoreTracklet
111     ( int nBlocks, int nThreads, int iBlock, int iThread,
112       AliHLTTPCCASharedMemory &s, AliHLTTPCCAThreadMemory &r, AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam &tParam );
113
114 #ifdef HLTCA_GPUCODE
115         GPUd() static void AliHLTTPCCATrackletConstructorNewGPU(AliHLTTPCCATracker *pTracker);
116         GPUd() static int FetchTracklet(AliHLTTPCCATracker &tracker, AliHLTTPCCASharedMemory &sMem, int Reverse, int RowBlock, int &mustInit);
117         GPUd() static void AliHLTTPCCATrackletConstructorInit(int iTracklet, AliHLTTPCCATracker &tracke);
118         GPUd() static void CopyTrackletTempData( AliHLTTPCCAThreadMemory &rMemSrc, AliHLTTPCCAThreadMemory &rMemDst, AliHLTTPCCATrackParam &tParamSrc, AliHLTTPCCATrackParam &tParamDst);
119 #else
120         GPUd() static void AliHLTTPCCATrackletConstructorNewCPU(AliHLTTPCCATracker &tracker);
121 #endif //HLTCA_GPUCODE
122
123     GPUd() static bool SAVE() { return 1; }
124
125 #if defined(HLTCA_GPUCODE)
126     //GPUhd() inline int NMemThreads() { return 128; }
127 #define TRACKLET_CONSTRUCTOR_NMEMTHREDS HLTCA_GPU_TRACKLET_CONSTRUCTOR_NMEMTHREDS
128 #else
129     //GPUhd() inline int NMemThreads() { return 1; }
130 #define TRACKLET_CONSTRUCTOR_NMEMTHREDS 1
131 #endif //!HLTCA_GPUCODE
132
133 };
134
135 #endif //ALIHLTTPCCATRACKLETCONSTRUCTOR_H