1 #ifndef ALIFLATESDTRACK_H
2 #define ALIFLATESDTRACK_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice *
6 * Primary Authors : Sergey Gorbunov, Jochen Thaeder, Chiara Zampolli */
9 * See implementation file for documentation
13 Cp - Track parameters constrained to the primary vertex
14 Ip - Track parameters estimated at the inner wall of TPC
15 TPCInner - Track parameters estimated at the inner wall of TPC using the TPC stand-alone
16 Op - Track parameters estimated at the point of maximal radial coordinate reached during the tracking
21 #include "AliVVtrack.h"
22 #include "AliFlatExternalTrackParam.h"
25 class AliExternalTrackParam;
27 class AliFlatESDTrack :public AliVVtrack {
29 // --------------------------------------------------------------------------------
30 // -- Constructor / Destructors
35 // --------------------------------------------------------------------------------
38 Int_t Set( const AliESDtrack* track );
40 Int_t SetExternalTrackParam(
41 const AliExternalTrackParam* refittedParam,
42 const AliExternalTrackParam* innerParam,
43 const AliExternalTrackParam* innerTPC,
44 const AliExternalTrackParam* outerParam,
45 const AliExternalTrackParam* constrainedParam,
46 const AliExternalTrackParam* outerITSParam
49 void SetNumberOfITSClusters( Int_t nCl ) { fNITSClusters = nCl; }
52 // --------------------------------------------------------------------------------
54 AliFlatExternalTrackParam* GetTrackParamRefitted(){
55 return (fTrackParamMask & 0x1) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) : NULL;
58 AliFlatExternalTrackParam* GetTrackParamIp() {
59 return (fTrackParamMask & 0x2) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x1) : NULL;
62 AliFlatExternalTrackParam* GetTrackParamTPCInner() {
63 return (fTrackParamMask & 0x4) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x3) : NULL;
66 AliFlatExternalTrackParam* GetTrackParamOp() {
67 return (fTrackParamMask & 0x8) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x7) : NULL;
70 AliFlatExternalTrackParam* GetTrackParamCp() {
71 return (fTrackParamMask & 0x10) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0xF) : NULL;
74 AliFlatExternalTrackParam* GetTrackParamITSOut() {
75 return (fTrackParamMask & 0x20) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x1F) : NULL;
78 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
80 Int_t GetNumberOfTPCClusters() {
84 Int_t GetNumberOfITSClusters() {
88 // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
90 AliFlatESDTrack *GetNextTrack() {return reinterpret_cast<AliFlatESDTrack*>(fContent+fContentSize);}
92 // --------------------------------------------------------------------------------
95 static size_t EstimateSize(){
96 return sizeof(AliFlatESDTrack) + 6*sizeof(AliFlatExternalTrackParam);
99 size_t GetSize() { return fContent - reinterpret_cast<Byte_t*>(this) + fContentSize; }
102 AliFlatESDTrack(const AliFlatESDTrack&);
103 AliFlatESDTrack& operator=(const AliFlatESDTrack&);
105 Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag);
107 static UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
109 // --------------------------------------------------------------------------------
110 // -- Fixed size member objects
111 // -> Try to align in memory
113 Byte_t fTrackParamMask; // Bit mask specfifying which ExternalTrackParam are present
114 Int_t fNTPCClusters; // Number of TPC clusters in track
115 Int_t fNITSClusters; // Number of ITS clusters in track
118 ULong64_t fContentSize; // Size of this object
120 // --------------------------------------------------------------------------------
121 // -- Variable Size Object
122 Byte_t fContent[1]; // Variale size object, which contains all data
126 inline UInt_t AliFlatESDTrack::CountBits(Byte_t field, UInt_t mask) {
127 // Count bits in field
128 UInt_t count = 0, reg = field & mask;
129 for (; reg; count++) reg &= reg - 1;