1 #ifndef ALITRDRAWSTREAM_H
2 #define ALITRDRAWSTREAM_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
8 ///////////////////////////////////////////////////////////////////////////////
10 // This class provides access to TRD digits in raw data. //
12 ///////////////////////////////////////////////////////////////////////////////
18 class AliTRDdigitsManager;
19 class AliTRDdataArrayI;
22 const UInt_t endoftrackletmarker = 0xAAAAAAAA; /*This marks the end of tracklet data words*/
23 const UInt_t endofeventmarker = 0x00000000; /*This marks the end of half-chamber-data*/
25 class AliTRDRawStream: public TObject {
30 AliTRDRawStream(AliRawReader *rawReader);
31 AliTRDRawStream(AliRawReader *rawReader, AliTRDdigitsManager *man, AliTRDdataArrayI *dig);
32 virtual ~AliTRDRawStream();
34 virtual Bool_t Next(); // Next function (for fRawVersion = 0 (Bogdans first version))
35 virtual Bool_t ReadAll(); // Read function (for fRawVersion > 0)
37 Int_t GetDetector() const { return fDetector; };
38 Int_t GetPrevDetector() const { return fPrevDetector; };
39 Bool_t IsNewDetector() const { return fDetector != fPrevDetector; };
40 Int_t GetNPads() const { return fNPads; };
41 Int_t GetRow() const { return fRow; };
42 Int_t GetPrevRow() const { return fPrevRow; };
43 Bool_t IsNewRow() const { return (fRow != fPrevRow) || IsNewDetector(); };
44 Int_t GetColumn() const { return fColumn; };
45 Int_t GetPrevColumn() const { return fPrevColumn; };
46 Bool_t IsNewColumn() const { return (fColumn != fPrevColumn) || IsNewRow(); };
47 Int_t GetTime() const { return fTime-1; };
48 Int_t GetSignal() const { return fSignal; };
50 enum { kDDLOffset = 0x400 }; // Offset for DDL numbers
52 void SetDigitsManager(AliTRDdigitsManager *man) { fDigitsManager = man; };
53 void SetDigits(AliTRDdataArrayI *dig) { fDigits = dig; };
55 AliTRDdigitsManager *GetDigitsManager() const { return fDigitsManager; };
57 Bool_t SetRawVersion(Int_t rv);
58 Int_t GetRawVersion() const { return fRawVersion; };
60 // Get Filter settings:
61 Int_t TRAPfilterTCon() const { return fTCon; };
62 Int_t TRAPfilterPEDon() const { return fPEDon; };
63 Int_t TRAPfilterGAINon() const { return fGAINon; };
64 Int_t TRAPsendsFilterdData() const { return fFiltered; };
66 // Get Tracklet parameters:
67 Float_t GetTrackletPID() const { return fTracklPID; };
68 Float_t GetTrackletDeflLength() const { return fTracklDefL; };
69 Float_t GetTrackletPadPos() const { return fTracklPadPos; };
70 Int_t getTrackletPadRow() const { return fTracklPadRow; };
72 // Check if the link has optical power (HC sends data)
73 Bool_t IsGTULinkActive(Int_t sm, Int_t la, Int_t sta, Int_t side)
74 { return ( ((fGTUlinkMask[sm][sta]) >> (2*la+side)) & 0x1 ); };
79 Int_t fSig[3]; // Signals in the three time bins from Data Word
80 Int_t fADC; // MCM ADC channel and Time Bin of word 1
81 Int_t fTB; // MCM ADC channel and Time Bin of word 1
82 Int_t fEv; // MCM Event number and position of current MCM on TRD chamber
83 Int_t fROB; // MCM Event number and position of current MCM on TRD chamber
84 Int_t fMCM; // MCM Event number and position of current MCM on TRD chamber
85 Int_t fSM; // Position of CURRENT half chamber in full TRD
86 Int_t fLAYER; // Position of CURRENT half chamber in full TRD
87 Int_t fSTACK; // Position of CURRENT half chamber in full TRD
88 Int_t fROC; // Position of CURRENT half chamber in full TRD
89 Int_t fSIDE; // Position of CURRENT half chamber in full TRD
90 Int_t fDCS; // DCS board number read from data (HC header)
92 Int_t fCOL; // Detector Pad coordinates
94 Int_t fBCctr; // Counters from HC header (>=V2)
95 Int_t fPTctr; // Counters from HC header (>=V2)
96 Int_t fPTphase; // Counters from HC header (>=V2)
97 Int_t fRVmajor; // Raw version numbers and number of additional HC headerwords (>=V2)
98 Int_t fRVminor; // Raw version numbers and number of additional HC headerwords (>=V2)
99 Int_t fHCHWords; // Raw version numbers and number of additional HC headerwords (>=V2)
100 Int_t fTBins; // Number of time bins read from HC header (>=V2)
101 Int_t fTCon; // Filter settings read from HC header (>=V2)
102 Int_t fPEDon; // Filter settings read from HC header (>=V2)
103 Int_t fGAINon; // Filter settings read from HC header (>=V2)
104 Int_t fFiltered; // Filter settings read from HC header (>=V2)
106 Int_t fHCHctr1; // HC and MCM Header counter
107 Int_t fHCHctr2; // HC and MCM Header counter
108 Int_t fMCMHctr1; // HC and MCM Header counter
109 Int_t fMCMHctr2; // HC and MCM Header counter
110 Int_t fGTUctr1; // GTU LinkMask Counter
111 Int_t fGTUctr2; // GTU LinkMask Counter
113 Float_t fTracklPID; // Tracklet parameters
114 Float_t fTracklDefL; // Tracklet parameters
115 Float_t fTracklPadPos; // Tracklet parameters
116 Int_t fTracklPadRow; // Tracklet parameters
118 UShort_t fGTUlinkMask[18][5]; // Mask with active links
120 AliTRDRawStream(const AliTRDRawStream &stream);
121 AliTRDRawStream &operator=(const AliTRDRawStream &stream);
123 AliRawReader *fRawReader; // Object for reading the raw data
125 // The following is used for v0:
126 Int_t fCount; // Counter of bytes to be read for current detector
127 Int_t fDetector; // Index of current detector
128 Int_t fPrevDetector; // Index of previous detector
129 Int_t fNPads; // Number of active pads
130 Int_t fRow; // Index of current pad row
131 Int_t fPrevRow; // Index of previous pad row
132 Int_t fColumn; // Index of current pad column
133 Int_t fPrevColumn; // Index of previous pad column
134 Int_t fTime; // Index of current time bin
135 Int_t fSignal; // Signal in ADC counts
137 // This is again new:
138 Int_t fRawVersion; // Which version of raw data decoding is used
139 UInt_t fDataWord; // The current 32 bit data word
140 Int_t fStatus; // Status of Raw data Reading
142 Int_t fRowMax; // Maximum number of pad rows and columns
143 Int_t fColMax; // Maximum number of pad rows and columns
144 UShort_t fChamberDone[540]; // Chamber was processed already?
148 AliTRDgeometry *fGeo; // TRD geometry
150 AliTRDdigitsManager *fDigitsManager; //! Manager for the output digits
151 AliTRDdataArrayI *fDigits; //! Output digits
152 AliTRDdataArrayI *fTrack0; //! Track dictionary
153 AliTRDdataArrayI *fTrack1; //! Track dictionary
154 AliTRDdataArrayI *fTrack2; //! Track dictionary
156 void DecodeHCheader(Int_t timeBins);
157 void DecodeHCheaderV1(); // Valid for fRawversion = 1
158 void DecodeHCheaderV2(Int_t imeBins); // Valid for fRawversion = 2,3,4
160 void DecodeMCMheader();
161 void DecodeMCMheaderV1(); // Valid for fRawversion = 1,2,3,4
163 void DecodeTracklet();
164 void DecodeTrackletV1(); // Valid for fRawversion = 1,2,3,4
166 void DecodeGTUlinkMask();
167 void DecodeGTUlinkMaskV1(); // Valid for fRawversion = 1,2,3,4
169 ClassDef(AliTRDRawStream, 3) // Class for reading TRD raw digits