3 #ifndef ALIHLTTPCTRACKGEOMETRY_H
4 #define ALIHLTTPCTRACKGEOMETRY_H
5 //* This file is property of and copyright by the ALICE HLT Project *
6 //* ALICE Experiment at CERN, All rights reserved. *
7 //* See cxx source for full Copyright notice *
9 /// @file AliHLTTPCTrackGeometry.h
10 /// @author Matthias Richter
12 /// @brief Desciption of a track by a sequence of track points
15 #include "AliHLTTrackGeometry.h"
18 class AliHLTGlobalBarrelTrack;
19 class AliHLTDataDeflater;
22 * @class AliHLTTPCTrackGeometry
23 * Description of tracks in the TPC geometry.
24 * This implementation describes track points of the track crossing with
25 * the pad-row plane (yz). The radial distance of the plane is the x coordinate.
27 * The 32bit ids of the planes follow the same coding as the TPC clusters.
28 * - bit 25-31: 7 bit slice number
29 * - bit 22-24: 3 bit partition number
30 * - bit 0-21: 22 bit row number
33 class AliHLTTPCTrackGeometry : public AliHLTTrackGeometry
36 /// standard constructor
37 AliHLTTPCTrackGeometry();
39 AliHLTTPCTrackGeometry(const AliHLTTPCTrackGeometry&);
40 /// assignment operator
41 AliHLTTPCTrackGeometry& operator=(const AliHLTTPCTrackGeometry&);
44 ~AliHLTTPCTrackGeometry();
46 /// alpha of the plane
47 virtual float GetPlaneAlpha(AliHLTUInt32_t planeId) const;
48 /// radial distance from global {0,0,0}
49 virtual float GetPlaneR(AliHLTUInt32_t planeId) const;
50 /// theta of the plane
51 virtual float GetPlaneTheta(AliHLTUInt32_t planeId) const ;
52 /// check bounds in u and v coordinate
53 virtual bool CheckBounds(AliHLTUInt32_t planeId, float u, float v) const;
57 /// calculate the track points, expects the global magnetic field to be initialized
58 virtual int CalculateTrackPoints(const AliHLTExternalTrackParam& track);
60 /// calculate the track points, expects the global magnetic field to be initialized
61 virtual int CalculateTrackPoints(AliHLTGlobalBarrelTrack& track);
63 /// find the track point which can be associated to a spacepoint with coordinates and id
64 virtual int FindMatchingTrackPoint(AliHLTUInt32_t spacepointId, float spacepoint[3], AliHLTUInt32_t& planeId);
66 /// register track points in the index grid
67 virtual int RegisterTrackPoints(AliHLTTrackGrid* pGrid) const;
69 /// fill track points to index grid
70 virtual int FillTrackPoints(AliHLTTrackGrid* pGrid) const;
72 virtual int Write(const AliHLTGlobalBarrelTrack& track,
73 AliHLTSpacePointContainer* pSpacePoints,
74 AliHLTDataDeflater* pDeflater,
75 AliHLTUInt8_t* outputPtr,
77 vector<AliHLTUInt32_t>* writtenClusterIds=NULL,
78 const char* option="") const;
80 virtual int WriteAssociatedClusters(AliHLTSpacePointContainer* pSpacePoints,
81 AliHLTDataDeflater* pDeflater,
82 vector<AliHLTUInt32_t>* writtenClusterIds=NULL,
83 const char* option="") const;
85 int InitDriftTimeTransformation(float mA, float nA, float mC, float nC) {
86 fDriftTimeFactorA=mA; fDriftTimeOffsetA=nA; fDriftTimeFactorC=mC; fDriftTimeOffsetC=nC; return 0;
89 struct AliHLTTPCTrackBlock {
90 AliHLTUInt16_t fSize; //! size in byte of the complete track block
91 AliHLTUInt8_t fSlice; //! slice number -> rotation angle of local coordinates
92 AliHLTUInt8_t fReserved; //! reserved field to fill 32bit
93 AliHLTFloat32_t fX; //! first X
94 AliHLTFloat32_t fY; //! first Y
95 AliHLTFloat32_t fZ; //! first Z
96 AliHLTFloat32_t fSinPsi; // local sine of the track momentum azimuthal angle
97 AliHLTFloat32_t fTgl; // tangent of the track momentum dip angle
98 AliHLTFloat32_t fq1Pt; // 1/pt (1/(GeV/c))
101 /// create a collection of all points
102 virtual AliHLTSpacePointContainer* ConvertToSpacePoints() const {return ConvertToSpacePoints(false);}
103 virtual AliHLTSpacePointContainer* ConvertToSpacePoints(bool bAssociated) const;
105 /// get raw track point of id
106 const AliHLTTrackPoint* GetRawTrackPoint(AliHLTUInt32_t id) const;
107 /// get raw track point of id
108 AliHLTTrackPoint* GetRawTrackPoint(AliHLTUInt32_t id);
110 int FillRawResidual(int coordinate, TH2* histo, AliHLTSpacePointContainer* points) const;
112 const vector<AliHLTTrackGeometry::AliHLTTrackPoint>& GetRawPoints() const {return fRawTrackPoints;}
115 /// calculate the track points, expects the global magnetic field to be initialized
116 int CalculateTrackPoints(AliHLTGlobalBarrelTrack& track, int firstpadrow, int step);
118 vector<AliHLTTrackPoint> fRawTrackPoints; // list of points in raw coordinates
120 float fDriftTimeFactorA; //! drift time A side
121 float fDriftTimeOffsetA; //! drift time A side
122 float fDriftTimeFactorC; //! drift time C side
123 float fDriftTimeOffsetC; //! drift time C side
125 ClassDef(AliHLTTPCTrackGeometry, 0)