]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.h
bug fix: reconstruction crash when the output buffer size exceed
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCASliceOutput.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
10 #ifndef ALIHLTTPCCASLICEOUTPUT_H
11 #define ALIHLTTPCCASLICEOUTPUT_H
12
13 #include "AliHLTTPCCADef.h"
14 #include <cstdlib>
15 #include "AliHLTTPCCASliceTrack.h"
16 //Obsolete
17 #include "AliHLTTPCCAOutTrack.h"
18
19 /**
20  * @class AliHLTTPCCASliceOutput
21  *
22  * AliHLTTPCCASliceOutput class is used to store the output of AliHLTTPCCATracker{Component}
23  * and transport the output to AliHLTTPCCAGBMerger{Component}
24  *
25  * The class contains all the necessary information about TPC tracks, reconstructed in one slice.
26  * This includes the reconstructed track parameters and some compressed information
27  * about the assigned clusters: clusterId, position and amplitude.
28  *
29  */
30 class AliHLTTPCCASliceOutput
31 {
32   public:
33
34         struct outputControlStruct
35         {
36                 outputControlStruct() : fObsoleteOutput( 1 ), fDefaultOutput( 1 ), fOutputPtr( NULL ), fOutputMaxSize ( 0 ), fEndOfSpace(0) {}
37                 int fObsoleteOutput;    //Enable Obsolete Output
38                 int fDefaultOutput;             //Enable Default Output
39                 char* fOutputPtr;               //Pointer to Output Space, NULL to allocate output space
40                 int fOutputMaxSize;             //Max Size of Output Data if Pointer to output space is given
41                 bool fEndOfSpace; // end of space flag 
42         };
43
44     GPUhd() int NTracks()                    const { return fNTracks;              }
45     GPUhd() int NTrackClusters()             const { return fNTrackClusters;       }
46
47     GPUhd() const AliHLTTPCCASliceTrack &Track( int i ) const { return fTracks[i]; }
48     GPUhd() unsigned char   ClusterRow     ( int i )  const { return fClusterRow[i]; }
49     GPUhd()  int   ClusterId     ( int i )  const { return fClusterId[i]; }
50     GPUhd() float2   ClusterUnpackedYZ ( int i )  const { return fClusterUnpackedYZ[i]; }
51     GPUhd() float    ClusterUnpackedX  ( int i )  const { return fClusterUnpackedX[i]; }
52
53     GPUhd() static int EstimateSize( int nOfTracks, int nOfTrackClusters );
54     void SetPointers(int nTracks = -1, int nTrackClusters = -1, const outputControlStruct* outputControl = NULL);
55         static void Allocate(AliHLTTPCCASliceOutput* &ptrOutput, int nTracks, int nTrackHits, outputControlStruct* outputControl);
56
57     GPUhd() void SetNTracks       ( int v )  { fNTracks = v;        }
58     GPUhd() void SetNTrackClusters( int v )  { fNTrackClusters = v; }
59
60     GPUhd() void SetTrack( int i, const AliHLTTPCCASliceTrack &v ) {  fTracks[i] = v; }
61     GPUhd() void SetClusterRow( int i, unsigned char v ) {  fClusterRow[i] = v; }
62     GPUhd() void SetClusterId( int i, int v ) {  fClusterId[i] = v; }
63     GPUhd() void SetClusterUnpackedYZ( int i, float2 v ) {  fClusterUnpackedYZ[i] = v; }
64     GPUhd() void SetClusterUnpackedX( int i, float v ) {  fClusterUnpackedX[i] = v; }
65
66         GPUhd() size_t OutputMemorySize() const { return(fMemorySize); }
67
68         //Obsolete Output
69
70     GPUhd()  int NOutTracks() const { return(fNOutTracks); }
71         GPUhd()  void SetNOutTracks(int val) { fNOutTracks = val; }
72     GPUhd()  AliHLTTPCCAOutTrack *OutTracks() const { return  fOutTracks; }
73     GPUhd()  const AliHLTTPCCAOutTrack &OutTrack( int index ) const { return fOutTracks[index]; }
74     GPUhd()  int NOutTrackHits() const { return  fNOutTrackHits; }
75         GPUhd()  void SetNOutTrackHits(int val) { fNOutTrackHits = val; }
76     GPUhd()  void SetOutTrackHit(int n, int val) { fOutTrackHits[n] = val; }
77     GPUhd()  int OutTrackHit( int i ) const { return  fOutTrackHits[i]; }
78
79   private:
80     AliHLTTPCCASliceOutput()
81         : fNTracks( 0 ), fNTrackClusters( 0 ), fTracks( 0 ),  fClusterId( 0 ), fClusterRow( 0 ), fClusterUnpackedYZ( 0 ), fClusterUnpackedX( 0 ),
82                 fMemorySize( 0 ), fNOutTracks(0), fNOutTrackHits(0), fOutTracks(0), fOutTrackHits(0) {}
83
84         ~AliHLTTPCCASliceOutput() {}
85     const AliHLTTPCCASliceOutput& operator=( const AliHLTTPCCASliceOutput& ) const { return *this; }
86     AliHLTTPCCASliceOutput( const AliHLTTPCCASliceOutput& );
87
88         GPUh() void SetMemorySize(size_t val) { fMemorySize = val; }
89
90     int fNTracks;                   // number of reconstructed tracks
91     int fNTrackClusters;            // total number of track clusters
92     AliHLTTPCCASliceTrack *fTracks; // pointer to reconstructed tracks
93     int   *fClusterId;              // pointer to cluster Id's ( packed slice, patch, cluster )
94     UChar_t  *fClusterRow;     // pointer to cluster row numbers
95     float2   *fClusterUnpackedYZ;    // pointer to cluster coordinates (temporary data, for debug proposes)
96     float    *fClusterUnpackedX;     // pointer to cluster coordinates (temporary data, for debug proposes)
97         size_t fMemorySize;                             // Amount of memory really used
98
99     // obsolete output
100
101         int fNOutTracks;
102         int fNOutTrackHits;
103     AliHLTTPCCAOutTrack *fOutTracks; // output array of the reconstructed tracks
104     int *fOutTrackHits;  // output array of ID's of the reconstructed hits
105
106         //Must be last element of this class, user has to make sure to allocate anough memory consecutive to class memory!
107         //This way the whole Slice Output is one consecutive Memory Segment
108     char fMemory[1]; // the memory where the pointers above point into
109
110 };
111
112 #endif //ALIHLTTPCCASLICEOUTPUT_H