1 #ifndef ALITRDRAWSTREAM_H
2 #define ALITRDRAWSTREAM_H
6 #include "AliTRDrawStreamBase.h"
7 //#include "AliRawReader.h"
14 class AliTRDdigitsManager;
15 class AliTRDdigitsParam;
17 class AliTRDSignalIndex;
19 class AliTRDrawStream : public AliTRDrawStreamBase
22 AliTRDrawStream(AliRawReader *rawReader = 0x0);
25 Bool_t SetReader(AliRawReader *rawReader) { fRawReader = rawReader; return kTRUE; }
26 void SetDigitsManager(AliTRDdigitsManager *digMgr) { fDigitsManager = digMgr; }
28 Bool_t ReadEvent(TTree *trackletTree = 0x0);
31 Int_t NextChamber(AliTRDdigitsManager *digMgr,
32 UInt_t ** /* trackletContainer */, UShort_t ** /* errorContainer */);
34 // legacy code, to be removed
35 Bool_t SetRawVersion(Int_t) { return kTRUE; }
36 void SetSharedPadReadout(Bool_t) {}
37 void SetNoErrorWarning() {}
62 TTree* GetErrorTree() { return fErrors; }
63 static const char* GetErrorMessage(ErrorCode_t errCode);
67 Int_t ReadStackIndexHeader(Int_t stack);
70 Int_t ReadTracklets();
72 Int_t ReadTPData(Int_t mode = 1);
74 Int_t ReadNonZSData();
76 // MCM header decoding
77 Int_t ROB(UInt_t mcmhdr) { return 0x7 & mcmhdr >> 28; }
78 Int_t MCM(UInt_t mcmhdr) { return 0xf & mcmhdr >> 24; }
79 Int_t Row(UInt_t mcmhdr) { return (ROB(mcmhdr) / 2) * 4 + MCM(mcmhdr) / 4; }
80 Int_t AdcColOffset(UInt_t mcmhdr) { return (MCM(mcmhdr) % 4 + 1) * 21 + (ROB(mcmhdr) % 2) * 84 - 1; }
81 Int_t PadColOffset(UInt_t mcmhdr) { return (MCM(mcmhdr) % 4 + 1) * 18 + (ROB(mcmhdr) % 2) * 72 + 1; }
82 Int_t EvNo(UInt_t mcmhdr) { return 0xfffff & mcmhdr >> 4; }
83 Int_t Check(UInt_t mcmhdr) { return 0xf & mcmhdr; }
84 Int_t CouldBeMCMhdr(UInt_t mcmhdr) { return ((0xf & mcmhdr) == 0xc); }
86 Int_t GetMCMReadoutPos(Int_t mcm) { return (mcm > -1 && mcm < 16) ? fgkMcmOrder[mcm] : -1; }
87 Int_t GetROBReadoutPos(Int_t rob) { return (rob > -1 && rob < 4) ? fgkRobOrder[rob] : -1; }
90 Int_t GetActiveChannels(UInt_t adcmask) { return 0x1fffff & adcmask >> 4; }
91 Int_t GetNActiveChannelsFromMask(UInt_t adcmask); // { Int_t nch = 0; for (Int_t i = 0; i < 21; i++) if ((GetActiveChannels(adcmask) & 1 << i)) nch++; return nch; }
92 Int_t GetNActiveChannels(UInt_t adcmask) { return (0x1f & ~(adcmask >> 25)); }
93 Int_t CouldBeADCmask(UInt_t adcmask) { return ((0xf & adcmask) == 0xc && (0x3 & adcmask >> 30) == 0x1); }
95 // error message generation
96 TString EquipmentError(ErrorCode_t err = kUnknown, TString msg = "");
97 TString StackError (ErrorCode_t err = kUnknown, TString msg = "");
98 TString LinkError (ErrorCode_t err = kUnknown, TString msg = "");
99 TString ROBError (ErrorCode_t err = kUnknown, TString msg = "");
100 TString MCMError (ErrorCode_t err = kUnknown, TString msg = "");
102 static char* fgErrorMessages[kLastErrorCode];
105 AliRawReader *fRawReader;
106 AliTRDdigitsManager *fDigitsManager;
107 AliTRDdigitsParam *fDigitsParam;
110 struct { Int_t fSector; Int_t fStack; Int_t fLink; Int_t fError; Int_t fRob; Int_t fMcm; } fLastError;
112 UInt_t *fPayloadStart;
113 UInt_t *fPayloadCurr;
116 static const Int_t fgkNlinks;
117 static const Int_t fgkNstacks;
118 static const UInt_t fgkDataEndmarker;
119 static const UInt_t fgkTrackletEndmarker;
120 static const Int_t fgkMcmOrder [];
121 static const Int_t fgkRobOrder [];
123 // persistent information
127 // information valid at current reader position
134 UInt_t fCurrEquipmentId;
137 UInt_t fCurrSmuIndexHeaderSize;
138 UInt_t fCurrSmuIndexHeaderVersion;
139 UInt_t fCurrTrackEnable;
140 UInt_t fCurrTrackletEnable;
141 UInt_t fCurrStackMask;
143 // Stack index header
144 UInt_t *fCurrStackIndexWord;
145 UInt_t *fCurrStackHeaderSize;
146 UInt_t *fCurrStackHeaderVersion;
147 UInt_t *fCurrLinkMask;
148 UInt_t *fCurrCleanCheckout;
149 UInt_t *fCurrBoardId;
151 UInt_t *fCurrLinkMonitorFlags;
152 UInt_t *fCurrLinkDataTypeFlags;
153 UInt_t *fCurrLinkDebugFlags;
159 Int_t fCurrAddHcWords;
166 Int_t fCurrNtimebins;
169 Int_t fCurrPtrgPhase;
171 // tracklet information
172 TClonesArray *fTrackletArray;
175 AliTRDarrayADC *fAdcArray;
176 AliTRDSignalIndex *fSignalIndex;
177 TTree *fTrackletTree;
179 AliTRDrawStream(const AliTRDrawStream&); // not implemented
180 AliTRDrawStream operator=(const AliTRDrawStream&); // not implemented
182 ClassDef(AliTRDrawStream, 0);