]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/TRD/AliTRDonlineTrackingDataContainer.h
Update master to aliroot
[u/mrichter/AliRoot.git] / HLT / TRD / AliTRDonlineTrackingDataContainer.h
CommitLineData
c7b7f445 1#ifndef ALITRDONLINETRACKINGDATACONTAINER_H
2#define ALITRDONLINETRACKINGDATACONTAINER_H
3
4#include "AliESDTrdTracklet.h"
5#include "AliESDTrdTrack.h"
6#include "AliHLTLogging.h"
7
8class AliTRDonlineTrackingDataContainer : public AliHLTLogging {
9 public:
10 AliTRDonlineTrackingDataContainer();
11 AliTRDonlineTrackingDataContainer(const AliTRDonlineTrackingDataContainer& cont);
12 ~AliTRDonlineTrackingDataContainer();
13
14 void SetLogPrefix(const char* prefix) { *fLogPrefix = prefix; };
6f7c6cc6 15 void SetGtuPtMultiplier(Double_t mult) { fGtuPtMultiplier = mult; }
16 void SetGtuPtMultiplierFromMagField(Double_t magField);
c7b7f445 17
18 void Clear(const Option_t* = "");
6f7c6cc6 19 Int_t AddTracklet(UInt_t HCId, UInt_t trackletWord);
c7b7f445 20 Int_t AddTracklet(const AliESDTrdTracklet* tracklet);
6f7c6cc6 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);
c7b7f445 23
6f7c6cc6 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; };
c7b7f445 27
28 Int_t GetNumTracklets();
6f7c6cc6 29 Int_t GetNumTracklets(UInt_t det);
c7b7f445 30 Int_t GetNumTracks();
6f7c6cc6 31 Int_t GetNumTracks(UShort_t stack);
c7b7f445 32
6f7c6cc6 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);
c7b7f445 39
6f7c6cc6 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);
c7b7f445 43
6f7c6cc6 44 inline Int_t GetTrackLayerMask(UInt_t stack, UInt_t trackIndex){
c7b7f445 45 return (fTrackWords[stack][trackIndex] >> 56) & 0x3f;
46 }
47
6f7c6cc6 48 inline Int_t GetTrackA(UInt_t stack, UInt_t trackIndex){
c7b7f445 49 return (((fTrackWords[stack][trackIndex] >> 38) & 0x3ffff) ^ 0x20000) - 0x20000;
50 }
51
6f7c6cc6 52 inline Int_t GetTrackPID(UInt_t stack, UInt_t trackIndex){
c7b7f445 53 return fTrackWords[stack][trackIndex] & 0xff;
54 }
55
6f7c6cc6 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);
63
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.; };
c7b7f445 71
72 Bool_t Compress(void* &buffer, UInt_t &sizeInBytes);
6f7c6cc6 73 Bool_t Decompress(const void* buffer, UInt_t sizeInBytes, Bool_t cumulative = kFALSE, Bool_t verbose = kFALSE);
c7b7f445 74
6f7c6cc6 75 void PrintBuffer(const void* buffer, UInt_t sizeInBytes, const char* identifier);
c7b7f445 76 void PrintSummary(const char* identifier = "none");
77
78 protected:
79
80 AliTRDonlineTrackingDataContainer& operator=(const AliTRDonlineTrackingDataContainer &rhs); // not implemented
81
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
91
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
100
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
104
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
108
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
114
115 UInt_t fSectorTrgWords[fgkNumSectors]; //! sector trigger words
116 ULong64_t fStackTrgWords[fgkNumSectors][fgkNumStacksPerSector]; //! stack trigger words (=TMU tracking done words)
117
118 UInt_t DataWordsNeeded();
119 UInt_t MakeDataHeader();
6f7c6cc6 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);
125
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);
131
132 UShort_t ExtractTrackLayerMask(ULong64_t trackWord);
133 UShort_t ExtractTrackPID(ULong64_t trackWord);
c7b7f445 134
135 ClassDef(AliTRDonlineTrackingDataContainer, 1);
136};
137
138#endif