forked from ALICEHLT/AliRoot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAliTOFDecoder.h
More file actions
175 lines (145 loc) · 6.31 KB
/
AliTOFDecoder.h
File metadata and controls
175 lines (145 loc) · 6.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#ifndef ALITOFDECODER_H
#define ALITOFDECODER_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice */
/* $Id$ */
///////////////////////////////////////////////////////////////
// //
// This class provides the basic TOF raw data decoder. //
// //
///////////////////////////////////////////////////////////////
//define decoder status and bits
#define DRM_BIT 0x1
#define LTM_BIT 0x2
#define TRM_BIT 0x4
#define CHAIN_A_BIT 0x8
#define CHAIN_B_BIT 0x10
#define DRM_HEADER_STATUS 0x0
#define DRM_TRAILER_STATUS (DRM_BIT)
#define LTM_HEADER_STATUS (DRM_BIT)
#define LTM_TRAILER_STATUS (DRM_BIT|LTM_BIT)
#define TRM_HEADER_STATUS (DRM_BIT)
#define TRM_TRAILER_STATUS (DRM_BIT|TRM_BIT)
#define CHAIN_A_HEADER_STATUS (DRM_BIT|TRM_BIT)
#define CHAIN_A_TRAILER_STATUS (DRM_BIT|TRM_BIT|CHAIN_A_BIT)
#define CHAIN_B_HEADER_STATUS (DRM_BIT|TRM_BIT)
#define CHAIN_B_TRAILER_STATUS (DRM_BIT|TRM_BIT|CHAIN_B_BIT)
#define CHAIN_A_TDC_HIT_STATUS (DRM_BIT|TRM_BIT|CHAIN_A_BIT)
#define CHAIN_B_TDC_HIT_STATUS (DRM_BIT|TRM_BIT|CHAIN_B_BIT)
//define DRM/LTM fixed number of words
#define DRM_DATA_WORDS 5
#define LTM_DATA_WORDS 48
//define masks
#define WORD_TYPE_MASK 0xf0000000
#define SLOT_ID_MASK 0x0000000f
//define word types
#define GLOBAL_HEADER 0x40000000
#define GLOBAL_TRAILER 0x50000000
#define CHAIN_A_HEADER 0x00000000
#define CHAIN_A_TRAILER 0x10000000
#define CHAIN_B_HEADER 0x20000000
#define CHAIN_B_TRAILER 0x30000000
#define ERROR 0x60000000
#define FILLER 0x70000000
//define TRM ACQ status
#define PACKING_ENABLED_ACQ 0x0
#define LEADING_ONLY_ACQ 0x1
#define TRAILING_ONLY_ACQ 0x2
#define PACKING_DISABLED_ACQ 0x3
//define TDC hit PS status
#define PACKED_HIT_PS 0x0
#define LEADING_HIT_PS 0x1
#define TRAILING_HIT_PS 0x2
#define TOT_OVF_HIT_PS 0x3
//define mandatory numbers
#define N_EQUIPMENT 72
#define N_DDL N_EQUIPMENT
#define N_TRM 10
#define N_CHAIN 2
#define N_TDC 15
#define N_CHANNEL 8
#define TRM_FIRST_SLOT_ID 3
#define TRM_LAST_SLOT_ID 12
#define TIME_BIN_WIDTH 24.4e-3//ns
#define TOT_BIN_WIDTH 48.8e-3//ns
#define TIME_TO_TOT_BIN_WIDTH ( TIME_BIN_WIDTH / TOT_BIN_WIDTH )
#define TOT_TO_TIME_BIN_WIDTH ( TOT_BIN_WIDTH / TIME_BIN_WIDTH )
//max hit number in a TDC
#define MAX_TDC_HIT_NUMBER 100
//max TDC errors
#define MAX_TDC_ERROR_NUMBER 1000
//max hit number in a TRM
#define MAX_TRM_HIT_NUMBER 2400
#include "TObject.h"
#include "AliTOFRawDataFormat.h"
#include "AliTOFHitData.h"
//#include "AliTOFHitDataBuffer.h"
//#include "AliTOFGeometry.h"
class AliTOFHitDataBuffer;
struct AliRawDataHeader;
struct AliRawDataHeaderV3;
class AliTOFDecoder : public TObject
{
public:
AliTOFDecoder(); //default constructor
AliTOFDecoder(AliTOFHitDataBuffer *DB, AliTOFHitDataBuffer *PDB); //constructor
AliTOFDecoder(const AliTOFDecoder &source); //copy constructor
AliTOFDecoder &operator = (const AliTOFDecoder &source); //operator =
~AliTOFDecoder(); //distructor
Bool_t Decode(const UInt_t *rawData, Int_t nWords, const AliRawDataHeader *cdh, const AliRawDataHeaderV3 *cdhV3=0); //main decode function
void SetVerbose(Int_t Verbose = 1) {fVerbose = Verbose;}; //set verbose level
void SetV2718Patch(Bool_t V2718Patch = kTRUE) {fV2718Patch = V2718Patch;}; //set V2718 patch (no DRM)
void SetDataBuffer(AliTOFHitDataBuffer *DB) {fDataBuffer = DB;}; //set up data buffer
void SetPackedDataBuffer(AliTOFHitDataBuffer *PDB) {fPackedDataBuffer = PDB;}; //set up packed data buffer
void GetArrayDDL(Int_t* array, Int_t iDDL); // method to return array of TOFchannels corresponding to a given DDL id
void PrintStack(const UInt_t *rawData, Int_t nWords, const AliRawDataHeader *cdh, const AliRawDataHeaderV3 *cdhV3=0);
enum {
kMinPlate0=0,kMaxPlate0=2,
kMinStrip0=0,kMaxStrip0=6,
kMinPadz0=0,kMaxPadz0=1,
kMinPadx0=0,kMaxPadx0=23,
kMinPlate1=0,kMaxPlate1=2,
kMinStrip1=0,kMaxStrip1=7,
kMinPadz1=0,kMaxPadz1=1,
kMinPadx1=24,kMaxPadx1=47,
kMinPlate2=2,kMaxPlate2=4,
kMinStrip2=8,kMaxStrip2=14,
kMinPadz2=0,kMaxPadz2=1,
kMinPadx2=24,kMaxPadx2=47,
kMinPlate3=2,kMaxPlate3=4,
kMinStrip3=7,kMaxStrip3=14,
kMinPadz3=0,kMaxPadz3=1,
kMinPadx3=0,kMaxPadx3=23
};
private:
/* SPIDER
* - Software Packing Inside Decoding Routines -
* developed by Roberto Preghenella (R+)
* use at your own risk
*/
Bool_t InitializeSpider(); //initialize SPIDER routine
Bool_t ResetSpider(); //reset SPIDER routine
Bool_t Spider(AliTOFHitData &hitData); //main SPIDER routine
Int_t fVerbose; //verbose flag
Bool_t fV2718Patch; //V2718 patch flag
AliTOFHitDataBuffer *fDataBuffer; //data buffer pointer
AliTOFHitDataBuffer *fPackedDataBuffer; //packed data buffe pointer
//decoding objects
//AliTOFTRMGlobalHeader *fTRMGlobalHeader; //TRM global header
//AliTOFTRMGlobalTrailer *fTRMGlobalTrailer; //TRM global trailer
//AliTOFTRMChainHeader *fTRMChainHeader; //TRM chain header
//AliTOFTRMChainTrailer *fTRMChainTrailer; //TRM chain trailer
//AliTOFTDCPackedHit *fTDCPackedHit; //TDC packed hit
//AliTOFTDCUnpackedHit *fTDCUnpackedHit; //TDC unpacked hit
//AliTOFTRMTDCError *fTRMTDCError; //TRM TDC error
//AliTOFTRMDiagnosticErrorWord1 *fTRMDiagnosticErrorWord1; //TRM diagnostic error word 1
//AliTOFTRMDiagnosticErrorWord2 *fTRMDiagnosticErrorWord2; //TRM diagnostica error word 2
//SPIDER variables
Int_t fSpiderCurrentSlotID; //SPIDER current slot ID
Int_t fSpiderCurrentChain; //SPIDER current chain
Int_t fSpiderCurrentTDC; //SPIDER current TDC
Bool_t fSpiderLeadingFlag[8]; //SPIDER channel leading flag
AliTOFHitData fSpiderLeadingHit[8]; //SPIDER channel leading hit
ClassDef(AliTOFDecoder, 2)
};
#endif /* ALITOFDECODER_H */