]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/TPCLib/tracking-ca/AliHLTTPCCATracker.h
coverity warning 10075 fixed
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCATracker.h
index e748ea2c778f1c896829bcb40e10cc3c9d7fce01..a2f0779cbb748443bd9d06adc80b00bf3432544e 100644 (file)
 
 
 #include "AliHLTTPCCADef.h"
+#include "AliHLTTPCCAGPUConfig.h"
 #include "AliHLTTPCCAParam.h"
-#include "AliHLTTPCCARow.h"
-#include "AliHLTTPCCAHit.h"
 #include <iostream>
+#include "AliHLTTPCCAHitId.h"
+#include "AliHLTTPCCASliceData.h"
+#include "AliHLTTPCCASliceOutput.h"
+#include "AliHLTTPCCATrackletConstructor.h"
+#include "AliHLTTPCCATracklet.h"
 
 class AliHLTTPCCATrack;
-class AliHLTTPCCAOutTrack;
 class AliHLTTPCCATrackParam;
-class AliHLTTPCCATracklet;
-class AliHLTTPCCASliceOutput;
+class AliHLTTPCCAClusterData;
+class AliHLTTPCCARow;
 
 /**
  * @class AliHLTTPCCATracker
@@ -35,152 +38,308 @@ class AliHLTTPCCASliceOutput;
  * The class is under construction.
  *
  */
