Print centrality estimator when providing centrality info (Diego)
[u/mrichter/AliRoot.git] / TRD / AliTRDptrgCBAC.cxx
CommitLineData
f9720615 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
18////////////////////////////////////////////////////////////////////////////
19// //
20// Pre-Trigger Control-Box A or C for simulation //
21// //
22// Authors: F. Reidt (Felix.Reidt@cern.ch) //
23// //
24////////////////////////////////////////////////////////////////////////////
25
26#include <stdio.h>
27
28#include "AliRun.h"
29#include "AliRunLoader.h"
30
31#include "AliLog.h"
32
33#include "AliTRDptrgParam.h"
34#include "AliTRDptrgFEB.h"
35#include "AliTRDptrgLUT.h"
36
37#include "AliTRDptrgCBAC.h"
38
39ClassImp(AliTRDptrgCBAC)
40
41//______________________________________________________________________________
42AliTRDptrgCBAC::AliTRDptrgCBAC(AliRunLoader *rl)
43 : TObject(),
44 fRunLoader(rl),
45 fLUTArray(),
46 fFEBArray(),
47 fPosition(kUnknown),
48 fOperatingMode(kDigits),
49 fParam(0x0)
50{
c7dbd0bf 51 //
f9720615 52 // ctor
c7dbd0bf 53 //
54
f9720615 55 AliError("default ctor - usage not recommended");
c7dbd0bf 56
f9720615 57}
58
59//______________________________________________________________________________
60AliTRDptrgCBAC::AliTRDptrgCBAC(AliRunLoader *rl,
61 AliTRDptrgFEBPosition_t position,
62 AliTRDptrgOperatingMode_t operatingMode,
63 AliTRDptrgParam *param)
64 : TObject(),
65 fRunLoader(rl),
66 fLUTArray(),
67 fFEBArray(),
68 fPosition(position),
69 fOperatingMode(operatingMode),
70 fParam(param)
71{
c7dbd0bf 72 //
f9720615 73 // ctor
c7dbd0bf 74 //
75
f9720615 76 this->LoadParams(); // load parameters
77
78 // T0
79 AliTRDptrgFEB *FEB = new AliTRDptrgFEB(this->fRunLoader, kTZERO,
80 this->fOperatingMode, this->fPosition,
81 0, this->fParam);
82 this->fFEBArray.AddLast(FEB);
83
84 // V0-1
85 FEB = new AliTRDptrgFEB(this->fRunLoader, kVZERO, this->fOperatingMode,
86 this->fPosition, 1, this->fParam);
87 this->fFEBArray.AddLast(FEB);
88
89 // V0-2
90 FEB = new AliTRDptrgFEB(this->fRunLoader, kVZERO, this->fOperatingMode,
91 this->fPosition, 2, this->fParam);
92 this->fFEBArray.AddLast(FEB);
93
94 // V0-3
95 FEB = new AliTRDptrgFEB(this->fRunLoader, kVZERO, this->fOperatingMode,
96 this->fPosition, 3, this->fParam);
97 this->fFEBArray.AddLast(FEB);
98
99 // V0-4
100 FEB = new AliTRDptrgFEB(this->fRunLoader, kVZERO, this->fOperatingMode,
101 this->fPosition, 4, this->fParam);
102 this->fFEBArray.AddLast(FEB);
103
104}
105
106//______________________________________________________________________________
107Bool_t AliTRDptrgCBAC::LoadParams()
108{
c7dbd0bf 109 //
110 // Load configuration parameters
111 //
f9720615 112
113 if (this->fParam != 0x0) {
114 // read AliTRDptrgParam
115
116 // get LUTs
c7dbd0bf 117 AliTRDptrgLUT* lut = 0x0;
f9720615 118 // 0
c7dbd0bf 119 lut = new AliTRDptrgLUT();
120 lut->InitTable(10, 10, this->fParam->GetCBLUT(this->fPosition, 0), kFALSE);
f9720615 121 // do not copy table data
c7dbd0bf 122 this->fLUTArray.AddLast(lut);
f9720615 123 // 1
c7dbd0bf 124 lut = new AliTRDptrgLUT();
125 lut->InitTable(10, 10, this->fParam->GetCBLUT(this->fPosition, 1), kFALSE);
e51605d9 126 // do not copy table data
c7dbd0bf 127 this->fLUTArray.AddLast(lut);
f9720615 128 }
129 else {
130 // load default parameters
c7dbd0bf 131 AliTRDptrgLUT* lut = new AliTRDptrgLUT();
132 this->fLUTArray.AddLast(lut);
133 lut = new AliTRDptrgLUT();
134 this->fLUTArray.AddLast(lut);
e51605d9 135 // the following lines are only needed for test reasons
c7dbd0bf 136 lut = dynamic_cast<AliTRDptrgLUT*>(this->fLUTArray.At(0));
137 if (lut) {
138 Int_t* initData = new Int_t[1024]; // 2^10
139 for (Int_t i = 0; i < 1024; i++ ) {
140 initData[i] = i;
141 }
142 lut->InitTable(10, 10, initData, kTRUE); // copy initData
143 lut = dynamic_cast<AliTRDptrgLUT*>(this->fLUTArray.At(1));
144 if (lut) {
145 for (Int_t i = 1023; i >= 0; i--) {
146 initData[31 - i] = i; // inverse ramp
147 }
148 lut->InitTable(10, 10, initData, kTRUE); // copy initData
149 }
f9720615 150 }
f9720615 151 }
c7dbd0bf 152
f9720615 153 return false;
c7dbd0bf 154
f9720615 155}
156
157//______________________________________________________________________________
158AliTRDptrgCBAC::~AliTRDptrgCBAC()
159{
c7dbd0bf 160 //
161 // Destructor
162 //
f9720615 163
164 this->fLUTArray.Delete();
165 this->fFEBArray.Delete();
c7dbd0bf 166
f9720615 167}
168
169//______________________________________________________________________________
170Int_t* AliTRDptrgCBAC::Simulate()
e51605d9 171{
c7dbd0bf 172 //
f9720615 173 // Simulate the CBAC behavior of event
c7dbd0bf 174 //
175
f9720615 176 Int_t nFEBs = this->fFEBArray.GetEntries();
177 Int_t nLUTs = this->fLUTArray.GetEntries();
178
179 Int_t inputVector = 0x0;
180
181 Int_t** partResults = 0x0;
182 partResults = new Int_t* [nFEBs];
183
f9720615 184 for (Int_t iFEB = 0; iFEB < nFEBs; iFEB++) {
c7dbd0bf 185 AliTRDptrgFEB *feb = 0x0;
186 if ((feb = dynamic_cast<AliTRDptrgFEB*>(this->fFEBArray.At(iFEB)))) {
187 partResults[iFEB] = feb->Simulate();
188 }
f9720615 189 }
190
191 // combine partResults and create inputVector
192 Int_t iBit = 0;
193 Int_t mask = 0x1;
194 for (Int_t iFEB = 0; iFEB < nFEBs ; iFEB++) {
195 for (Int_t j = 1; j <= partResults[iFEB][0]; j++) {
c7dbd0bf 196 AliTRDptrgLUT *lut0 = dynamic_cast<AliTRDptrgLUT*>(this->fLUTArray[0]);
197 AliTRDptrgLUT *lut1 = dynamic_cast<AliTRDptrgLUT*>(this->fLUTArray[1]);
198 if (lut0 && lut1) {
199 if ((iBit > lut0->GetInputWidth())
200 || (iBit > lut1->GetInputWidth())) {
201 AliError("FEB result width does not match CB-A/C input with!");
202 }
f9720615 203 }
e51605d9 204 iBit++;
f9720615 205 if (partResults[iFEB][j] > 0) {
206 inputVector |= mask; // Add bit to the corresponding inputVector
207 mask <<= 1;
208 }
209 }
210 }
f9720615 211
212 AliDebug(5, Form("Inputvector: 0x%x", inputVector));
213
214 // perform look up
215 Int_t* result = new Int_t[nLUTs + 1]; // generate new return array
216 result[0] = nLUTs; // storage array length in the first array value
217 for (Int_t iLUT = 0; iLUT < nLUTs; iLUT++) {
218 // process the return value for each LUT and store the result in the array
c7dbd0bf 219 AliTRDptrgLUT *lutTmp = 0x0;
220 if ((lutTmp = dynamic_cast<AliTRDptrgLUT*>(this->fLUTArray[iLUT]))) {
221 result[iLUT + 1] = lutTmp->LookUp(inputVector);
222 }
f9720615 223 AliDebug(4, Form("CBAC result[%d] = 0x%x",(iLUT + 1),result[iLUT + 1]));
224 }
225
c7dbd0bf 226 // Clean up
227 delete [] partResults;
228
f9720615 229 return result;
c7dbd0bf 230
f9720615 231}
232
233
234