]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/TPCLib/merger-ca/AliHLTTPCGMMerger.h
Declaration of fabs
[u/mrichter/AliRoot.git] / HLT / TPCLib / merger-ca / AliHLTTPCGMMerger.h
CommitLineData
6d869045 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 ALIHLTTPCGMMERGER_H
10#define ALIHLTTPCGMMERGER_H
11
12#include "AliHLTTPCCADef.h"
13#include "AliHLTTPCCAParam.h"
14#include "AliHLTTPCGMBorderTrack.h"
15#include "AliHLTTPCGMSliceTrack.h"
2fba026d 16#include "AliHLTTPCCAGPUTracker.h"
6d869045 17
18#if !defined(HLTCA_GPUCODE)
19#include <iostream>
93b25af6 20#include <cmath>
6d869045 21#endif //HLTCA_GPUCODE
22
23class AliHLTTPCCASliceTrack;
24class AliHLTTPCCASliceOutput;
25class AliHLTTPCGMCluster;
26class AliHLTTPCGMTrackParam;
27class AliHLTTPCGMMergedTrack;
28
29/**
30 * @class AliHLTTPCGMMerger
31 *
32 */
33class AliHLTTPCGMMerger
34{
35
36public:
37
38 AliHLTTPCGMMerger();
39 ~AliHLTTPCGMMerger();
40
41 void SetSliceParam( const AliHLTTPCCAParam &v ) { fSliceParam = v; }
42
43 void Clear();
44 void SetSliceData( int index, const AliHLTTPCCASliceOutput *SliceData );
45 bool Reconstruct();
46
47 Int_t NOutputTracks() const { return fNOutputTracks; }
48 const AliHLTTPCGMMergedTrack * OutputTracks() const { return fOutputTracks; }
49 const UInt_t * OutputClusterIds() const { return fOutputClusterIds; }
50
6d869045 51 const AliHLTTPCCAParam &SliceParam() const { return fSliceParam; }
2fba026d 52
53 void SetGPUTracker(AliHLTTPCCAGPUTracker* gpu) {fGPUTracker = gpu;}
54 void SetDebugLevel(int debug) {fDebugLevel = debug;}
55
56 float* PolinomialFieldBz() const {return((float*) fPolinomialFieldBz);}
57
58 int NClusters() const { return(fNClusters); }
59 int NOutputTrackClusters() const { return(fNOutputTrackClusters); }
60 float* ClusterX() const {return(fClusterX);}
61 float* ClusterY() const {return(fClusterY);}
62 float* ClusterZ() const {return(fClusterZ);}
63 float* ClusterAngle() const {return(fClusterAngle);}
64 UInt_t* ClusterRowType() const {return(fClusterRowType);}
6d869045 65
66private:
67
68 AliHLTTPCGMMerger( const AliHLTTPCGMMerger& );
69
70 const AliHLTTPCGMMerger &operator=( const AliHLTTPCGMMerger& ) const;
71
72 void MakeBorderTracks( int iSlice, int iBorder, AliHLTTPCGMBorderTrack B[], int &nB );
73
74 void MergeBorderTracks( int iSlice1, AliHLTTPCGMBorderTrack B1[], int N1,
75 int iSlice2, AliHLTTPCGMBorderTrack B2[], int N2 );
76
77 static bool CompareTrackParts( const AliHLTTPCGMSliceTrack *t1, const AliHLTTPCGMSliceTrack *t2 ){
e4818148 78 //return (t1->X() > t2->X() );
79 return (fabs(t1->OrigTrack()->Cluster(0).GetX() - t2->OrigTrack()->Cluster(t2->NClusters() - 1).GetX()) <
80 fabs(t2->OrigTrack()->Cluster(0).GetX() - t1->OrigTrack()->Cluster(t1->NClusters() - 1).GetX()));
81 }
82
83 static int CompareClusterIds(const void* a, const void* b) {
84 return(((int2*)a)->y < ((int2*)b)->y ? 1 : -1);
6d869045 85 }
86
87 void ClearMemory();
88 bool AllocateMemory();
89 void UnpackSlices();
90 void MergeWithingSlices();
91 void MergeSlices();
92 void CollectMergedTracks();
93 void Refit();
94
95 static const int fgkNSlices = 36; //* N slices
96 int fNextSliceInd[fgkNSlices];
97 int fPrevSliceInd[fgkNSlices];
98
99 AliHLTTPCCAParam fSliceParam; //* slice parameters (geometry, calibr, etc.)
100 const AliHLTTPCCASliceOutput *fkSlices[fgkNSlices]; //* array of input slice tracks
101
102 Int_t fNOutputTracks;
2fba026d 103 Int_t fNOutputTrackClusters;
6d869045 104 AliHLTTPCGMMergedTrack *fOutputTracks; //* array of output merged tracks
105 UInt_t * fOutputClusterIds;
106
107 AliHLTTPCGMSliceTrack *fSliceTrackInfos; //* additional information for slice tracks
108 int fSliceTrackInfoStart[fgkNSlices]; //* slice starting index in fTrackInfos array;
109 int fSliceNTrackInfos[fgkNSlices]; //* N of slice track infos in fTrackInfos array;
e4818148 110 int fSliceTrackGlobalInfoStart[fgkNSlices]; //* Same for global tracks
111 int fSliceNGlobalTrackInfos[fgkNSlices]; //* Same for global tracks
6d869045 112 int fMaxSliceTracks; // max N tracks in one slice
113 float *fClusterX; // cluster X
114 float *fClusterY; // cluster Y
115 float *fClusterZ; // cluster Z
116 UInt_t *fClusterRowType; // cluster row type
117 float *fClusterAngle; // angle
118 AliHLTTPCGMBorderTrack *fBorderMemory; // memory for border tracks
119 AliHLTTPCGMBorderTrack::Range *fBorderRangeMemory; // memory for border tracks
2fba026d 120
121 AliHLTTPCCAGPUTracker* fGPUTracker;
122 int fDebugLevel;
123
124 int fNClusters; //Total number of incoming clusters
125
126 float fPolinomialFieldBz[6]; // field coefficients
6d869045 127};
128
129#endif //ALIHLTTPCCAMERGER_H