+
+class AliHLTTPCCAClusterData;
+
 class AliHLTTPCCATracker
 {
   public:
 
-#if !defined(HLTCA_GPUCODE)
-    AliHLTTPCCATracker();
-    AliHLTTPCCATracker( const AliHLTTPCCATracker& );
-    AliHLTTPCCATracker &operator=( const AliHLTTPCCATracker& );
-
-    GPUd() ~AliHLTTPCCATracker();
+  AliHLTTPCCATracker()
+    :
+#ifdef HLTCA_STANDALONE
+      fStageAtSync( NULL ),
+         fLinkTmpMemory( NULL ),
 #endif
-
-    GPUd() void Initialize( const AliHLTTPCCAParam &param );
-
-    GPUd() void StartEvent();
-
-    GPUd() void ReadEvent( const int *RowFirstHit, const int *RowNHits, const float *X, const float *Y, const float *Z, int NHits );
-
-    GPUd() void SetupRowData();
-
-    void Reconstruct();
-    void WriteOutput();
-
-    GPUd() void GetErrors2( int iRow,  const AliHLTTPCCATrackParam &t, float &Err2Y, float &Err2Z ) const;
-    GPUd() void GetErrors2( int iRow, float z, float sinPhi, float cosPhi, float DzDs, float &Err2Y, float &Err2Z ) const;
-
-    GPUhd() static int IRowIHit2ID( int iRow, int iHit ) {
-      return ( iHit << 8 ) + iRow;
-    }
-    GPUhd() static int ID2IRow( int HitID ) {
-      return ( HitID % 256 );
-    }
-    GPUhd() static int ID2IHit( int HitID ) {
-      return ( HitID >> 8 );
-    }
-
-    //GPUhd() AliHLTTPCCAHit &ID2Hit( int HitID ) {
-    //return fHits[fRows[HitID%256].FirstHit() + (HitID>>8)];
-    //}
-    GPUhd() const AliHLTTPCCARow &ID2Row( int HitID ) const {
-      return fRows[HitID%256];
-    }
-
-    void FitTrack( AliHLTTPCCATrack &track, float *t0 = 0 ) const;
-    void FitTrackFull( AliHLTTPCCATrack &track, float *t0 = 0 ) const;
-    GPUhd() void SetPointersCommon();
-    GPUhd() void SetPointersHits( int MaxNHits );
-    GPUhd() void SetPointersTracks( int MaxNTracks, int MaxNHits );
-
+         fParam(),
+      fOutputControl(),
+      fClusterData( 0 ),
+      fData(),
+      fIsGPUTracker( false ),
+      fGPUDebugLevel( 0 ),
+      fGPUDebugOut( 0 ),
+      fRowStartHitCountOffset( NULL ),
+      fTrackletTmpStartHits( NULL ),
+      fGPUTrackletTemp( NULL ),
+      fRowBlockTracklets( NULL ),
+      fRowBlockPos( NULL ),
+      fBlockStartingTracklet( NULL ),
+      fGPUParametersConst(),
+      fCommonMem( 0 ),
+      fHitMemory( 0 ),
+      fHitMemorySize( 0 ),
+      fTrackletMemory( 0 ),
+      fTrackletMemorySize( 0 ),
+      fTrackMemory( 0 ),
+      fTrackMemorySize( 0 ),
+      fTrackletStartHits( 0 ),
+      fTracklets( 0 ),
+      fTrackletRowHits( NULL ),
+      fTracks( 0 ),
+      fTrackHits( 0 ),
+      fOutput( 0 )
+  {
+    // constructor
+    for( int i=0; i<10; i++ ) fTimers[i] = 0;
+    for( int i=0; i<16; i++ ) fPerfTimers[i] = 0;
+  }
+  ~AliHLTTPCCATracker();
+  
+  struct StructGPUParameters
+  {
+    StructGPUParameters() : fScheduleFirstDynamicTracklet( 0 ), fGPUError( 0 ) {}
+    int fScheduleFirstDynamicTracklet;         //Last Tracklet with fixed position in sheduling
+    int fGPUError;                                                     //Signalizes error on GPU during GPU Reconstruction, kind of return value
+  };
+  
+  struct StructGPUParametersConst
+  {
+    StructGPUParametersConst() : fGPUFixedBlockCount( 0 ), fGPUiSlice( 0 ), fGPUnSlices( 0 ) {}
+    int fGPUFixedBlockCount;                           //Count of blocks that is used for this tracker in fixed schedule situations
+    int fGPUiSlice;                                                    // slice number processed by running GPU MP
+    int fGPUnSlices;                                           // n of slices to be processed in parallel
+  };
+  
+  struct commonMemoryStruct
+  {
+    commonMemoryStruct() : fNTracklets( 0 ), fNTracks( 0 ), fNTrackHits( 0 ), fGPUParameters() {}
+    int fNTracklets;     // number of tracklets
+    int fNTracks;            // number of reconstructed tracks
+    int fNTrackHits;           // number of track hits
+    StructGPUParameters fGPUParameters; // GPU parameters
+  };
+  
+  void Initialize( const AliHLTTPCCAParam &param );
+  
+  void StartEvent();
+  
+  int CheckEmptySlice() const;
+  void WriteOutput();
+  
+#if !defined(HLTCA_GPUCODE)
+  void Reconstruct();
+#endif //!HLTCA_GPUCODE
+  
+  //Make Reconstruction steps directly callable (Used for GPU debugging)
+  void RunNeighboursFinder();
+  void RunNeighboursCleaner();
+  void RunStartHitsFinder();
+  void RunTrackletConstructor();
+  void RunTrackletSelector();
+  
+  //GPU Tracker Interface
+  void SetGPUTracker();
+  void SetGPUDebugLevel(int Level, std::ostream *NewDebugOut = NULL) {fGPUDebugLevel = Level;if (NewDebugOut) fGPUDebugOut = NewDebugOut;}
+  
+  char* SetGPUTrackerCommonMemory(char* const pGPUMemory);
+  char* SetGPUTrackerHitsMemory(char* pGPUMemory, int MaxNHits);
+  char* SetGPUTrackerTrackletsMemory(char* pGPUMemory, int MaxNTracklets, int constructorBlockCount);
+  char* SetGPUTrackerTracksMemory(char* pGPUMemory, int MaxNTracks, int MaxNHits );
+  
+  //Debugging Stuff
+  void DumpSliceData(std::ostream &out);       //Dump Input Slice Data
+  void DumpLinks(std::ostream &out);           //Dump all links to file (for comparison after NeighboursFinder/Cleaner)
+  void DumpStartHits(std::ostream &out);       //Same for Start Hits
+  void DumpHitWeights(std::ostream &out); //....
+  void DumpTrackHits(std::ostream &out);       //Same for Track Hits
+  void DumpTrackletHits(std::ostream &out);    //Same for Track Hits
+  
+  GPUd() void GetErrors2( int iRow,  const AliHLTTPCCATrackParam &t, float &Err2Y, float &Err2Z ) const;
+  GPUd() void GetErrors2( int iRow, float z, float sinPhi, float cosPhi, float DzDs, float &Err2Y, float &Err2Z ) const;
+  
+  void FitTrack( const AliHLTTPCCATrack &track, float *t0 = 0 ) const;
+  void FitTrackFull( const AliHLTTPCCATrack &track, float *t0 = 0 ) const;
+  
+  void SetupCommonMemory();
+  void SetPointersHits( int MaxNHits );
+  void SetPointersTracklets ( int MaxNTracklets );
+  void SetPointersTracks( int MaxNTracks, int MaxNHits );
+  size_t SetPointersSliceData(const AliHLTTPCCAClusterData *data, bool allocate = false) { return(fData.SetPointers(data, allocate)); }
+  
+  void SetOutput( AliHLTTPCCASliceOutput** out ) { fOutput = out; }
+  
+  void ReadEvent( AliHLTTPCCAClusterData *clusterData );
+  
 #if !defined(HLTCA_GPUCODE)
-    GPUh() void WriteEvent( std::ostream &out );
-    GPUh() void ReadEvent( std::istream &in );
-    GPUh() void WriteTracks( std::ostream &out ) ;
-    GPUh() void ReadTracks( std::istream &in );
+  GPUh() void WriteEvent( std::ostream &out );
+  GPUh() void WriteTracks( std::ostream &out ) ;
+  GPUh() void ReadTracks( std::istream &in );
+#endif //!HLTCA_GPUCODE
+  
+  GPUhd() const AliHLTTPCCAParam &Param() const { return fParam; }
+  GPUhd() void SetParam( const AliHLTTPCCAParam &v ) { fParam = v; }
+  
+  GPUhd() const AliHLTTPCCASliceOutput::outputControlStruct* OutputControl() const { return fOutputControl; }  
+  GPUh() void SetOutputControl( AliHLTTPCCASliceOutput::outputControlStruct* const val)        { fOutputControl = val; }
+
+  GPUhd() AliHLTTPCCAClusterData *ClusterData() const { return fClusterData; }
+  GPUhd() const AliHLTTPCCASliceData &Data() const { return fData; }
+  
+  GPUh() void ClearSliceDataHitWeights() {fData.ClearHitWeights();}
+  
+  GPUhd() const AliHLTTPCCARow &Row( int rowIndex ) const { return fData.Row( rowIndex ); }
+  GPUh() const AliHLTTPCCARow &Row( const AliHLTTPCCAHitId &HitId ) const { return fData.Row( HitId.RowIndex() ); }
+  
+  GPUhd() double Timer( int i ) const { return fTimers[i]; }
+  GPUhd() void SetTimer( int i, double v ) { fTimers[i] = v; }
+  
+  GPUhd() int NHitsTotal() const { return fData.NumberOfHits(); }
+  
+  GPUd() void SetHitLinkUpData( const AliHLTTPCCARow &row, int hitIndex, short v ) { fData.SetHitLinkUpData( row, hitIndex, v ); }
+  GPUd() void SetHitLinkDownData( const AliHLTTPCCARow &row, int hitIndex, short v ) { fData.SetHitLinkDownData( row, hitIndex, v ); }
+  GPUd() short HitLinkUpData( const AliHLTTPCCARow &row, int hitIndex ) const { return fData.HitLinkUpData( row, hitIndex ); }
+  GPUd() short HitLinkDownData( const AliHLTTPCCARow &row, int hitIndex ) const { return fData.HitLinkDownData( row, hitIndex ); }
+  
+  GPUd() const ushort2 *HitData( const AliHLTTPCCARow &row ) const { return fData.HitData(row); }
+  GPUd() const short_v *HitLinkUpData  ( const AliHLTTPCCARow &row ) const { return fData.HitLinkUpData(row); }
+  GPUd() const short_v *HitLinkDownData( const AliHLTTPCCARow &row ) const { return fData.HitLinkDownData(row); }
+  GPUd() const ushort_v *FirstHitInBin( const AliHLTTPCCARow &row ) const { return fData.FirstHitInBin(row); }
+  
+  GPUd() int FirstHitInBin( const AliHLTTPCCARow &row, int binIndex ) const { return fData.FirstHitInBin( row, binIndex ); }
+  
+  GPUd() unsigned short HitDataY( const AliHLTTPCCARow &row, int hitIndex ) const {
+    return fData.HitDataY( row, hitIndex );
+  }
+  GPUd() unsigned short HitDataZ( const AliHLTTPCCARow &row, int hitIndex ) const {
+    return fData.HitDataZ( row, hitIndex );
+  }
+  GPUd() ushort2 HitData( const AliHLTTPCCARow &row, int hitIndex ) const {
+    return fData.HitData( row, hitIndex );
+  }
+  
+  GPUhd() int HitInputID( const AliHLTTPCCARow &row, int hitIndex ) const { return fData.ClusterDataIndex( row, hitIndex ); }
+  
+  /**
+   * The hit weight is used to determine whether a hit belongs to a certain tracklet or another one
+   * competing for the same hit. The tracklet that has a higher weight wins. Comparison is done
+   * using the the number of hits in the tracklet (the more hits it has the more it keeps). If
+   * tracklets have the same number of hits then it doesn't matter who gets it, but it should be
+   * only one. So a unique number (row index is good) is added in the least significant part of
+   * the weight
+   */
+  GPUd() static int CalculateHitWeight( int NHits, float chi2, int ) {
+    const float chi2_suppress = 6.f;
+    float weight = (((float) NHits * (chi2_suppress - chi2 / 500.f)) * (1e9 / chi2_suppress / 160.));
+    if (weight < 0 || weight > 2e9) weight = 0;
+    return ( (int) weight );
+    //return( (NHits << 16) + num);
+  }
+  GPUd() void MaximizeHitWeight( const AliHLTTPCCARow &row, int hitIndex, int weight ) {
+    fData.MaximizeHitWeight( row, hitIndex, weight );
+  }
+  GPUd() int HitWeight( const AliHLTTPCCARow &row, int hitIndex ) const {
+    return fData.HitWeight( row, hitIndex );
+  }
+  
+  GPUhd() int *NTracklets() const { return &fCommonMem->fNTracklets; }
+  
+  GPUhd() const AliHLTTPCCAHitId &TrackletStartHit( int i ) const { return fTrackletStartHits[i]; }
+  GPUhd() AliHLTTPCCAHitId *TrackletStartHits() const { return fTrackletStartHits; }
+  GPUhd() AliHLTTPCCAHitId *TrackletTmpStartHits() const { return fTrackletTmpStartHits; }
+  GPUhd() const AliHLTTPCCATracklet &Tracklet( int i ) const { return fTracklets[i]; }
+  GPUhd() AliHLTTPCCATracklet  *Tracklets() const { return fTracklets;}
+  GPUhd() int* TrackletRowHits() const { return fTrackletRowHits; }
+
+  GPUhd() int *NTracks()  const { return &fCommonMem->fNTracks; }
+  GPUhd() AliHLTTPCCATrack *Tracks() const { return  fTracks; }
+  GPUhd() int *NTrackHits()  const { return &fCommonMem->fNTrackHits; }
+  GPUhd() AliHLTTPCCAHitId *TrackHits() const { return fTrackHits; }
+  
+  GPUhd() AliHLTTPCCASliceOutput** Output() const { return fOutput; }
+  
+  GPUh() commonMemoryStruct *CommonMemory() const {return(fCommonMem); }
+  GPUh() static  size_t CommonMemorySize() { return(sizeof(AliHLTTPCCATracker::commonMemoryStruct)); }
+  GPUh() char* HitMemory() const {return(fHitMemory); }
+  GPUh() size_t HitMemorySize() const {return(fHitMemorySize); }
+  GPUh() char* TrackletMemory() {return(fTrackletMemory); }
+  GPUh() size_t TrackletMemorySize() const {return(fTrackletMemorySize); }
+  GPUh() char* TrackMemory() {return(fTrackMemory); }
+  GPUh() size_t TrackMemorySize() const {return(fTrackMemorySize); }
+  GPUhd() AliHLTTPCCARow* SliceDataRows() const {return(fData.Rows()); }
+  
+  GPUhd() uint3* RowStartHitCountOffset() const {return(fRowStartHitCountOffset);}
+  GPUhd() AliHLTTPCCATrackletConstructor::AliHLTTPCCAGPUTempMemory* GPUTrackletTemp() const {return(fGPUTrackletTemp);}
+  GPUhd() int* RowBlockTracklets(int reverse, int iRowBlock) const {return(&fRowBlockTracklets[(reverse * ((fParam.NRows() / HLTCA_GPU_SCHED_ROW_STEP) + 1) + iRowBlock) * fCommonMem->fNTracklets]);}
+  GPUhd() int* RowBlockTracklets() const {return(fRowBlockTracklets);}
+  GPUhd() int4* RowBlockPos(int reverse, int iRowBlock) const {return(&fRowBlockPos[reverse * ((fParam.NRows() / HLTCA_GPU_SCHED_ROW_STEP) + 1) + iRowBlock]);}
+  GPUhd() int4* RowBlockPos() const {return(fRowBlockPos);}
+  GPUhd() uint2* BlockStartingTracklet() const {return(fBlockStartingTracklet);}
+  GPUhd() StructGPUParameters* GPUParameters() const {return(&fCommonMem->fGPUParameters);}
+  GPUhd() StructGPUParametersConst* GPUParametersConst() {return(&fGPUParametersConst);}
+  GPUhd() void SetGPUTextureBase(char* val) { fData.SetGPUTextureBase(val); }
+  GPUh() void SetGPUSliceDataMemory(void* const pSliceMemory, void* const pRowMemory) { fData.SetGPUSliceDataMemory(pSliceMemory, pRowMemory); }
+
+  GPUh() unsigned long long int* PerfTimer(unsigned int i) {return &fPerfTimers[i]; }
+
+#ifdef HLTCA_STANDALONE
+  GPUhd() char* StageAtSync() {return(fStageAtSync);}
+  GPUh() const char* LinkTmpMemory() const {return(fLinkTmpMemory);}
 #endif
 
-    GPUhd() const AliHLTTPCCAParam &Param() const { return fParam; }
-    GPUhd() void SetParam( const AliHLTTPCCAParam &v ) { fParam = v; }
-
-    GPUhd() const AliHLTTPCCARow &Row( int i ) const { return fRows[i]; }
-    GPUhd() double Timer( int i ) const { return fTimers[i]; }
-    GPUhd() void SetTimer( int i, double v ) { fTimers[i] = v; }
-
-    GPUhd() int NHitsTotal() const { return fNHitsTotal;}
-
-    GPUhd() const char *InputEvent()    const { return fInputEvent; }
-    GPUhd() int  InputEventSize() const { return fInputEventSize; }
-
-    GPUhd() const uint4  *RowData()    const   { return fRowData; }
-    GPUhd() int  RowDataSize()  const { return fRowDataSize; }
-
-    GPUhd() int *HitInputIDs() const { return fHitInputIDs; }
-    GPUhd() int  *HitWeights() const { return fHitWeights; }
-
-    GPUhd() int  *NTracklets() const { return fNTracklets; }
-    GPUhd() int  *TrackletStartHits() const { return fTrackletStartHits; }
-    GPUhd() AliHLTTPCCATracklet  *Tracklets() const { return fTracklets;}
-
-    GPUhd() int *NTracks()  const { return fNTracks; }
-    GPUhd() AliHLTTPCCATrack *Tracks() const { return  fTracks; }
-    GPUhd() int *NTrackHits()  const { return fNTrackHits; }
-    GPUhd() int *TrackHits() const { return fTrackHits; }
-
-    GPUhd() const AliHLTTPCCASliceOutput * Output() const { return fOutput; }
-
-    GPUhd()  int *NOutTracks() const { return  fNOutTracks; }
-    GPUhd()  AliHLTTPCCAOutTrack *OutTracks() const { return  fOutTracks; }
-    GPUhd()  int *NOutTrackHits() const { return  fNOutTrackHits; }
-    GPUhd()  int *OutTrackHits() const { return  fOutTrackHits; }
-
-    GPUh() void SetCommonMemory( char * const mem ) { fCommonMemory = mem; }
-
-  private:
-
-    AliHLTTPCCAParam fParam; // parameters
-    AliHLTTPCCARow fRows[200];// array of hit rows
-    double fTimers[10]; // running CPU time for different parts of the algorithm
-
-    // event
-
-    int fNHitsTotal;// total number of hits in event
-
-    char *fCommonMemory; // common event memory
-    int   fCommonMemorySize; // size of the event memory [bytes]
-
-    char *fHitMemory; // event memory for hits
-    int   fHitMemorySize; // size of the event memory [bytes]
-
-    char *fTrackMemory; // event memory for tracks
-    int   fTrackMemorySize; // size of the event memory [bytes]
-
-    char *fInputEvent;     // input event
-    int   fInputEventSize; // size of the input event [bytes]
-
-    uint4  *fRowData;     // TPC rows: clusters, grid, links to neighbours
-    int   fRowDataSize; // size of the row data
-
-    int *fHitInputIDs; // cluster index in InputEvent
-    int *fHitWeights;  // the weight of the longest tracklet crossed the cluster
-
-    int *fNTracklets;     // number of tracklets
-    int *fTrackletStartHits;   // start hits for the tracklets
-    AliHLTTPCCATracklet *fTracklets; // tracklets
-
-    //
-    int *fNTracks;            // number of reconstructed tracks
-    AliHLTTPCCATrack *fTracks;  // reconstructed tracks
-    int *fNTrackHits;           // number of track hits
-    int *fTrackHits;          // array of track hit numbers
-
-    // output
-
-    AliHLTTPCCASliceOutput *fOutput;
-
-    // obsolete output
-
-    int *fNOutTracks; // number of tracks in fOutTracks array
-    AliHLTTPCCAOutTrack *fOutTracks; // output array of the reconstructed tracks
-    int *fNOutTrackHits;  // number of hits in fOutTrackHits array
-    int *fOutTrackHits;  // output array of ID's of the reconstructed hits
-
-    //temporary
-
-    int *fTmpHitInputIDs; // temporary step
-
+private:
+       //Temporary Variables for Standalone measurements
+#ifdef HLTCA_STANDALONE
+  char* fStageAtSync;                          //Pointer to array storing current stage for every thread at every sync point
+  char *fLinkTmpMemory;        //tmp memory for hits after neighbours finder
+#endif
+  
+  AliHLTTPCCAParam fParam; // parameters
+  double fTimers[10]; // timers
+  unsigned long long int fPerfTimers[16]; // running CPU time for different parts of the algorithm
+  void StandalonePerfTime(int i);
+  
+  AliHLTTPCCASliceOutput::outputControlStruct* fOutputControl; // output control
+  
+  /** A pointer to the ClusterData object that the SliceData was created from. This can be used to
+   * merge clusters from inside the SliceTracker code and recreate the SliceData. */
+  AliHLTTPCCAClusterData *fClusterData; // ^
+  AliHLTTPCCASliceData fData; // The SliceData object. It is used to encapsulate the storage in memory from the access
+  
+  bool fIsGPUTracker; // is it GPU tracker object
+  int fGPUDebugLevel; // debug level
+  std::ostream *fGPUDebugOut; // debug stream
+  
+  //GPU Temp Arrays
+  uint3* fRowStartHitCountOffset;                              //Offset, length and new offset of start hits in row
+  AliHLTTPCCAHitId *fTrackletTmpStartHits;     //Unsorted start hits
+  AliHLTTPCCATrackletConstructor::AliHLTTPCCAGPUTempMemory *fGPUTrackletTemp;  //Temp Memory for GPU Tracklet Constructor
+  int* fRowBlockTracklets;                                     //Reference which tracklet is processed in which rowblock next
+  int4* fRowBlockPos;                                                  //x is last tracklet to be processed, y is last tracklet already processed, z is last tracklet to be processed in next iteration, w is initial x value to check if tracklet must be initialized  
+  uint2* fBlockStartingTracklet;                       // First Tracklet that is to be processed by current GPU MP
+
+  StructGPUParametersConst fGPUParametersConst; // Parameters for GPU if this is a GPU tracker
+
+  // event
+  
+  commonMemoryStruct *fCommonMem; // common event memory
+  
+  char *fHitMemory; // event memory for hits
+  size_t   fHitMemorySize; // size of the event memory for hits [bytes]
+
+  char *fTrackletMemory;       //event memory for tracklets
+  size_t fTrackletMemorySize; //size of the event memory for tracklets
+
+  char *fTrackMemory; // event memory for tracks
+  size_t   fTrackMemorySize; // size of the event memory for tracks [bytes]
+
+  AliHLTTPCCAHitId *fTrackletStartHits;   // start hits for the tracklets
+  AliHLTTPCCATracklet *fTracklets; // tracklets
+  int *fTrackletRowHits;                       //Hits for each Tracklet in each row
+
+  //
+  AliHLTTPCCATrack *fTracks;  // reconstructed tracks
+  AliHLTTPCCAHitId *fTrackHits;          // array of track hit numbers
+  
+  // output
+  
+  AliHLTTPCCASliceOutput **fOutput;            //address of pointer pointing to SliceOutput Object
+  
+  // disable copy
+  AliHLTTPCCATracker( const AliHLTTPCCATracker& );
+  AliHLTTPCCATracker &operator=( const AliHLTTPCCATracker& );
+  
+  static int StarthitSortComparison(const void*a, const void* b);
 };
 
 
-#endif
+#endif //ALIHLTTPCCATRACKER_H