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