]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDfeeParam.cxx
AliDCSClient "multiSplit" option added in the DCS configuration
[u/mrichter/AliRoot.git] / TRD / AliTRDfeeParam.cxx
CommitLineData
022e76c3 1
2/**************************************************************************
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
7 * *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
16
17/* $Id$ */
18
ecf39416 19/*
20
21 New release on 2007/08/17
22
23The default raw data version (now fRAWversion ) is set to 3
24in the constructer because version 3 raw data read and write
25are fully debugged.
26
27*/
28
022e76c3 29//////////////////////////////////////////////////
30// //
31// TRD front end electronics parameters class //
32// Contains all FEE (MCM, TRAP, PASA) related //
33// parameters, constants, and mapping. //
34// //
35//////////////////////////////////////////////////
36
37#include <TMath.h>
38
ecf39416 39#include "AliLog.h"
022e76c3 40#include "AliTRDfeeParam.h"
41#include "AliTRDgeometry.h"
42#include "AliTRDCommonParam.h"
43
44ClassImp(AliTRDfeeParam)
45
46AliTRDfeeParam *AliTRDfeeParam::fgInstance = 0;
47Bool_t AliTRDfeeParam::fgTerminated = kFALSE;
48
49//_____________________________________________________________________________
50AliTRDfeeParam* AliTRDfeeParam::Instance()
51{
52 // Instance constructor
53
54 if (fgTerminated != kFALSE) {
55 return 0;
56 }
57
58 if (fgInstance == 0) {
59 fgInstance = new AliTRDfeeParam();
60 }
61
62 return fgInstance;
63}
64
65//_____________________________________________________________________________
66void AliTRDfeeParam::Terminate()
67{
68 //
69 // Terminate the class and release memory
70 //
71
72 fgTerminated = kTRUE;
73
74 if (fgInstance != 0) {
75 delete fgInstance;
76 fgInstance = 0;
77 }
78}
79
80//_____________________________________________________________________________
81AliTRDfeeParam::AliTRDfeeParam()
82 :TObject()
022e76c3 83 ,fCP(0)
dfd03fc3 84 ,fTFr1(0)
85 ,fTFr2(0)
86 ,fTFc1(0)
87 ,fTFc2(0)
2ec0bacc 88 ,fEBsglIndThr(5)
89 ,fEBsumIndThr(5)
90 ,fEBindLUT(0xF0)
91 ,fEBignoreNeighbour(0)
ecf39416 92 ,fRAWversion(3)
93 ,fRAWstoreRaw(kTRUE)
022e76c3 94{
95 //
96 // Default constructor
97 //
98
99 // PASA V.4
dfd03fc3 100 if (fgkTFnExp == 1) {
101 fTFr1 = 1.1563;
102 fTFr2 = 0.1299;
103 fTFc1 = 0.0657;
104 fTFc2 = 0.0000;
022e76c3 105 }
dfd03fc3 106 else if (fgkTFnExp == 2) {
107 fTFr1 = 1.1563;
108 fTFr2 = 0.1299;
109 fTFc1 = 0.1141;
110 fTFc2 = 0.6241;
022e76c3 111 }
112
113 // fGeo = AliTRDgeometry::Instance();
114 fCP = AliTRDCommonParam::Instance();
115
116}
117
118//_____________________________________________________________________________
119AliTRDfeeParam::AliTRDfeeParam(const AliTRDfeeParam &p)
120 :TObject(p)
121 // ,fGeo(p.fGeo)
122 ,fCP(p.fCP)
dfd03fc3 123 ,fTFr1(p.fTFr1)
124 ,fTFr2(p.fTFr2)
125 ,fTFc1(p.fTFc1)
126 ,fTFc2(p.fTFc2)
2ec0bacc 127 ,fEBsglIndThr(p.fEBsglIndThr)
128 ,fEBsumIndThr(p.fEBsumIndThr)
129 ,fEBindLUT(p.fEBindLUT)
130 ,fEBignoreNeighbour (p.fEBignoreNeighbour)
ecf39416 131 ,fRAWversion(p.fRAWversion)
132 ,fRAWstoreRaw(p.fRAWstoreRaw)
022e76c3 133{
134 //
135 // AliTRDfeeParam copy constructor
136 //
137}
138
139//_____________________________________________________________________________
140AliTRDfeeParam::~AliTRDfeeParam()
141{
142 //
143 // AliTRDfeeParam destructor
144 //
145}
146
147//_____________________________________________________________________________
148AliTRDfeeParam &AliTRDfeeParam::operator=(const AliTRDfeeParam &p)
149{
150 //
151 // Assignment operator
152 //
153
154 if (this != &p) {
155 ((AliTRDfeeParam &) p).Copy(*this);
156 }
157 return *this;
158}
159
160//_____________________________________________________________________________
161void AliTRDfeeParam::Copy(TObject &p) const
162{
163 //
164 // Copy function
165 //
166
167 // ((AliTRDfeeParam &) p).fGeo = fGeo;
ecf39416 168 ((AliTRDfeeParam &) p).fCP = fCP;
169 ((AliTRDfeeParam &) p).fTFr1 = fTFr1;
170 ((AliTRDfeeParam &) p).fTFr2 = fTFr2;
171 ((AliTRDfeeParam &) p).fTFc1 = fTFc1;
172 ((AliTRDfeeParam &) p).fTFc2 = fTFc2;
2ec0bacc 173 ((AliTRDfeeParam &) p).fEBsglIndThr = fEBsglIndThr;
174 ((AliTRDfeeParam &) p).fEBsumIndThr = fEBsumIndThr;
175 ((AliTRDfeeParam &) p).fEBindLUT = fEBindLUT;
176 ((AliTRDfeeParam &) p).fEBignoreNeighbour = fEBignoreNeighbour;
ecf39416 177 ((AliTRDfeeParam &) p).fRAWversion = fRAWversion;
178 ((AliTRDfeeParam &) p).fRAWstoreRaw = fRAWstoreRaw;
022e76c3 179
180 TObject::Copy(p);
181}
182
183//_____________________________________________________________________________
184Int_t AliTRDfeeParam::GetPadRowFromMCM(Int_t irob, Int_t imcm) const
185{
186 //
187 // return on which pad row this mcm sits
188 //
189
190 return fgkNmcmRobInRow*(irob/2) + imcm/fgkNmcmRobInCol;
191}
192
193//_____________________________________________________________________________
194Int_t AliTRDfeeParam::GetPadColFromADC(Int_t irob, Int_t imcm, Int_t iadc) const
195{
196 //
ecf39416 197 // Return which pad is connected to this adc channel.
198 //
199 // Return virtual pad number even if ADC is outside chamber
200 // to keep compatibility of data processing at the edge MCM.
201 // User has to check that this is in the chamber if it is essential.
202 // Return -100 if iadc is invalid.
203 //
022e76c3 204 // Caution: ADC ordering in the online data is opposite to the pad column ordering.
205 // And it is not one-by-one correspondence. Precise drawing can be found in:
206 // http://wiki.kip.uni-heidelberg.de/ti/TRD/index.php/Image:ROB_MCM_numbering.pdf
207
ecf39416 208 if (iadc < 0 || iadc > 19 ) return -100;
022e76c3 209 Int_t mcmcol = imcm%fgkNmcmRobInCol + GetRobSide(irob)*fgkNmcmRobInCol; // MCM column number on ROC [0..7]
210 Int_t padcol = mcmcol*fgkNcolMcm + fgkNcolMcm + 1 - iadc;
ecf39416 211 // if( padcol < 0 || padcol >= fgkNcol ) return -1; // thisi s commented because of reson above KO
022e76c3 212 return padcol;
213}
214
215//_____________________________________________________________________________
216Int_t AliTRDfeeParam::GetMCMfromPad(Int_t irow, Int_t icol) const
217{
218 //
219 // Return on which MCM this pad is directry connected.
220 // Return -1 for error.
221 //
222
223 if ( irow < 0 || icol < 0 || irow > fgkNrowC1 || icol > fgkNcol ) return -1;
224
225 return (icol%(fgkNcol/2))/fgkNcolMcm + fgkNmcmRobInCol*(irow%fgkNmcmRobInRow);
226}
227
228//_____________________________________________________________________________
229Int_t AliTRDfeeParam::GetROBfromPad(Int_t irow, Int_t icol) const
230{
231 //
232 // return on which rob this pad is
233 //
234
235 return (irow/fgkNmcmRobInRow)*2 + GetColSide(icol);
236}
237
238//_____________________________________________________________________________
239Int_t AliTRDfeeParam::GetRobSide(Int_t irob) const
240{
241 //
242 // return on which side this rob sits (A side = 0, B side = 1)
243 //
244
245 if ( irob < 0 || irob >= fgkNrobC1 ) return -1;
246 return irob%2;
247}
248
249//_____________________________________________________________________________
250Int_t AliTRDfeeParam::GetColSide(Int_t icol) const
251{
252 //
253 // return on which side this column sits (A side = 0, B side = 1)
254 //
255
256 if ( icol < 0 || icol >= fgkNcol ) return -1;
257 return icol/(fgkNcol/2);
258}
259
260//
261//void AliTRDfeeParam::GetFilterParam( Float_t &r1, Float_t &r2, Float_t &c1, Float_t &c2, Float_t &ped ) const
262//{
263 //
264 // Return current filter parameter
265 //
266
267 // r1 = fR1;
268 //r2 = fR2;
269 //c1 = fC1;
270 //c2 = fC2;
271 //ped = fPedestal;
272//};
ecf39416 273
2ec0bacc 274//_____________________________________________________________________________
275void AliTRDfeeParam::SetEBsglIndThr(Int_t val)
276{
277 // Set Event Buffer Sngle Indicator Threshold (EBIS in TRAP conf).
278 // Timebin is indicated if ADC value >= val.
279
280 if( val >= 0 && val <= 1023 ) {
281 fEBsglIndThr = val;
282 } else {
283 AliError(Form("EBsglIndThr value %d is out of range, keep previously set value (%d).",
284 val, fEBsglIndThr));
285 }
286}
287
288//_____________________________________________________________________________
289void AliTRDfeeParam::SetEBsumIndThr(Int_t val)
290{
291 // Set Event Buffer Sum Indicator Threshold (EBIT in TRAP conf).
292 // Timebin is indicated if ADC sum value >= val.
293
294 if( val >= 0 && val <= 4095 ) {
295 fEBsumIndThr = val;
296 } else {
297 AliError(Form("EBsumIndThr value %d is out of range, keep previously set value (%d).",
298 val, fEBsumIndThr));
299 }
300}
301
302
303//_____________________________________________________________________________
304void AliTRDfeeParam::SetEBindLUT(Int_t val)
305{
306 // Set Event Buffer Indicator Look-Up Table (EBIL in TRAP conf).
307 // 8 bits value forms lookup table for combination of three criterions.
308
309 if( val >= 0 && val <= 255 ) {
310 fEBindLUT = val;
311 } else {
312 AliError(Form("EBindLUT value %d is out of range, keep previously set value (%d).",
313 val, fEBindLUT));
314 }
315}
316
317//_____________________________________________________________________________
318void AliTRDfeeParam::SetEBignoreNeighbour(Int_t val)
319{
320 // Set Event Buffer Indicator Neighbor Sensitivity. (EBIN in TRAP conf).
321 // If 0, take account of neigbor's values.
322
323 if( val >= 0 && val <= 1 ) {
324 fEBignoreNeighbour = val;
325 } else {
326 AliError(Form("EBignoreNeighbour value %d is out of range, keep previously set value (%d).",
327 val, fEBignoreNeighbour));
328 }
329}
ecf39416 330
331//_____________________________________________________________________________
332Int_t AliTRDfeeParam::GetRAWversion()
333{
334 // Return raw data version (major number only)
335
336 return fRAWversion;
337}
338
339//_____________________________________________________________________________
340void AliTRDfeeParam::SetRAWversion( Int_t rawver )
341{
342 // Set raw data version (major number only)
343 // Maximum available number is preset in fgkMaxRAWversion
344
345 if( rawver >= 0 && rawver <= fgkMaxRAWversion ) {
346
347 fRAWversion = rawver ;
348 } else {
349 AliError(Form("Raw version is out of range: %d",rawver));
350 }
351}
352
353//_____________________________________________________________________________
354Bool_t AliTRDfeeParam::GetRAWstoreRaw()
355{
356 // Returns kTRUE if raw data itself is read instead of filtered data
357
358 return fRAWstoreRaw;
359}
360
361//_____________________________________________________________________________
362void AliTRDfeeParam::SetRAWstoreRaw( Bool_t storeraw )
363{
364 // If kTRUE is set, raw data itself is read instead of filtered data
365
366 fRAWstoreRaw = storeraw;
367}