TRD pretrigger simulation based on digits of T0, V0 and TOF, simulation control is...
[u/mrichter/AliRoot.git] / TRD / AliTRDptrgParam.h
CommitLineData
f9720615 1#ifndef ALITRDPTRGPARAM_H
2#define ALITRDPTRGPARAM_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6/* $Id$ */
7
8// --------------------------------------------------------
9//
10// Singleton class to hold the parameters steering the PTRG
11//
12// --------------------------------------------------------
13#include "TObject.h"
14
15 enum AliTRDptrgFEBType_t{ kUndefined = (Int_t)0,
16 kTZERO = (Int_t)1,
17 kVZERO = (Int_t)2 };
18 enum AliTRDptrgOperatingMode_t{ kHits = (Int_t)0, kDigits = (Int_t)1 };
19 enum AliTRDptrgFEBPosition_t{ kB = (Int_t)0,
20 kA = (Int_t)1,
21 kC = (Int_t)2,
22 kUnknown = (Int_t)3 };
23
24
25class AliTRDptrgParam : public TObject {
26 public:
27 struct AliTRDptrgPTmasks {
28 Bool_t fCBA[2]; // contribute CB-A look up results to pretrigger decision?
29 Bool_t fCBC[2]; // contribute CB-C look up results to pretrigger decision?
30 Bool_t fLUTs[2]; // CB-B look up results contribution to pretrigger decision
31 Bool_t fTLMU[8]; // TLMU output signal contribution to pretrigger decisions
32
33 AliTRDptrgPTmasks() {
34 fCBA[0] = kFALSE;
35 fCBA[1] = kFALSE;
36 fCBC[0] = kFALSE;
37 fCBC[1] = kFALSE;
38 fLUTs[0] = kFALSE;
39 fLUTs[1] = kFALSE;
40 for (Int_t i = 0; i < 8; i++) {
41 fTLMU[i] = kFALSE;
42 }
43 }
44 };
45 virtual ~AliTRDptrgParam();
46
47 static AliTRDptrgParam *Instance(); // Singleton
48 static void Terminate(); // delete Singleton
49
50 void LoadStandardConfiguration(); // initialize with standard values
51 Bool_t LoadConfigurationFromFile(TString filename); // load file
52
53 Int_t GenerateLUTs(); // generates all LUTs
54
55 // --- GETTER FUNCTIONS -----------------------------------------------------
56 // -- TLMU --
57 const UInt_t* GetTLMUInputMask() const { return this->fTLMUInputMask; };
58 // get TLMU input mask
59
60 UInt_t** GetTLMUcmatrices() const { return this->fTLMUcmatrices; };
61 // get TLMU coincidence matrices
62
63 UInt_t** GetTLMUmultiplicity() const { return this->fTLMUmultiplicity; };
64 // get TLMU multiplicity slices
65
66 Int_t** GetTLMUoutput() const { return this->fTLMUoutput; };
67 // get TLMU output mux configuration
68
69 // -- T0 --
70 UInt_t* GetFEBT0Thresholds(AliTRDptrgFEBPosition_t FEBposition) const;
71 // get T0 FEB Thresholds
72
73 Int_t* GetFEBT0LUT(AliTRDptrgFEBPosition_t FEBposition, Int_t iLUT);
74 // get T0 FEB LUTs
75
76 // -- V0 --
77 UInt_t* GetFEBV0Thresholds(AliTRDptrgFEBPosition_t FEBposition, Int_t iCard) const;
78 // get V0 FEB Thresholds
79
80 Int_t* GetFEBV0LUT(AliTRDptrgFEBPosition_t FEBposition, Int_t iCard,
81 Int_t iLUT);
82 // get V0 FEB LUTs
83
84 Int_t* GetCBLUT(UInt_t CB, Int_t LUTid);
85 // returns the corresponding LUT (control boxes only)
86
87 const AliTRDptrgPTmasks* GetPTmasks() const { return &fPTmasks; };
88 // returns the list containing the information which CB-B inputs are masked
89 // out or forwarded as pre trigger output to the CTP
90
91
92 Int_t CheckVariables() const; // returns -1 if a variable is already deleted
93
94 protected:
95 UInt_t GetMultiplicity(UInt_t BitVector) const;
96 // returns the multiplicity ('1's)
97
98 UInt_t GetMultiplicity(Int_t BitVector) const;
99 // returns the multiplicity ('1's)
100
101 // helper functions for configuration file reading
102 // -----------------------------------------------
103 Bool_t ParseTLMU(TString identifier, TString value);
104 // parses the TLMU configuration parameters
105
106 Bool_t ParseCBB(TString identifier, TString value);
107 // parses the CBB configuration parameters
108
109 Bool_t ParseCBAC(TString identifier, TString value);
110 // parses the CB-A and CB-C configuration parameters
111
112 Bool_t ParseFEB(TString identifier, TString value);
113 // parses the FEB configuration parameters
114
115 Bool_t ParseMultiplicityCondition(TString condition, UInt_t* threshold,
116 UInt_t* mask);
117 // parses a multiplicity condition "M(#mask#)>#threshold#"
118
119 UInt_t BinaryTStringToInt(TString number) const;
120 // converts TString containing a binary number to a unsigned integer
121
122 void SplitUpValues(TString value, TObjArray& arr);
123 // splits a value string which contains multiple values seperated by ' '
124 // and '\t'
125
126 TString CleanTString(TString string);
127 // removes ' ' and '\t' in a TString
128
129 void PrepareLine(TString line, TString& identifier, TString& value);
130 // divides identifier and value (seperator is the first ' ' or '\t'
131
132
133 // (helper) functions for conversion of logical equations into LUTs
134 // ----------------------------------------------------------------
135 Int_t LookUp(TString* const identifier) const; // translates an identifier used in a
136 // logical equation into an address bit of the corresponding LUT
137
138 void MergeResults(TArrayI*& partResult1, TArrayI*& partResult2,
139 TArrayI*& results, TArrayI*& signalsInvolved1,
140 TArrayI*& signalsInvolved2, TArrayI*& signalsInvolved,
141 Bool_t useOR);
142 // merges the results of to logical equation parts
143
144 void ConvertLogicalEqToBitVectors(TString eq, TArrayI*& results,
145 TArrayI*& signalsInvolved);
146 // converts logical equations to bit vectors
147 // neglected input signals are for now assumed to be 0!
148
149 void CheckSignalsInvolved(TArrayI*& results, TArrayI*& signalsInvolved,
150 Int_t inputWidth);
151 // adds all signal combinations needed to behave correctly in every state of
152 // neglected signals
153
154 Int_t* GenerateLUTbasedOnEq(TString eq, Int_t inputWidth, Int_t initValue);
155 // generates a lut based on a logical functions (uses the functions above)
156
157 static AliTRDptrgParam *fgInstance; // instance pointer
158
159 // TLMU configuration --------------------------------------------------------
160 UInt_t fTLMUInputMask[18]; // masks TOF-to-TRD bits
161 UInt_t fTLMUInputStretch; // designates how long TLMU input is stretched
162 UInt_t** fTLMUcmatrices; // [matrix][section] unsigned int values
163 // Bits 0..17 identify supermodules, bits equal 1 are checked for coincidence
164
165 UInt_t** fTLMUmultiplicity; // [slice][0 = lower bound, 1 = upper bound]
166 // use a lower bound above 576 to disable
167
168 Int_t** fTLMUoutput; // [output][0 = cmatrix, 1 = multslice]
169 // output bit assignment, -1 disables
170
171 // T0 ------------------------------------------------------------------------
172 // [position][channel] 12 channels at A and C side
173 UInt_t** fFEBT0Thresholds; // threshold for analog value discrimination
174 //UInt_t** fFEBT0Delays; // delay is not used in simulation right now //TODO
175
176 // [position][LUT][0 = threshold, 1 = bitmask] 2 LUTs at A and C side
177 UInt_t*** fFEBT0Multiplicities; // multiplicity threshold for T0
178 Int_t*** fFEBT0LUTs; // look up tables [position][LUT][entry]
179
180 // V0 ------------------------------------------------------------------------
181 // [position][feb][channel] 4x8 channels per side (A and C)
182 UInt_t*** fFEBV0Thresholds; // threshold for analog value discrimation
183 //UInt_t** fFEBV0Delays; // delay is not used in simulation right now //TODO
184
185 // [position][feb][LUT][0 = threshold, 1 = bitmask] 2 LUTs per FEB
186 // (4 per Side) at each side ( A and C)
187 UInt_t**** fFEBV0Multiplicities; // multiplicity threshold for V0
188 Int_t**** fFEBV0LUTs; // look up tables [position][feb][LUT][entry]
189
190 // CB-{A/B/C}
191 // 0 = B, 1 = A, 2 = C
192 Int_t*** fCBLUTs; // control box look up tables
193
194 // CB-A ----------------------------------------------------------------------
195 TString fCBALUTequX; // logical equation used for generation of LUT X of CB-A
196 TString fCBALUTequY; // logical equation used for generation of LUT Y of CB-A
197
198 // CB-C ----------------------------------------------------------------------
199 TString fCBCLUTequX; // logical equation used for generation of LUT X of CB-C
200 TString fCBCLUTequY; // logical equation used for generation of LUT Y of CB-C
201
202 // CBB -----------------------------------------------------------------------
203 TString fCBBLUTequX; // logical equation used for generation of LUT X of CB-B
204 TString fCBBLUTequY; // logical equation used for generation of LUT Y of CB-B
205
206 // CTP -----------------------------------------------------------------------
207 // PT mask
208 AliTRDptrgPTmasks fPTmasks;
209 // masks usage of internal signals for the pretrigger wake up signal
210
211
212 // CBB-LUT to TriggerInput assignment
213
214 // class state ---------------------------------------------------------------
215
216 private:
217 AliTRDptrgParam(); // instance only via Instance()
218 AliTRDptrgParam(const AliTRDptrgParam &rhs); // not implemented
219 AliTRDptrgParam& operator=(const AliTRDptrgParam &rhs); // not implemented
220
221 ClassDef(AliTRDptrgParam, 1);
222};
223#endif