next50 trigger mask in AliHLTGlobalEsdConverterComponent
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerGUIboard.cxx
CommitLineData
905654c2 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
37391c63 16// $Id$
17
3d1463c8 18//-----------------------------------------------------------------------------
37391c63 19/// \class AliMUONTriggerGUIboard
20///
21/// Single trigger board object with geometry information, strips and digits
22///
23/// \author Bogdan Vulpescu, LPC Clermont-Ferrand
3d1463c8 24//-----------------------------------------------------------------------------
905654c2 25
8b067dfe 26#include <TClonesArray.h>
905654c2 27#include <TBox.h>
8b067dfe 28#include <TMath.h>
29
30#include "AliMUONGeometryTransformer.h"
905654c2 31
32#include "AliMUONTriggerGUIboard.h"
33
34/// \cond CLASSIMP
35ClassImp(AliMUONTriggerGUIboard)
36/// \endcond
37
38//__________________________________________________________________________
8b067dfe 39AliMUONTriggerGUIboard::AliMUONTriggerGUIboard()
905654c2 40 : TObject(),
41 fName(0),
8b067dfe 42 fCrateName(0),
905654c2 43 fID(-1),
44 fStatus(0),
45 fPosition(0),
46 fYOver(0),
73a04a18 47 fXCenter(),
48 fYCenter(),
49 fZCenter(),
50 fXWidth(),
51 fYWidth(),
905654c2 52 fXSix(0),
53 fXSiy1(0),
54 fXSiy2(0),
55 fYSix1(0),
56 fYSix2(0),
57 fYSiy(0),
58 fDetElemId(0),
59 fIdCircuit(-1),
8b067dfe 60 fIsOpen(0),
61 fNPadsX(),
62 fNPadsY(),
63 fPadsX(),
64 fPadsY()
905654c2 65{
66 /// board main constructor
67
8b067dfe 68 fName = new TString("");
69 fCrateName = new TString("");
905654c2 70
71 for (Int_t i = 0; i < kNMT; i++) {
72 fXCenter[i] = 0.;
73 fYCenter[i] = 0.;
74 fZCenter[i] = 0.;
75 fXWidth[i] = 0.;
76 fYWidth[i] = 0.;
77 for (Int_t is = 0; is < kNS; is++) {
78 fXDig[i][is] = 0;
79 fYDig[i][is] = 0;
80 fXDigBox[i][is] = new TBox(0,0,0,0);
81 fYDigBox[i][is] = new TBox(0,0,0,0);
82 fXDigBox[i][is]->SetBit(kCannotPick);
83 fYDigBox[i][is]->SetBit(kCannotPick);
84 fXDigBox[i][is]->SetFillStyle(1001);
85 fYDigBox[i][is]->SetFillStyle(1001);
86 fXDigBox[i][is]->SetFillColor(4);
87 fYDigBox[i][is]->SetFillColor(4);
88 }
89 }
90
91 fXSix = -1;
92 fXSiy1 = -1;
93 fXSiy2 = -1;
94
95 fYSix1 = -1;
96 fYSix2 = -1;
97 fYSiy = -1;
98
99 fDetElemId = -1;
100 fIdCircuit = -1;
101
102 fIsOpen = kFALSE;
103
104 fYOver = 0;
105 fPosition = 0;
106
8b067dfe 107 for (Int_t i = 0; i < kNMT; i++) {
108 fPadsX[i] = new TClonesArray("AliMpPad",16); fNPadsX[i] = 0;
109 fPadsY[i] = new TClonesArray("AliMpPad",16); fNPadsY[i] = 0;
110 }
111
905654c2 112}
113
114//__________________________________________________________________________
f182ec5f 115AliMUONTriggerGUIboard::AliMUONTriggerGUIboard(TRootIOCtor* /*ioCtor*/)
116 : TObject(),
117 fName(0),
118 fCrateName(0),
119 fID(-1),
120 fStatus(0),
121 fPosition(0),
122 fYOver(0),
73a04a18 123 fXCenter(),
124 fYCenter(),
125 fZCenter(),
126 fXWidth(),
127 fYWidth(),
f182ec5f 128 fXSix(0),
129 fXSiy1(0),
130 fXSiy2(0),
131 fYSix1(0),
132 fYSix2(0),
133 fYSiy(0),
134 fDetElemId(0),
135 fIdCircuit(-1),
136 fIsOpen(0),
137 fNPadsX(),
138 fNPadsY(),
139 fPadsX(),
140 fPadsY()
141{
142 /// board standard constructor
143
144}
145
146//__________________________________________________________________________
905654c2 147AliMUONTriggerGUIboard::~AliMUONTriggerGUIboard()
148{
149 /// board destructor
150
151 delete fName;
152
153 for (Int_t imt = 0; imt < kNMT; imt++) {
154 for (Int_t is = 0; is < kNS; is++) {
155 delete fXDigBox[imt][is];
156 delete fYDigBox[imt][is];
157 }
158 }
159
160}
161
162//__________________________________________________________________________
905654c2 163void AliMUONTriggerGUIboard::SetXDigBox(Int_t imt, Int_t is, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
164{
165 /// set coordinates of "is" x-strip box in chamber "imt"
166
167 fXDigBox[imt][is]->SetX1(x1);
168 fXDigBox[imt][is]->SetY1(y1);
169 fXDigBox[imt][is]->SetX2(x2);
170 fXDigBox[imt][is]->SetY2(y2);
171
172}
173
174//__________________________________________________________________________
175void AliMUONTriggerGUIboard::SetYDigBox(Int_t imt, Int_t is, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
176{
177 /// set coordinates of "is" y-strip box in chamber "imt"
178
179 fYDigBox[imt][is]->SetX1(x1);
180 fYDigBox[imt][is]->SetY1(y1);
181 fYDigBox[imt][is]->SetX2(x2);
182 fYDigBox[imt][is]->SetY2(y2);
183
184}
185
186//__________________________________________________________________________
187void AliMUONTriggerGUIboard::ClearXDigits()
188{
189 /// delete the set x-digits
190
191 for (Int_t imt = 0; imt < kNMT; imt++) {
192 for (Int_t is = 0; is < kNS; is++) {
193 fXDig[imt][is] = 0;
194 }
195 }
196
197}
198
199//__________________________________________________________________________
200void AliMUONTriggerGUIboard::ClearYDigits()
201{
202 /// delete the set y-digits
203
204 for (Int_t imt = 0; imt < kNMT; imt++) {
205 for (Int_t is = 0; is < kNS; is++) {
206 fYDig[imt][is] = 0;
207 }
208 }
209
210}
8b067dfe 211
212//__________________________________________________________________________
213void AliMUONTriggerGUIboard::MakeGeometry()
214{
215 /// create the display geometry from the mapping pads
216
217 AliMpPad *pad;
218
219 // circuit number and manu channel (from x-strips)
220 for (Int_t ich = 0; ich < kNMT; ich++) {
221 if (fNPadsX[ich]) {
222 pad = (AliMpPad*)fPadsX[ich]->At(0);
168e9c4d 223 fIdCircuit = pad->GetLocalBoardId(0);
8b067dfe 224 break;
225 }
226 }
227
228 // position index
229 if (fName->Length()) {
230 if (fName->Contains("12")) fPosition = 1;
231 if (fName->Contains("34")) fPosition = 2;
232 if (fName->Contains("56")) fPosition = 3;
233 if (fName->Contains("78")) fPosition = 4;
234 }
235
236 // position index for common y-strip boards
237 for (Int_t ich = 0; ich < kNMT; ich++) {
238 if (fNPadsY[ich]) {
2129750f 239 pad = (AliMpPad*)fPadsY[ich]->At(0);
8b067dfe 240 fYOver = pad->GetNofLocations();
241 break;
242 }
243 }
244
245 // pad indices
246 Int_t padxIx = -1, padxIy1 = +999, padxIy2 = -999;
247 Int_t padyIy = -1, padyIx1 = +999, padyIx2 = -999;
248 for (Int_t ip = 0; ip < fNPadsX[0]; ip++) {
249 pad = (AliMpPad*)fPadsX[0]->At(ip);
168e9c4d 250 padxIx = pad->GetIx();
251 padxIy1 = TMath::Min(padxIy1,pad->GetIy());
252 padxIy2 = TMath::Max(padxIy2,pad->GetIy());
8b067dfe 253 }
254 for (Int_t ip = 0; ip < fNPadsY[0]; ip++) {
255 pad = (AliMpPad*)fPadsY[0]->At(ip);
168e9c4d 256 padyIy = pad->GetIy();
257 padyIx1 = TMath::Min(padyIx1,pad->GetIx());
258 padyIx2 = TMath::Max(padyIx2,pad->GetIx());
8b067dfe 259 }
260 fXSix = padxIx;
261 fXSiy1 = padxIy1;
262 fXSiy2 = padxIy2;
263 fYSiy = padyIy;
264 fYSix1 = padyIx1;
265 fYSix2 = padyIx2;
266
267 // position and dimension
268
269 AliMUONGeometryTransformer transformer;
270 transformer.LoadGeometryData("transform.dat");
271
272 Float_t minX, maxX, minY, maxY;
273 Float_t dx, dy;
deb44363 274 Float_t xloc, yloc, xglo=0., yglo=0., zglo=0.;
8b067dfe 275 for (Int_t ich = 0; ich < kNMT; ich++) {
276 minX = +9999; maxX = -9999;
277 minY = +9999; maxY = -9999;
278 for (Int_t ix = 0; ix < fNPadsX[ich]; ix++) {
279 pad = (AliMpPad*)fPadsX[ich]->At(ix);
6e97fbb8 280 xloc = pad->GetPositionX();
281 yloc = pad->GetPositionY();
282 dx = pad->GetDimensionX();
283 dy = pad->GetDimensionY();
8b067dfe 284 transformer.Local2Global((11+ich)*100+GetDetElemId(), xloc, yloc, 0, xglo, yglo, zglo);
285 minX = TMath::Min(minX,(xglo-dx));
286 maxX = TMath::Max(maxX,(xglo+dx));
287 minY = TMath::Min(minY,(yglo-dy));
288 maxY = TMath::Max(maxY,(yglo+dy));
289 }
290 fXCenter[ich] = 0.5*(minX+maxX);
291 fYCenter[ich] = 0.5*(minY+maxY);
292 fZCenter[ich] = zglo;
293 fXWidth[ich] = maxX-minX;
294 fYWidth[ich] = maxY-minY;
295 // truncate to same precision as in the old guimap files
296 fXCenter[ich] = 0.01*TMath::Nint(fXCenter[ich]*100.0);
297 fYCenter[ich] = 0.01*TMath::Nint(fYCenter[ich]*100.0);
298 fXWidth[ich] = 0.01*TMath::Nint(fXWidth[ich]*100.0);
299 fYWidth[ich] = 0.01*TMath::Nint(fYWidth[ich]*100.0);
300
301 }
302
303 // delete the pads arrays
304 for (Int_t ich = 0; ich < kNMT; ich++) {
305 delete fPadsX[ich]; fNPadsX[ich] = 0;
306 delete fPadsY[ich]; fNPadsY[ich] = 0;
307 }
308
309}
310
311//__________________________________________________________________________
312Int_t AliMUONTriggerGUIboard::GetLine() const
313{
314 /// get detector side
315 if (fName->Length() >= 5) {
316 const Char_t *name = fName->Data();
317 TString sline = TString(name[4]);
318 return sline.Atoi();
319 }
320
321 return -1;
322
323}
324
325//__________________________________________________________________________
326Int_t AliMUONTriggerGUIboard::GetCol() const
327{
328 /// get detector side
329 if (fName->Length() >= 5) {
330 const Char_t *name = fName->Data();
331 TString scol = TString(name[2]);
332 return scol.Atoi();
333 }
334
335 return -1;
336
337}
338
339//__________________________________________________________________________
340Int_t AliMUONTriggerGUIboard::GetSide() const
341{
342 /// get detector side
343 if (fName->Length() >= 5) {
344 const Char_t *name = fName->Data();
345 if (!strncmp(name,"L",1)) return 0;
346 if (!strncmp(name,"R",1)) return 1;
347 }
348
349 return -1;
350
351}
352
353//__________________________________________________________________________
354void AliMUONTriggerGUIboard::PrintBoard() const
355{
356 /// print information on this board
357
358 printf("Name: %s Id %3d Circ %3d DetElemId %2d Pos %1d YOver %1d\n",GetBoardName(),GetNumber(),GetIdCircuit(),GetDetElemId(),GetPosition(),GetYOver());
359 printf("NStrips: X %2d Y %2d \n",GetNStripX(),GetNStripY());
360 printf("Pad indices: X: ix %3d iy1 %3d iy2 %3d \n",GetXSix(),GetXSiy1(),GetXSiy2());
361 printf("Pad indices: Y: iy %3d ix1 %3d ix2 %3d \n",GetYSiy(),GetYSix1(),GetYSix2());
362 printf("Position and dimension:\n");
363 for (Int_t imt = 0; imt < 4; imt++) {
364 printf("MT=%1d: X %9.4f Y %9.4f Z %10.4f \n",imt,GetXCenter(imt),GetYCenter(imt),GetZCenter(imt));
365 printf(" DX %7.4f DY %7.4f \n",GetXWidth(imt),GetYWidth(imt));
366 }
367
368}
369