]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TRD/AliTRDonlineTrackingDataContainer.h
little changes
[u/mrichter/AliRoot.git] / HLT / TRD / AliTRDonlineTrackingDataContainer.h
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; };
15   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   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; };
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   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     return (fTrackWords[stack][trackIndex] >> 56) & 0x3f;
46   }
47
48   inline Int_t GetTrackA(UInt_t stack, UInt_t trackIndex){
49     return (((fTrackWords[stack][trackIndex] >> 38) & 0x3ffff) ^ 0x20000) - 0x20000;
50   }
51
52   inline Int_t GetTrackPID(UInt_t stack, UInt_t trackIndex){
53     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   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.; };
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   ClassDef(AliTRDonlineTrackingDataContainer, 1);
136 };
137
138 #endif