1 #ifndef ALITRDONLINETRACKINGDATACONTAINER_H
2 #define ALITRDONLINETRACKINGDATACONTAINER_H
4 #include "AliESDTrdTracklet.h"
5 #include "AliESDTrdTrack.h"
6 #include "AliHLTLogging.h"
8 class AliTRDonlineTrackingDataContainer : public AliHLTLogging {
10 AliTRDonlineTrackingDataContainer();
11 AliTRDonlineTrackingDataContainer(const AliTRDonlineTrackingDataContainer& cont);
12 ~AliTRDonlineTrackingDataContainer();
14 void SetLogPrefix(const char* prefix) { *fLogPrefix = prefix; };
15 void SetGtuPtMultiplier(Double_t mult) { fGtuPtMultiplier = mult; }
16 void SetGtuPtMultiplierFromMagField(Double_t magField);
18 void Clear(const Option_t* = "");
19 Int_t AddTracklet(UInt_t HCId, UInt_t trackletWord);
20 Int_t AddTracklet(const AliESDTrdTracklet* tracklet);
21 Int_t AddTrack(UShort_t stack, ULong64_t trackWord, ULong64_t extTrackWord, const UInt_t trackletWords[6], Int_t addInfo = -1);
22 Int_t AddTrack(const AliESDTrdTrack* track, Int_t addInfo = -1);
24 void SetTrackAddInfo(UShort_t stack, UInt_t trackIndex, Int_t addInfo);
25 void SetSectorTrgWord(UShort_t sector, UInt_t trgWord) { fSectorTrgWords[sector] = trgWord; };
26 void SetStackTrgWord(UShort_t sector, UShort_t stack, ULong64_t trgWord) { fStackTrgWords[sector][stack] = trgWord; };
28 Int_t GetNumTracklets();
29 Int_t GetNumTracklets(UInt_t det);
31 Int_t GetNumTracks(UShort_t stack);
33 Int_t GetTrackletHCId(UInt_t det, UInt_t trackletIndex) { return fTrackletHCId[det][trackletIndex]; };
34 Int_t GetTrackletBinY(UInt_t det, UInt_t trackletIndex);
35 Int_t GetTrackletBinDy(UInt_t det, UInt_t trackletIndex);
36 Int_t GetTrackletBinZ(UInt_t det, UInt_t trackletIndex);
37 Int_t GetTrackletPID(UInt_t det, UInt_t trackletIndex);
38 Float_t GetTrackletLocalY(UInt_t det, UInt_t trackletIndex);
40 AliESDTrdTracklet* GetTracklet(UInt_t det, UInt_t trackletIndex);
41 AliESDTrdTrack* GetTrack(UInt_t stack, UInt_t trackIndex, Bool_t constructTracklets = kTRUE);
42 Int_t GetTrackAddInfo(UShort_t stack, UInt_t trackIndex);
44 inline Int_t GetTrackLayerMask(UInt_t stack, UInt_t trackIndex){
45 return (fTrackWords[stack][trackIndex] >> 56) & 0x3f;
48 inline Int_t GetTrackA(UInt_t stack, UInt_t trackIndex){
49 return (((fTrackWords[stack][trackIndex] >> 38) & 0x3ffff) ^ 0x20000) - 0x20000;
52 inline Int_t GetTrackPID(UInt_t stack, UInt_t trackIndex){
53 return fTrackWords[stack][trackIndex] & 0xff;
56 Double_t GetTrackPt(UInt_t stack, UInt_t trackIndex);
57 UShort_t GetTrackLayerNum(UInt_t stack, UInt_t trackIndex);
58 UInt_t GetTrackTrackletWord(UInt_t stack, UInt_t trackIndex, UShort_t layer);
59 Int_t GetTrackTrackletBinY(UInt_t stack, UInt_t trackIndex, UShort_t layer);
60 Float_t GetTrackTrackletLocalY(UInt_t stack, UInt_t trackIndex, UShort_t layer);
61 Int_t GetTrackTrackletBinZ(UInt_t stack, UInt_t trackIndex, UShort_t layer);
62 UShort_t GetTrackTrackletPID(UInt_t stack, UInt_t trackIndex, UShort_t layer);
64 UInt_t GetSectorTrgWord(UShort_t sector) { return fSectorTrgWords[sector]; };
65 ULong64_t GetStackTrgWord(UShort_t sector, UShort_t stack) { return fStackTrgWords[sector][stack]; };
66 UInt_t GetSectorTrgContribs(UShort_t sector) { return fSectorTrgWords[sector] & 0x3ff; };
67 Float_t GetTrackletStartTime(UShort_t sector, UShort_t stack) { return ((fStackTrgWords[sector][stack] >> 20) & 0x3ff)*1./125.; };
68 Float_t GetTrackletEndTime(UShort_t sector, UShort_t stack) { return ((fStackTrgWords[sector][stack] >> 10) & 0x3ff)*1./125.; };
69 Float_t GetTMUTrackingDoneTime(UShort_t sector, UShort_t stack) { return ((fStackTrgWords[sector][stack] >> 0) & 0x3ff)*1./50.; };
70 Float_t GetSMUTrackingDoneTime(UShort_t sector) { return ((fSectorTrgWords[sector] >> 12) & 0x3ff)*1./120.; };
72 Bool_t Compress(void* &buffer, UInt_t &sizeInBytes);
73 Bool_t Decompress(const void* buffer, UInt_t sizeInBytes, Bool_t cumulative = kFALSE, Bool_t verbose = kFALSE);
75 void PrintBuffer(const void* buffer, UInt_t sizeInBytes, const char* identifier);
76 void PrintSummary(const char* identifier = "none");
80 AliTRDonlineTrackingDataContainer& operator=(const AliTRDonlineTrackingDataContainer &rhs); // not implemented
82 static const unsigned int fgkLeadingMagicConst = 0x1234face; //! header magic constant
83 static const unsigned int fgkHeaderTypeData = 0xe; //! header type constant
84 static const unsigned int fgkHeaderTypeStack = 0xa; //! header type constant
85 static const unsigned int fgkHeaderTypeTracklet = 0xb; //! header type constant
86 static const unsigned int fgkHeaderTypeTrack = 0xc; //! header type constant
87 static const unsigned int fgkHeaderTypeGtu = 0xd; //! header type constant
88 static const unsigned int fgkCrosscheckSeed = 0xc5f3a19b; //! crosscheck seed constant
89 static const unsigned int fgkInvalidTrackletWord = 0x10001000; //! marking invalid tracklet word
90 static const unsigned int fgkTrailingMagicConst = 0x5678beaf; //! trailer magic constant
92 static const unsigned int fgkNumLayers = 6; //! number of TRD layers
93 static const unsigned int fgkNumStacks = 90; //! number of TRD stacks
94 static const unsigned int fgkNumChambers = 540; //! number of TRD chambers
95 static const unsigned int fgkNumStacksPerSector = 5; //! number of TRD stacks per sector
96 static const unsigned int fgkNumSectors = 18; //! number of TRD sectors
97 static const unsigned int fgkMaxTrackletsPerChamber = 1024; //! maximum number of tracklets per chamber
98 static const unsigned int fgkMaxTracksPerStack = 32; //! maximum number of tracks per stack
99 static const Float_t fgkBinWidthY; //! geometric TRD constant
101 Double_t fGtuPtMultiplier; //! factor for sign correction
102 Bool_t fStoreGtuInfo; //! controls storage of GTU header info upon compress
103 TString* fLogPrefix; //! log message prefix
105 UInt_t fNumTracklets[fgkNumChambers]; //! number of tracklets by chamber
106 UInt_t fTrackletWords[fgkNumChambers][fgkMaxTrackletsPerChamber]; //! tracklet words by chamber
107 UInt_t fTrackletHCId[fgkNumChambers][fgkMaxTrackletsPerChamber]; //! half-chambeer to tracklets
109 UInt_t fNumTracks[fgkNumStacks]; //! number of tracks by stack
110 ULong64_t fTrackWords[fgkNumStacks][fgkMaxTracksPerStack]; //! track words by stack
111 ULong64_t fTrackExtWords[fgkNumStacks][fgkMaxTracksPerStack]; //! extended track words by stack
112 UInt_t fTrackTrackletWords[fgkNumStacks][fgkMaxTracksPerStack][fgkNumLayers]; //! tracklet words by track and stack
113 Int_t fTrackAddInfo[fgkNumStacks][fgkMaxTracksPerStack]; //! additional info to tracks by stack
115 UInt_t fSectorTrgWords[fgkNumSectors]; //! sector trigger words
116 ULong64_t fStackTrgWords[fgkNumSectors][fgkNumStacksPerSector]; //! stack trigger words (=TMU tracking done words)
118 UInt_t DataWordsNeeded();
119 UInt_t MakeDataHeader();
120 UInt_t MakeStackHeader(UShort_t stack, Bool_t trackletsPresent,
121 Bool_t tracksPresent, UInt_t size);
122 UInt_t MakeTrackletHeader(UShort_t det);
123 UInt_t MakeTrackHeader(UShort_t stack);
124 UInt_t MakeGtuHeader(Bool_t storeInfo);
126 Int_t StackFromStackHeader(UInt_t stackHeader);
127 UInt_t SizeFromStackHeader(UInt_t stackHeader);
128 Int_t HCIdFromTrackletHeader(UInt_t trackletHeader);
129 Bool_t StoreGtuInfoFromDataHeader(UInt_t dataHeader);
130 Bool_t GtuInfoPresentFromGtuHeader(UInt_t gtuHeader);
132 UShort_t ExtractTrackLayerMask(ULong64_t trackWord);
133 UShort_t ExtractTrackPID(ULong64_t trackWord);
135 ClassDef(AliTRDonlineTrackingDataContainer, 1);