Line data Source code
1 : #ifndef ALITOFDECODERV2_H
2 : #define ALITOFDECODERV2_H
3 :
4 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 : * See cxx source for full Copyright notice */
6 :
7 : /* $Id: AliTOFDecoder.h,v 1.2 2007/05/08 11:55:24 arcelli Exp $ */
8 :
9 : ///////////////////////////////////////////////////////////////
10 : // //
11 : // This class provides the basic TOF raw data decoder. //
12 : // //
13 : ///////////////////////////////////////////////////////////////
14 :
15 : //define decoder status and bits
16 : #define DRM_BIT 0x1
17 : #define LTM_BIT 0x2
18 : #define TRM_BIT 0x4
19 : #define CHAIN_A_BIT 0x8
20 : #define CHAIN_B_BIT 0x10
21 :
22 : #define DRM_HEADER_STATUS 0x0
23 : #define DRM_TRAILER_STATUS (DRM_BIT)
24 : #define LTM_HEADER_STATUS (DRM_BIT)
25 : #define LTM_TRAILER_STATUS (DRM_BIT|LTM_BIT)
26 : #define TRM_HEADER_STATUS (DRM_BIT)
27 : #define TRM_TRAILER_STATUS (DRM_BIT|TRM_BIT)
28 : #define CHAIN_A_HEADER_STATUS (DRM_BIT|TRM_BIT)
29 : #define CHAIN_A_TRAILER_STATUS (DRM_BIT|TRM_BIT|CHAIN_A_BIT)
30 : #define CHAIN_B_HEADER_STATUS (DRM_BIT|TRM_BIT)
31 : #define CHAIN_B_TRAILER_STATUS (DRM_BIT|TRM_BIT|CHAIN_B_BIT)
32 : #define CHAIN_A_TDC_HIT_STATUS (DRM_BIT|TRM_BIT|CHAIN_A_BIT)
33 : #define CHAIN_B_TDC_HIT_STATUS (DRM_BIT|TRM_BIT|CHAIN_B_BIT)
34 :
35 : //define DRM/LTM fixed number of words
36 : #define DRM_STATUS_HEADER_WORDS 4
37 : #define LTM_PDL_DATA_WORDS 12
38 : #define LTM_ADC_DATA_WORDS 20
39 : #define LTM_OR_DATA_WORDS 16
40 :
41 : //define masks
42 : #define WORD_TYPE_MASK 0xf0000000
43 : #define SLOT_ID_MASK 0x0000000f
44 :
45 : //define word types
46 : #define GLOBAL_HEADER 0x40000000
47 : #define GLOBAL_TRAILER 0x50000000
48 : #define CHAIN_A_HEADER 0x00000000
49 : #define CHAIN_A_TRAILER 0x10000000
50 : #define CHAIN_B_HEADER 0x20000000
51 : #define CHAIN_B_TRAILER 0x30000000
52 : #define ERROR 0x60000000
53 : #define FILLER 0x70000000
54 :
55 : //define TRM ACQ status
56 : #define PACKING_ENABLED_ACQ 0x0
57 : #define LEADING_ONLY_ACQ 0x1
58 : #define TRAILING_ONLY_ACQ 0x2
59 : #define PACKING_DISABLED_ACQ 0x3
60 :
61 : //define TDC hit PS status
62 : #define PACKED_HIT_PS 0x0
63 : #define LEADING_HIT_PS 0x1
64 : #define TRAILING_HIT_PS 0x2
65 : #define TOT_OVF_HIT_PS 0x3
66 :
67 : //define mandatory numbers
68 : #define N_EQUIPMENT 72
69 : #define N_DDL N_EQUIPMENT
70 : #define N_TRM 10
71 : #define N_CHAIN 2
72 : #define N_TDC 15
73 : #define N_CHANNEL 8
74 : #define TRM_FIRST_SLOT_ID 3
75 : #define TRM_LAST_SLOT_ID 12
76 :
77 : #define TIME_BIN_WIDTH 24.4e-3//ns
78 : #define TOT_BIN_WIDTH 48.8e-3//ns
79 : #define TIME_TO_TOT_BIN_WIDTH ( TIME_BIN_WIDTH / TOT_BIN_WIDTH )
80 : #define TOT_TO_TIME_BIN_WIDTH ( TOT_BIN_WIDTH / TIME_BIN_WIDTH )
81 :
82 : //define CRC macros to convert 32-bit CRC into DRM/TRM CRC
83 : #define COMPUTE_DRM_CRC(a) ( ((a & 0x0000ffff) >> 0) ^\
84 : ((a & 0xffff0000) >> 16) )
85 : #define COMPUTE_TRM_CRC(a) ( ((a & 0x00000fff) >> 0) ^\
86 : ((a & 0x00fff000) >> 12) ^\
87 : ((a & 0xff000000) >> 24) )
88 : #define COMPUTE_LTM_CRC(a) ( ((a & 0x00000fff) >> 0) ^\
89 : ((a & 0x00fff000) >> 12) ^\
90 : ((a & 0xff000000) >> 24) )
91 :
92 :
93 : #define TRM_ERROR_STATUS (DRM_BIT|TRM_BIT)
94 : #define CHAIN_A_TDCERROR_STATUS (DRM_BIT|TRM_BIT|CHAIN_A_BIT)
95 : #define CHAIN_B_TDCERROR_STATUS (DRM_BIT|TRM_BIT|CHAIN_B_BIT)
96 :
97 : #include "TObject.h"
98 : #include "AliRawReader.h"
99 : #include "AliTOFTDCHit.h"
100 :
101 : class AliTOFDecoderSummaryData;
102 : class AliTOFDRMSummaryData;
103 : class AliTOFLTMSummaryData;
104 : class AliTOFTRMSummaryData;
105 : class AliTOFChainSummaryData;
106 : class AliTOFTDCHitBuffer;
107 : class AliTOFTDCErrorBuffer;
108 : struct AliRawDataHeader;
109 :
110 : class AliTOFDecoderV2 : public TObject
111 : {
112 : public:
113 : AliTOFDecoderV2(AliRawReader *reader = NULL); //default constructor
114 : AliTOFDecoderV2(const AliTOFDecoderV2 &source); //copy constructor
115 : AliTOFDecoderV2 &operator = (const AliTOFDecoderV2 &source); //operator =
116 : ~AliTOFDecoderV2(); //distructor
117 : /* setters */
118 0 : void SetRawReader(AliRawReader *value) {fRawReader = value;}; // set raw reader
119 576 : void SetVerbose(Bool_t Verbose = kTRUE) {fVerbose = Verbose;}; //set verbose level
120 0 : void SetLogErrors(Bool_t Value = kTRUE) {fLogErrors = Value;}; //set log errors
121 0 : void SetV2718Patch(Bool_t V2718Patch = kTRUE) {fV2718Patch = V2718Patch;}; //set V2718 patch (no DRM)
122 0 : void SetRecoverError(Bool_t RecoverError = kTRUE) {fRecoverError = RecoverError;}; //decoder will try to recover decoding errors
123 0 : void SetRecoverErrorThr(Int_t value) {fRecoverErrorThr = value;}; // setter
124 0 : void SetSpider(Bool_t value = kTRUE) {fSpider = value;}; //set spider
125 0 : void SetRunNumber(Int_t RunNumber) {fRunNumber = RunNumber;}; //set run number
126 0 : void SetEventNumber(UInt_t EventNumber) {fEventNumber = EventNumber;}; //set event number
127 0 : void SetEquipmentID(Int_t EquipmentID) {fEquipmentID = EquipmentID;}; //set equipment ID
128 : /* getters */
129 1152 : AliTOFDecoderSummaryData *GetDecoderSummaryData() {return fDecoderSummaryData;}; //get decoder summary data
130 : /* methods */
131 : Bool_t Decode(UInt_t *rawData, UInt_t nWords); //main decode function
132 : void Spider(AliTOFTDCHit &hit);
133 : void ResetSpider();
134 : /* raw reader decoder interface */
135 0 : Bool_t NextEvent() {return fRawReader ? fRawReader->NextEvent() : kFALSE;}; // next event
136 0 : UInt_t GetEventType() {return fRawReader ? fRawReader->GetType() : 0;}; // get event type
137 : Bool_t DecodeNext(); // decode next
138 0 : const AliRawDataHeader *GetCDH() const {return fRawReader ? fRawReader->GetDataHeader() : NULL;}; // get CDH
139 :
140 : private:
141 : AliRawReader *fRawReader; // raw reader
142 : Bool_t fVerbose; //verbose flag
143 : Bool_t fLogErrors; //log errors flag
144 : Bool_t fV2718Patch; //V2718 patch flag
145 : Bool_t fRecoverError; //recover error flag
146 : Int_t fRecoverErrorThr; // recover error thr
147 : Bool_t fSpider; //spider flag
148 : Int_t fRunNumber; //run number
149 : UInt_t fEventNumber; //event number
150 : Int_t fEquipmentID; //equipment ID
151 :
152 : //summary data pointers
153 : AliTOFDecoderSummaryData *fDecoderSummaryData; //decoder summary data
154 : AliTOFDRMSummaryData *fDRMSummaryData; //DRM summary data
155 : AliTOFLTMSummaryData *fLTMSummaryData; //LTM summary data
156 : AliTOFTRMSummaryData *fTRMSummaryData; //TRM summary data
157 : AliTOFChainSummaryData *fChainSummaryData; //chain summary data
158 :
159 : //buffer pointers
160 : AliTOFTDCHitBuffer *fTDCHitBuffer; //TDC hit buffer
161 : AliTOFTDCHitBuffer *fTDCPackedHitBuffer; //TDC packed hit buffer
162 : AliTOFTDCErrorBuffer *fTDCErrorBuffer; //TDC error buffer
163 :
164 : //decoding objects
165 : AliTOFDRMGlobalHeader *fDRMGlobalHeader; //DRM global header
166 : AliTOFDRMGlobalTrailer *fDRMGlobalTrailer; //DRM global trailer
167 : AliTOFDRMStatusHeader1 *fDRMStatusHeader1; //DRM status header1
168 : AliTOFDRMStatusHeader2 *fDRMStatusHeader2; //DRM status header2
169 : AliTOFDRMStatusHeader3 *fDRMStatusHeader3; //DRM status header3
170 : AliTOFDRMStatusHeader4 *fDRMStatusHeader4; //DRM status header4
171 : AliTOFDRMEventCRC *fDRMEventCRC; //DRM event CRC
172 : AliTOFLTMGlobalHeader *fLTMGlobalHeader; //LTM global header
173 : AliTOFLTMGlobalTrailer *fLTMGlobalTrailer; //LTM global trailer
174 : AliTOFLTMPDLData *fLTMPDLData; //LTM PDL data
175 : AliTOFLTMADCData *fLTMADCData; //LTM ADC data
176 : AliTOFLTMORData *fLTMORData; //LTM OR data
177 : AliTOFTRMGlobalHeader *fTRMGlobalHeader; //TRM global header
178 : AliTOFTRMGlobalTrailer *fTRMGlobalTrailer; //TRM global trailer
179 : AliTOFTRMChainHeader *fTRMChainHeader; //TRM chain header
180 : AliTOFTRMChainTrailer *fTRMChainTrailer; //TRM chain trailer
181 : AliTOFTDCPackedHit *fTDCPackedHit; //TDC packed hit
182 : AliTOFTDCUnpackedHit *fTDCUnpackedHit; //TDC unpacked hit
183 : AliTOFTRMTDCError *fTRMTDCError; //TRM TDC error
184 : AliTOFTRMDiagnosticErrorWord1 *fTRMDiagnosticErrorWord1; //TRM diagnostic error word 1
185 : AliTOFTRMDiagnosticErrorWord2 *fTRMDiagnosticErrorWord2; //TRM diagnostica error word 2
186 :
187 : /* Spider data members */
188 : AliTOFTDCHit fSpiderBuffer[8]; // SPIDER buffer
189 : Bool_t fSpiderBufferFull[8]; // SPIDER buffer full flag
190 : Int_t fSpiderTDCID; // SPIDER TDC ID
191 : AliTOFTDCHitBuffer *fSpiderTDCPackedHitBuffer; // SPIDER buffer
192 :
193 :
194 : /* Summary Data Functions */
195 : //fill DRM summary data
196 : void FillDRMSummaryData(const AliTOFDRMGlobalHeader *DRMGlobalHeader); //DRM global header
197 : void FillDRMSummaryData(const AliTOFDRMGlobalTrailer *DRMGlobalTrailer); //DRM global trailer
198 : void FillDRMSummaryData(const AliTOFDRMStatusHeader1 *DRMStatusHeader1); //DRM status header 1
199 : void FillDRMSummaryData(const AliTOFDRMStatusHeader2 *DRMStatusHeader2); //DRM status header 2
200 : void FillDRMSummaryData(const AliTOFDRMStatusHeader3 *DRMStatusHeader3); //DRM status header 3
201 : void FillDRMSummaryData(const AliTOFDRMStatusHeader4 *DRMStatusHeader4); //DRM status header 4
202 : void FillDRMSummaryData(const AliTOFDRMEventCRC *DRMEventCRC); //DRM event CRC
203 : //fill LTM summary data
204 : void FillLTMSummaryData(const AliTOFLTMGlobalHeader *LTMGlobalHeader); //LTM global header
205 : void FillLTMSummaryData(const AliTOFLTMGlobalTrailer *LTMGlobalTrailer); //LTM global trailer
206 : void FillLTMSummaryData(const AliTOFLTMPDLData *LTMPDLData, Int_t PDLWord); //LTM PDL data
207 : void FillLTMSummaryData(const AliTOFLTMADCData *LTMADCData, Int_t ADCWord); //LTM ADC data
208 : void FillLTMSummaryData(const AliTOFLTMORData *LTMORData, Int_t ORWord); //LTM OR data
209 : //fill TRM summary data
210 : void FillTRMSummaryData(const AliTOFTRMGlobalHeader *TRMGlobalHeader); //TRM global header
211 : void FillTRMSummaryData(const AliTOFTRMGlobalTrailer *TRMGlobalTrailer); //TRM global trailer
212 : //fill chain summary data
213 : void FillChainSummaryData(const AliTOFTRMChainHeader *TRMChainHeader); //TRM chain header
214 : void FillChainSummaryData(const AliTOFTRMChainTrailer *TRMChainTrailer); //TRM chain trailer
215 :
216 26 : ClassDef(AliTOFDecoderV2, 1);
217 : };
218 :
219 : #endif /* ALITOFDECODERV2_H */
|