Line data Source code
1 : #ifndef ALITOFDECODER_H
2 : #define ALITOFDECODER_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$ */
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_DATA_WORDS 5
37 : #define LTM_DATA_WORDS 48
38 :
39 : //define masks
40 : #define WORD_TYPE_MASK 0xf0000000
41 : #define SLOT_ID_MASK 0x0000000f
42 :
43 : //define word types
44 : #define GLOBAL_HEADER 0x40000000
45 : #define GLOBAL_TRAILER 0x50000000
46 : #define CHAIN_A_HEADER 0x00000000
47 : #define CHAIN_A_TRAILER 0x10000000
48 : #define CHAIN_B_HEADER 0x20000000
49 : #define CHAIN_B_TRAILER 0x30000000
50 : #define ERROR 0x60000000
51 : #define FILLER 0x70000000
52 :
53 : //define TRM ACQ status
54 : #define PACKING_ENABLED_ACQ 0x0
55 : #define LEADING_ONLY_ACQ 0x1
56 : #define TRAILING_ONLY_ACQ 0x2
57 : #define PACKING_DISABLED_ACQ 0x3
58 :
59 : //define TDC hit PS status
60 : #define PACKED_HIT_PS 0x0
61 : #define LEADING_HIT_PS 0x1
62 : #define TRAILING_HIT_PS 0x2
63 : #define TOT_OVF_HIT_PS 0x3
64 :
65 : //define mandatory numbers
66 : #define N_EQUIPMENT 72
67 : #define N_DDL N_EQUIPMENT
68 : #define N_TRM 10
69 : #define N_CHAIN 2
70 : #define N_TDC 15
71 : #define N_CHANNEL 8
72 : #define TRM_FIRST_SLOT_ID 3
73 : #define TRM_LAST_SLOT_ID 12
74 :
75 : #define TIME_BIN_WIDTH 24.4e-3//ns
76 : #define TOT_BIN_WIDTH 48.8e-3//ns
77 : #define TIME_TO_TOT_BIN_WIDTH ( TIME_BIN_WIDTH / TOT_BIN_WIDTH )
78 : #define TOT_TO_TIME_BIN_WIDTH ( TOT_BIN_WIDTH / TIME_BIN_WIDTH )
79 :
80 : //max hit number in a TDC
81 : #define MAX_TDC_HIT_NUMBER 100
82 : //max TDC errors
83 : #define MAX_TDC_ERROR_NUMBER 1000
84 : //max hit number in a TRM
85 : #define MAX_TRM_HIT_NUMBER 2400
86 :
87 : #include "TObject.h"
88 : #include "AliTOFRawDataFormat.h"
89 : #include "AliTOFHitData.h"
90 : //#include "AliTOFHitDataBuffer.h"
91 : //#include "AliTOFGeometry.h"
92 :
93 : class AliTOFHitDataBuffer;
94 : struct AliRawDataHeader;
95 : struct AliRawDataHeaderV3;
96 :
97 : class AliTOFDecoder : public TObject
98 : {
99 : public:
100 : AliTOFDecoder(); //default constructor
101 : AliTOFDecoder(AliTOFHitDataBuffer *DB, AliTOFHitDataBuffer *PDB); //constructor
102 : AliTOFDecoder(const AliTOFDecoder &source); //copy constructor
103 : AliTOFDecoder &operator = (const AliTOFDecoder &source); //operator =
104 : ~AliTOFDecoder(); //distructor
105 :
106 : Bool_t Decode(const UInt_t *rawData, Int_t nWords, const AliRawDataHeader *cdh, const AliRawDataHeaderV3 *cdhV3=0); //main decode function
107 0 : void SetVerbose(Int_t Verbose = 1) {fVerbose = Verbose;}; //set verbose level
108 0 : void SetV2718Patch(Bool_t V2718Patch = kTRUE) {fV2718Patch = V2718Patch;}; //set V2718 patch (no DRM)
109 0 : void SetDataBuffer(AliTOFHitDataBuffer *DB) {fDataBuffer = DB;}; //set up data buffer
110 0 : void SetPackedDataBuffer(AliTOFHitDataBuffer *PDB) {fPackedDataBuffer = PDB;}; //set up packed data buffer
111 :
112 : void GetArrayDDL(Int_t* array, Int_t iDDL); // method to return array of TOFchannels corresponding to a given DDL id
113 : void PrintStack(const UInt_t *rawData, Int_t nWords, const AliRawDataHeader *cdh, const AliRawDataHeaderV3 *cdhV3=0);
114 :
115 : enum {
116 : kMinPlate0=0,kMaxPlate0=2,
117 : kMinStrip0=0,kMaxStrip0=6,
118 : kMinPadz0=0,kMaxPadz0=1,
119 : kMinPadx0=0,kMaxPadx0=23,
120 :
121 : kMinPlate1=0,kMaxPlate1=2,
122 : kMinStrip1=0,kMaxStrip1=7,
123 : kMinPadz1=0,kMaxPadz1=1,
124 : kMinPadx1=24,kMaxPadx1=47,
125 :
126 : kMinPlate2=2,kMaxPlate2=4,
127 : kMinStrip2=8,kMaxStrip2=14,
128 : kMinPadz2=0,kMaxPadz2=1,
129 : kMinPadx2=24,kMaxPadx2=47,
130 :
131 : kMinPlate3=2,kMaxPlate3=4,
132 : kMinStrip3=7,kMaxStrip3=14,
133 : kMinPadz3=0,kMaxPadz3=1,
134 : kMinPadx3=0,kMaxPadx3=23
135 :
136 : };
137 :
138 :
139 : private:
140 : /* SPIDER
141 : * - Software Packing Inside Decoding Routines -
142 : * developed by Roberto Preghenella (R+)
143 : * use at your own risk
144 : */
145 : Bool_t InitializeSpider(); //initialize SPIDER routine
146 : Bool_t ResetSpider(); //reset SPIDER routine
147 : Bool_t Spider(AliTOFHitData &hitData); //main SPIDER routine
148 :
149 : Int_t fVerbose; //verbose flag
150 : Bool_t fV2718Patch; //V2718 patch flag
151 : AliTOFHitDataBuffer *fDataBuffer; //data buffer pointer
152 : AliTOFHitDataBuffer *fPackedDataBuffer; //packed data buffe pointer
153 :
154 : //decoding objects
155 : //AliTOFTRMGlobalHeader *fTRMGlobalHeader; //TRM global header
156 : //AliTOFTRMGlobalTrailer *fTRMGlobalTrailer; //TRM global trailer
157 : //AliTOFTRMChainHeader *fTRMChainHeader; //TRM chain header
158 : //AliTOFTRMChainTrailer *fTRMChainTrailer; //TRM chain trailer
159 : //AliTOFTDCPackedHit *fTDCPackedHit; //TDC packed hit
160 : //AliTOFTDCUnpackedHit *fTDCUnpackedHit; //TDC unpacked hit
161 : //AliTOFTRMTDCError *fTRMTDCError; //TRM TDC error
162 : //AliTOFTRMDiagnosticErrorWord1 *fTRMDiagnosticErrorWord1; //TRM diagnostic error word 1
163 : //AliTOFTRMDiagnosticErrorWord2 *fTRMDiagnosticErrorWord2; //TRM diagnostica error word 2
164 :
165 : //SPIDER variables
166 : Int_t fSpiderCurrentSlotID; //SPIDER current slot ID
167 : Int_t fSpiderCurrentChain; //SPIDER current chain
168 : Int_t fSpiderCurrentTDC; //SPIDER current TDC
169 : Bool_t fSpiderLeadingFlag[8]; //SPIDER channel leading flag
170 : AliTOFHitData fSpiderLeadingHit[8]; //SPIDER channel leading hit
171 :
172 26 : ClassDef(AliTOFDecoder, 2)
173 : };
174 :
175 : #endif /* ALITOFDECODER_H */
|