]>
Commit | Line | Data |
---|---|---|
c7b7f445 | 1 | #ifndef ALITRDONLINETRACKINGDATACONTAINER_H |
2 | #define ALITRDONLINETRACKINGDATACONTAINER_H | |
3 | ||
4 | #include "AliESDTrdTracklet.h" | |
5 | #include "AliESDTrdTrack.h" | |
6 | #include "AliHLTLogging.h" | |
7 | ||
8 | class 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 |