1 #ifndef ALITOFDECODERV2_H
2 #define ALITOFDECODERV2_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
7 /* $Id: AliTOFDecoder.h,v 1.2 2007/05/08 11:55:24 arcelli Exp $ */
9 ///////////////////////////////////////////////////////////////
11 // This class provides the basic TOF raw data decoder. //
13 ///////////////////////////////////////////////////////////////
15 //define decoder status and bits
19 #define CHAIN_A_BIT 0x8
20 #define CHAIN_B_BIT 0x10
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)
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
42 #define WORD_TYPE_MASK 0xf0000000
43 #define SLOT_ID_MASK 0x0000000f
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
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
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
67 //define mandatory numbers
68 #define N_EQUIPMENT 72
69 #define N_DDL N_EQUIPMENT
74 #define TRM_FIRST_SLOT_ID 3
75 #define TRM_LAST_SLOT_ID 12
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 )
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) )
94 #include "AliTOFRawDataFormat.h"
95 #include "AliTOFDecoderSummaryData.h"
96 #include "AliTOFDRMSummaryData.h"
97 #include "AliTOFLTMSummaryData.h"
98 #include "AliTOFTRMSummaryData.h"
99 #include "AliTOFChainSummaryData.h"
100 #include "AliTOFTDCHitBuffer.h"
101 #include "AliTOFTDCErrorBuffer.h"
102 #include "AliRawReader.h"
103 #include "AliRawDataHeader.h"
105 class AliTOFDecoderV2 : public TObject
108 AliTOFDecoderV2(AliRawReader *reader = NULL); //default constructor
109 AliTOFDecoderV2(const AliTOFDecoderV2 &source); //copy constructor
110 AliTOFDecoderV2 &operator = (const AliTOFDecoderV2 &source); //operator =
111 ~AliTOFDecoderV2(); //distructor
113 void SetRawReader(AliRawReader *value) {fRawReader = value;}; // set raw reader
114 void SetVerbose(Bool_t Verbose = kTRUE) {fVerbose = Verbose;}; //set verbose level
115 void SetLogErrors(Bool_t Value = kTRUE) {fLogErrors = Value;}; //set log errors
116 void SetV2718Patch(Bool_t V2718Patch = kTRUE) {fV2718Patch = V2718Patch;}; //set V2718 patch (no DRM)
117 void SetRecoverError(Bool_t RecoverError = kTRUE) {fRecoverError = RecoverError;}; //decoder will try to recover decoding errors
118 void SetRecoverErrorThr(Int_t value) {fRecoverErrorThr = value;}; // setter
119 void SetSpider(Bool_t value = kTRUE) {fSpider = value;}; //set spider
120 void SetRunNumber(Int_t RunNumber) {fRunNumber = RunNumber;}; //set run number
121 void SetEventNumber(UInt_t EventNumber) {fEventNumber = EventNumber;}; //set event number
122 void SetEquipmentID(Int_t EquipmentID) {fEquipmentID = EquipmentID;}; //set equipment ID
124 AliTOFDecoderSummaryData *GetDecoderSummaryData() {return fDecoderSummaryData;}; //get decoder summary data
126 Bool_t Decode(UInt_t *rawData, UInt_t nWords); //main decode function
127 void Spider(AliTOFTDCHit &hit);
129 /* raw reader decoder interface */
130 Bool_t NextEvent() {return fRawReader ? fRawReader->NextEvent() : kFALSE;}; // next event
131 UInt_t GetEventType() {return fRawReader ? fRawReader->GetType() : 0;}; // get event type
132 Bool_t DecodeNext(); // decode next
133 const AliRawDataHeader *GetCDH() const {return fRawReader ? fRawReader->GetDataHeader() : NULL;}; // get CDH
136 AliRawReader *fRawReader; // raw reader
137 Bool_t fVerbose; //verbose flag
138 Bool_t fLogErrors; //log errors flag
139 Bool_t fV2718Patch; //V2718 patch flag
140 Bool_t fRecoverError; //recover error flag
141 Int_t fRecoverErrorThr; // recover error thr
142 Bool_t fSpider; //spider flag
143 Int_t fRunNumber; //run number
144 UInt_t fEventNumber; //event number
145 Int_t fEquipmentID; //equipment ID
147 //summary data pointers
148 AliTOFDecoderSummaryData *fDecoderSummaryData; //decoder summary data
149 AliTOFDRMSummaryData *fDRMSummaryData; //DRM summary data
150 AliTOFLTMSummaryData *fLTMSummaryData; //LTM summary data
151 AliTOFTRMSummaryData *fTRMSummaryData; //TRM summary data
152 AliTOFChainSummaryData *fChainSummaryData; //chain summary data
155 AliTOFTDCHitBuffer *fTDCHitBuffer; //TDC hit buffer
156 AliTOFTDCHitBuffer *fTDCPackedHitBuffer; //TDC packed hit buffer
157 AliTOFTDCErrorBuffer *fTDCErrorBuffer; //TDC error buffer
160 AliTOFDRMGlobalHeader *fDRMGlobalHeader; //DRM global header
161 AliTOFDRMGlobalTrailer *fDRMGlobalTrailer; //DRM global trailer
162 AliTOFDRMStatusHeader1 *fDRMStatusHeader1; //DRM status header1
163 AliTOFDRMStatusHeader2 *fDRMStatusHeader2; //DRM status header2
164 AliTOFDRMStatusHeader3 *fDRMStatusHeader3; //DRM status header3
165 AliTOFDRMStatusHeader4 *fDRMStatusHeader4; //DRM status header4
166 AliTOFDRMEventCRC *fDRMEventCRC; //DRM event CRC
167 AliTOFLTMGlobalHeader *fLTMGlobalHeader; //LTM global header
168 AliTOFLTMGlobalTrailer *fLTMGlobalTrailer; //LTM global trailer
169 AliTOFLTMPDLData *fLTMPDLData; //LTM PDL data
170 AliTOFLTMADCData *fLTMADCData; //LTM ADC data
171 AliTOFLTMORData *fLTMORData; //LTM OR data
172 AliTOFTRMGlobalHeader *fTRMGlobalHeader; //TRM global header
173 AliTOFTRMGlobalTrailer *fTRMGlobalTrailer; //TRM global trailer
174 AliTOFTRMChainHeader *fTRMChainHeader; //TRM chain header
175 AliTOFTRMChainTrailer *fTRMChainTrailer; //TRM chain trailer
176 AliTOFTDCPackedHit *fTDCPackedHit; //TDC packed hit
177 AliTOFTDCUnpackedHit *fTDCUnpackedHit; //TDC unpacked hit
178 AliTOFTRMTDCError *fTRMTDCError; //TRM TDC error
179 AliTOFTRMDiagnosticErrorWord1 *fTRMDiagnosticErrorWord1; //TRM diagnostic error word 1
180 AliTOFTRMDiagnosticErrorWord2 *fTRMDiagnosticErrorWord2; //TRM diagnostica error word 2
182 /* Spider data members */
183 AliTOFTDCHit fSpiderBuffer[N_CHANNEL];
184 Bool_t fSpiderBufferFull[N_CHANNEL];
186 AliTOFTDCHitBuffer *fSpiderTDCPackedHitBuffer;
189 /* Summary Data Functions */
190 //fill DRM summary data
191 void FillDRMSummaryData(AliTOFDRMGlobalHeader *DRMGlobalHeader); //DRM global header
192 void FillDRMSummaryData(AliTOFDRMGlobalTrailer *DRMGlobalTrailer); //DRM global trailer
193 void FillDRMSummaryData(AliTOFDRMStatusHeader1 *DRMStatusHeader1); //DRM status header 1
194 void FillDRMSummaryData(AliTOFDRMStatusHeader2 *DRMStatusHeader2); //DRM status header 2
195 void FillDRMSummaryData(AliTOFDRMStatusHeader3 *DRMStatusHeader3); //DRM status header 3
196 void FillDRMSummaryData(AliTOFDRMStatusHeader4 *DRMStatusHeader4); //DRM status header 4
197 void FillDRMSummaryData(AliTOFDRMEventCRC *DRMEventCRC); //DRM event CRC
198 //fill LTM summary data
199 void FillLTMSummaryData(AliTOFLTMGlobalHeader *LTMGlobalHeader); //LTM global header
200 void FillLTMSummaryData(AliTOFLTMGlobalTrailer *LTMGlobalTrailer); //LTM global trailer
201 void FillLTMSummaryData(AliTOFLTMPDLData *LTMPDLData, Int_t PDLWord); //LTM PDL data
202 void FillLTMSummaryData(AliTOFLTMADCData *LTMADCData, Int_t ADCWord); //LTM ADC data
203 void FillLTMSummaryData(AliTOFLTMORData *LTMORData, Int_t ORWord); //LTM OR data
204 //fill TRM summary data
205 void FillTRMSummaryData(AliTOFTRMGlobalHeader *TRMGlobalHeader); //TRM global header
206 void FillTRMSummaryData(AliTOFTRMGlobalTrailer *TRMGlobalTrailer); //TRM global trailer
207 //fill chain summary data
208 void FillChainSummaryData(AliTOFTRMChainHeader *TRMChainHeader); //TRM chain header
209 void FillChainSummaryData(AliTOFTRMChainTrailer *TRMChainTrailer); //TRM chain trailer
211 ClassDef(AliTOFDecoderV2, 1);
214 #endif /* ALITOFDECODERV2_H */