Line data Source code
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 0 : void SetLogPrefix(const char* prefix) { *fLogPrefix = prefix; };
15 0 : void SetGtuPtMultiplier(Double_t mult) { fGtuPtMultiplier = mult; }
16 : void SetGtuPtMultiplierFromMagField(Double_t magField);
17 :
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);
23 :
24 : void SetTrackAddInfo(UShort_t stack, UInt_t trackIndex, Int_t addInfo);
25 0 : void SetSectorTrgWord(UShort_t sector, UInt_t trgWord) { fSectorTrgWords[sector] = trgWord; };
26 0 : void SetStackTrgWord(UShort_t sector, UShort_t stack, ULong64_t trgWord) { fStackTrgWords[sector][stack] = trgWord; };
27 :
28 : Int_t GetNumTracklets();
29 : Int_t GetNumTracklets(UInt_t det);
30 : Int_t GetNumTracks();
31 : Int_t GetNumTracks(UShort_t stack);
32 :
33 0 : 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);
39 :
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);
43 :
44 : inline Int_t GetTrackLayerMask(UInt_t stack, UInt_t trackIndex){
45 0 : return (fTrackWords[stack][trackIndex] >> 56) & 0x3f;
46 : }
47 :
48 : inline Int_t GetTrackA(UInt_t stack, UInt_t trackIndex){
49 0 : return (((fTrackWords[stack][trackIndex] >> 38) & 0x3ffff) ^ 0x20000) - 0x20000;
50 : }
51 :
52 : inline Int_t GetTrackPID(UInt_t stack, UInt_t trackIndex){
53 0 : return fTrackWords[stack][trackIndex] & 0xff;
54 : }
55 :
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 0 : UInt_t GetSectorTrgWord(UShort_t sector) { return fSectorTrgWords[sector]; };
65 0 : ULong64_t GetStackTrgWord(UShort_t sector, UShort_t stack) { return fStackTrgWords[sector][stack]; };
66 0 : UInt_t GetSectorTrgContribs(UShort_t sector) { return fSectorTrgWords[sector] & 0x3ff; };
67 0 : Float_t GetTrackletStartTime(UShort_t sector, UShort_t stack) { return ((fStackTrgWords[sector][stack] >> 20) & 0x3ff)*1./125.; };
68 0 : Float_t GetTrackletEndTime(UShort_t sector, UShort_t stack) { return ((fStackTrgWords[sector][stack] >> 10) & 0x3ff)*1./125.; };
69 0 : Float_t GetTMUTrackingDoneTime(UShort_t sector, UShort_t stack) { return ((fStackTrgWords[sector][stack] >> 0) & 0x3ff)*1./50.; };
70 0 : Float_t GetSMUTrackingDoneTime(UShort_t sector) { return ((fSectorTrgWords[sector] >> 12) & 0x3ff)*1./120.; };
71 :
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);
74 :
75 : void PrintBuffer(const void* buffer, UInt_t sizeInBytes, const char* identifier);
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();
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);
134 :
135 6 : ClassDef(AliTRDonlineTrackingDataContainer, 1);
136 : };
137 :
138 : #endif
|