]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MFT/AliMFTPlane.cxx
Updated version of the MFT code (Antonio)
[u/mrichter/AliRoot.git] / MFT / AliMFTPlane.cxx
CommitLineData
820b4d9e 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//====================================================================================================================================================
17//
18// Class for the description of the structure for the planes of the ALICE Muon Forward Tracker
19//
20// Contact author: antonio.uras@cern.ch
21//
22//====================================================================================================================================================
23
24#include "TNamed.h"
25#include "THnSparse.h"
26#include "TClonesArray.h"
820b4d9e 27#include "TAxis.h"
28#include "TPave.h"
29#include "TCanvas.h"
30#include "TH2D.h"
31#include "TEllipse.h"
32#include "TMath.h"
33#include "AliLog.h"
aeb9584d 34#include "AliMFTConstants.h"
35#include "AliMFTPlane.h"
36
37const Double_t AliMFTPlane::fRadiusMin = AliMFTConstants::fRadiusMin;
38const Double_t AliMFTPlane::fActiveSuperposition = AliMFTConstants::fActiveSuperposition;
39const Double_t AliMFTPlane::fHeightActive = AliMFTConstants::fHeightActive;
40const Double_t AliMFTPlane::fHeightReadout = AliMFTConstants::fHeightReadout;
41const Double_t AliMFTPlane::fSupportExtMargin = AliMFTConstants::fSupportExtMargin;
820b4d9e 42
43ClassImp(AliMFTPlane)
44
45//====================================================================================================================================================
46
47AliMFTPlane::AliMFTPlane():
48 TNamed(),
aeb9584d 49 fPlaneNumber(-1),
820b4d9e 50 fZCenter(0),
51 fRMinSupport(0),
52 fRMax(0),
53 fRMaxSupport(0),
54 fPixelSizeX(0),
55 fPixelSizeY(0),
56 fThicknessActive(0),
57 fThicknessSupport(0),
58 fThicknessReadout(0),
59 fZCenterActiveFront(0),
60 fZCenterActiveBack(0),
61 fEquivalentSilicon(0),
62 fEquivalentSiliconBeforeFront(0),
63 fEquivalentSiliconBeforeBack(0),
64 fActiveElements(0),
65 fReadoutElements(0),
66 fSupportElements(0)
67{
68
820b4d9e 69 // default constructor
70
71}
72
73//====================================================================================================================================================
74
75AliMFTPlane::AliMFTPlane(const Char_t *name, const Char_t *title):
76 TNamed(name, title),
aeb9584d 77 fPlaneNumber(-1),
820b4d9e 78 fZCenter(0),
79 fRMinSupport(0),
80 fRMax(0),
81 fRMaxSupport(0),
82 fPixelSizeX(0),
83 fPixelSizeY(0),
84 fThicknessActive(0),
85 fThicknessSupport(0),
86 fThicknessReadout(0),
87 fZCenterActiveFront(0),
88 fZCenterActiveBack(0),
89 fEquivalentSilicon(0),
90 fEquivalentSiliconBeforeFront(0),
91 fEquivalentSiliconBeforeBack(0),
aeb9584d 92 fActiveElements(new TClonesArray("THnSparseC")),
93 fReadoutElements(new TClonesArray("THnSparseC")),
94 fSupportElements(new TClonesArray("THnSparseC"))
820b4d9e 95{
96
aeb9584d 97 // constructor
820b4d9e 98
99}
100
101//====================================================================================================================================================
102
103AliMFTPlane::AliMFTPlane(const AliMFTPlane& plane):
104 TNamed(plane),
105 fPlaneNumber(plane.fPlaneNumber),
106 fZCenter(plane.fZCenter),
107 fRMinSupport(plane.fRMinSupport),
108 fRMax(plane.fRMax),
109 fRMaxSupport(plane.fRMaxSupport),
110 fPixelSizeX(plane.fPixelSizeX),
111 fPixelSizeY(plane.fPixelSizeY),
112 fThicknessActive(plane.fThicknessActive),
113 fThicknessSupport(plane.fThicknessSupport),
114 fThicknessReadout(plane.fThicknessReadout),
115 fZCenterActiveFront(plane.fZCenterActiveFront),
116 fZCenterActiveBack(plane.fZCenterActiveBack),
117 fEquivalentSilicon(plane.fEquivalentSilicon),
118 fEquivalentSiliconBeforeFront(plane.fEquivalentSiliconBeforeFront),
119 fEquivalentSiliconBeforeBack(plane.fEquivalentSiliconBeforeBack),
aeb9584d 120 fActiveElements(new TClonesArray("THnSparseC")),
121 fReadoutElements(new TClonesArray("THnSparseC")),
122 fSupportElements(new TClonesArray("THnSparseC"))
820b4d9e 123{
124
125 // copy constructor
aeb9584d 126
127 *fActiveElements = *plane.fActiveElements;
128 *fReadoutElements = *plane.fReadoutElements;
129 *fSupportElements = *plane.fSupportElements;
820b4d9e 130
131}
132
133//====================================================================================================================================================
134
135AliMFTPlane& AliMFTPlane::operator=(const AliMFTPlane& plane) {
136
137 // Assignment operator
138
139 // check assignement to self
aeb9584d 140 if (this != &plane) {
820b4d9e 141
aeb9584d 142 // base class assignement
143 TNamed::operator=(plane);
144
145 fPlaneNumber = plane.fPlaneNumber;
146 fZCenter = plane.fZCenter;
147 fRMinSupport = plane.fRMinSupport;
148 fRMax = plane.fRMax;
149 fRMaxSupport = plane.fRMaxSupport;
150 fPixelSizeX = plane.fPixelSizeX;
151 fPixelSizeY = plane.fPixelSizeY;
152 fThicknessActive = plane.fThicknessActive;
153 fThicknessSupport = plane.fThicknessSupport;
154 fThicknessReadout = plane.fThicknessReadout;
155 fZCenterActiveFront = plane.fZCenterActiveFront;
156 fZCenterActiveBack = plane.fZCenterActiveBack;
157 fEquivalentSilicon = plane.fEquivalentSilicon;
158 fEquivalentSiliconBeforeFront = plane.fEquivalentSiliconBeforeFront;
159 fEquivalentSiliconBeforeBack = plane.fEquivalentSiliconBeforeBack;
160 *fActiveElements = *plane.fActiveElements;
161 *fReadoutElements = *plane.fReadoutElements;
162 *fSupportElements = *plane.fSupportElements;
163 }
820b4d9e 164
165 return *this;
aeb9584d 166
820b4d9e 167}
168
169//====================================================================================================================================================
170
171Bool_t AliMFTPlane::Init(Int_t planeNumber,
172 Double_t zCenter,
173 Double_t rMin,
174 Double_t rMax,
175 Double_t pixelSizeX,
176 Double_t pixelSizeY,
177 Double_t thicknessActive,
178 Double_t thicknessSupport,
179 Double_t thicknessReadout) {
180
181 AliDebug(1, Form("Initializing Plane Structure for Plane %s", GetName()));
182
183 fPlaneNumber = planeNumber;
184 fZCenter = zCenter;
185 fRMinSupport = rMin;
186 fRMax = rMax;
187 fPixelSizeX = pixelSizeX;
188 fPixelSizeY = pixelSizeY;
189 fThicknessActive = thicknessActive;
190 fThicknessSupport = thicknessSupport;
191 fThicknessReadout = thicknessReadout;
192
193 fZCenterActiveFront = fZCenter - 0.5*fThicknessSupport - 0.5*fThicknessActive;
194 fZCenterActiveBack = fZCenter + 0.5*fThicknessSupport + 0.5*fThicknessActive;
195
196 if (fRMinSupport <= fRadiusMin) fRMinSupport = fRadiusMin;
197 else {
198 fRMinSupport = fRadiusMin + (fHeightActive-fActiveSuperposition) * Int_t((fRMinSupport-fRadiusMin)/(fHeightActive-fActiveSuperposition));
199 }
200
201 if (fRMax < fRMinSupport+fHeightActive) fRMax = fRMinSupport + fHeightActive;
202
203 fRMax = fRMinSupport + (fHeightActive-fActiveSuperposition) *
204 (Int_t((fRMax-fRMinSupport-fHeightActive)/(fHeightActive-fActiveSuperposition))+1) + fHeightActive;
205
aeb9584d 206 fRMaxSupport = TMath::Sqrt(fHeightActive*(2.*rMax-fHeightActive) + fRMax*fRMax) + fSupportExtMargin;
820b4d9e 207
208 return kTRUE;
209
210}
211
212//====================================================================================================================================================
213
214Bool_t AliMFTPlane::CreateStructure() {
215
216 Int_t nBins[3]={0};
217 Double_t minPosition[3]={0}, maxPosition[3]={0};
218
219 // ------------------- support element -------------------------------------------------
220
221 nBins[0] = 1;
222 nBins[1] = 1;
223 nBins[2] = 1;
224
225 minPosition[0] = -1.*fRMaxSupport;
226 minPosition[1] = -1.*fRMaxSupport;
227 minPosition[2] = fZCenter - 0.5*fThicknessSupport;
228
229 maxPosition[0] = +1.*fRMaxSupport;
230 maxPosition[1] = +1.*fRMaxSupport;
231 maxPosition[2] = fZCenter + 0.5*fThicknessSupport;
232
233 new ((*fSupportElements)[fSupportElements->GetEntries()]) THnSparseC(Form("MFTSupportElemHist_%02d%03d", fPlaneNumber, fSupportElements->GetEntries()),
234 Form("MFTSupportElemHist_%02d%03d", fPlaneNumber, fSupportElements->GetEntries()),
235 3, nBins, minPosition, maxPosition);
236
237 // ------------------- det elements: active + readout ----------------------------------
238
239 Double_t lowEdgeActive = -1.*fRMax;
240 Double_t supEdgeActive = lowEdgeActive + fHeightActive;
241 Double_t zMin = 0.;
242 Bool_t isFront = kTRUE;
243
244 while (supEdgeActive < fRMax+0.01) {
245
246 if (isFront) zMin = fZCenter - 0.5*fThicknessSupport - fThicknessActive;
247 else zMin = fZCenter + 0.5*fThicknessSupport;
248
249 Double_t extLimitAtLowEdgeActive = TMath::Sqrt((fRMax-TMath::Abs(lowEdgeActive)) * TMath::Abs(2*fRMax - (fRMax-TMath::Abs(lowEdgeActive))));
250 Double_t extLimitAtSupEdgeActive = TMath::Sqrt((fRMax-TMath::Abs(supEdgeActive)) * TMath::Abs(2*fRMax - (fRMax-TMath::Abs(supEdgeActive))));
251
252 // creating new det element: active + readout
253
254 Double_t extLimitDetElem = TMath::Max(extLimitAtLowEdgeActive, extLimitAtSupEdgeActive);
255
256 if (supEdgeActive<-1.*fRMinSupport+0.01 || lowEdgeActive>1.*fRMinSupport-0.01) { // single element covering the row
257
258 nBins[0] = TMath::Nint(2.*extLimitDetElem/fPixelSizeX);
259 nBins[1] = TMath::Nint(fHeightActive/fPixelSizeY);
260 nBins[2] = 1;
261
262 minPosition[0] = -1.*extLimitDetElem;
263 minPosition[1] = lowEdgeActive;
264 minPosition[2] = zMin;
265
266 maxPosition[0] = +1.*extLimitDetElem;
267 maxPosition[1] = supEdgeActive;
268 maxPosition[2] = zMin+fThicknessActive;
269
270 new ((*fActiveElements)[fActiveElements->GetEntries()]) THnSparseC(Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
271 Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
272 3, nBins, minPosition, maxPosition);
273
274 if (supEdgeActive>0.) {
275 minPosition[1] = supEdgeActive;
276 maxPosition[1] = supEdgeActive+fHeightReadout;
277 }
278 else {
279 minPosition[1] = lowEdgeActive-fHeightReadout;
280 maxPosition[1] = lowEdgeActive;
281 }
282
283 new ((*fReadoutElements)[fReadoutElements->GetEntries()]) THnSparseC(Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
284 Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
285 3, nBins, minPosition, maxPosition);
286
287 }
288
289 else { // two elements covering the row
290
291 Double_t intLimitAtLowEdge = 0., intLimitAtSupEdge = 0.;
292 if (fRMinSupport-TMath::Abs(lowEdgeActive)>0.) intLimitAtLowEdge = TMath::Sqrt((fRMinSupport-TMath::Abs(lowEdgeActive)) * TMath::Abs(2*fRMinSupport - (fRMinSupport-TMath::Abs(lowEdgeActive))));
293 if (fRMinSupport-TMath::Abs(supEdgeActive)>0.) intLimitAtSupEdge = TMath::Sqrt((fRMinSupport-TMath::Abs(supEdgeActive)) * TMath::Abs(2*fRMinSupport - (fRMinSupport-TMath::Abs(supEdgeActive))));
294 Double_t intLimitDetElem = TMath::Max(intLimitAtLowEdge, intLimitAtSupEdge);
295
296 nBins[0] = TMath::Nint((extLimitDetElem-intLimitDetElem)/fPixelSizeX);
297 nBins[1] = TMath::Nint(fHeightActive/fPixelSizeY);
298 nBins[2] = 1;
299
300 // left element
301
302 minPosition[0] = -1.*extLimitDetElem;
303 minPosition[1] = lowEdgeActive;
304 minPosition[2] = zMin;
305
306 maxPosition[0] = -1.*intLimitDetElem;
307 maxPosition[1] = supEdgeActive;
308 maxPosition[2] = zMin+fThicknessActive;
309
310 new ((*fActiveElements)[fActiveElements->GetEntries()]) THnSparseC(Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
311 Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
312 3, nBins, minPosition, maxPosition);
313
314 if (supEdgeActive>0.) {
315 minPosition[1] = supEdgeActive;
316 maxPosition[1] = supEdgeActive+fHeightReadout;
317 }
318 else {
319 minPosition[1] = lowEdgeActive-fHeightReadout;
320 maxPosition[1] = lowEdgeActive;
321 }
322
323 new ((*fReadoutElements)[fReadoutElements->GetEntries()]) THnSparseC(Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
324 Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
325 3, nBins, minPosition, maxPosition);
326
327 // right element
328
329 minPosition[0] = +1.*intLimitDetElem;
330 minPosition[1] = lowEdgeActive;
331 minPosition[2] = zMin;
332
333 maxPosition[0] = +1.*extLimitDetElem;
334 maxPosition[1] = supEdgeActive;
335 maxPosition[2] = zMin+fThicknessActive;
336
337 new ((*fActiveElements)[fActiveElements->GetEntries()]) THnSparseC(Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
338 Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
339 3, nBins, minPosition, maxPosition);
340
341 if (supEdgeActive>0.) {
342 minPosition[1] = supEdgeActive;
343 maxPosition[1] = supEdgeActive+fHeightReadout;
344 }
345 else {
346 minPosition[1] = lowEdgeActive-fHeightReadout;
347 maxPosition[1] = lowEdgeActive;
348 }
349
350 new ((*fReadoutElements)[fReadoutElements->GetEntries()]) THnSparseC(Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
351 Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
352 3, nBins, minPosition, maxPosition);
353
354 }
355
356 lowEdgeActive += fHeightActive - fActiveSuperposition;
357 supEdgeActive = lowEdgeActive + fHeightActive;
358 isFront = !isFront;
359
360 }
361
362 AliDebug(1, Form("Structure completed for MFT plane %s", GetName()));
363
364 return kTRUE;
365
366}
367
368//====================================================================================================================================================
369
370THnSparseC* AliMFTPlane::GetActiveElement(Int_t id) {
371
372 if (id<0 || id>=GetNActiveElements()) return NULL;
373 else return (THnSparseC*) fActiveElements->At(id);
374
375}
376
377//====================================================================================================================================================
378
379THnSparseC* AliMFTPlane::GetReadoutElement(Int_t id) {
380
381 if (id<0 || id>=GetNReadoutElements()) return NULL;
382 else return (THnSparseC*) fReadoutElements->At(id);
383
384}
385
386//====================================================================================================================================================
387
388THnSparseC* AliMFTPlane::GetSupportElement(Int_t id) {
389
390 if (id<0 || id>=GetNSupportElements()) return NULL;
391 else return (THnSparseC*) fSupportElements->At(id);
392
393}
394
395//====================================================================================================================================================
396
aeb9584d 397void AliMFTPlane::DrawPlane(Option_t *opt) {
820b4d9e 398
399 // ------------------- "FRONT" option ------------------
400
401 if (!strcmp(opt, "front")) {
402
403 TCanvas *cnv = new TCanvas("cnv", GetName(), 900, 900);
404 cnv->Draw();
405
406 // printf("Created Canvas\n");
407
408 TH2D *h = new TH2D("tmp", GetName(),
409 1, 1.1*GetSupportElement(0)->GetAxis(0)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(0)->GetXmax(),
410 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
411 h->SetXTitle("x [cm]");
412 h->SetYTitle("y [cm]");
413 h->Draw();
414
aeb9584d 415 AliInfo("Created hist");
820b4d9e 416
417 TEllipse *supportExt = new TEllipse(0.0, 0.0, fRMaxSupport, fRMaxSupport);
418 TEllipse *supportInt = new TEllipse(0.0, 0.0, fRMinSupport, fRMinSupport);
419 supportExt->SetFillColor(kCyan-10);
420 supportExt -> Draw("same");
421 supportInt -> Draw("same");
422
423 // printf("Created Ellipses\n");
424
425 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
426 // printf("Active element %d\n", iEl);
427 if (!IsFront(GetActiveElement(iEl))) continue;
428 TPave *pave = new TPave(GetActiveElement(iEl)->GetAxis(0)->GetXmin(),
429 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
430 GetActiveElement(iEl)->GetAxis(0)->GetXmax(),
431 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
432 pave -> SetFillColor(kGreen);
433 pave -> Draw("same");
434 }
435
436 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
437 // printf("Readout element %d\n", iEl);
438 if (!IsFront(GetReadoutElement(iEl))) continue;
439 TPave *pave = new TPave(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(),
440 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
441 GetReadoutElement(iEl)->GetAxis(0)->GetXmax(),
442 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
443 pave -> SetFillColor(kRed);
444 pave -> Draw("same");
445 }
446
447 }
448
449 // ------------------- "BACK" option ------------------
450
451 else if (!strcmp(opt, "back")) {
452
453 TCanvas *cnv = new TCanvas("cnv", GetName(), 900, 900);
454 cnv->Draw();
455
456 TH2D *h = new TH2D("tmp", GetName(),
457 1, 1.1*GetSupportElement(0)->GetAxis(0)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(0)->GetXmax(),
458 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
459 h->SetXTitle("x [cm]");
460 h->SetYTitle("y [cm]");
461 h->Draw();
462
463 TEllipse *supportExt = new TEllipse(0.0, 0.0, fRMaxSupport, fRMaxSupport);
464 TEllipse *supportInt = new TEllipse(0.0, 0.0, fRMinSupport, fRMinSupport);
465 supportExt -> SetFillColor(kCyan-10);
466 supportExt -> Draw("same");
467 supportInt -> Draw("same");
468
469 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
470 if (IsFront(GetActiveElement(iEl))) continue;
471 TPave *pave = new TPave(GetActiveElement(iEl)->GetAxis(0)->GetXmin(),
472 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
473 GetActiveElement(iEl)->GetAxis(0)->GetXmax(),
474 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
475 pave -> SetFillColor(kGreen);
476 pave -> Draw("same");
477 }
478
479 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
480 if (IsFront(GetReadoutElement(iEl))) continue;
481 TPave *pave = new TPave(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(),
482 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
483 GetReadoutElement(iEl)->GetAxis(0)->GetXmax(),
484 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
485 pave -> SetFillColor(kRed);
486 pave -> Draw("same");
487 }
488
489 }
490
491 // ------------------- "BOTH" option ------------------
492
493 else if (!strcmp(opt, "both")) {
494
495 TCanvas *cnv = new TCanvas("cnv", GetName(), 900, 900);
496 cnv->Draw();
497
498 TH2D *h = new TH2D("tmp", GetName(),
499 1, 1.1*GetSupportElement(0)->GetAxis(0)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(0)->GetXmax(),
500 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
501 h->SetXTitle("x [cm]");
502 h->SetYTitle("y [cm]");
503 h->Draw();
504
505 TEllipse *supportExt = new TEllipse(0.0, 0.0, fRMaxSupport, fRMaxSupport);
506 TEllipse *supportInt = new TEllipse(0.0, 0.0, fRMinSupport, fRMinSupport);
507 supportExt -> SetFillColor(kCyan-10);
508 supportExt -> Draw("same");
509 supportInt -> Draw("same");
510
511 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
512 if (IsFront(GetActiveElement(iEl)) && GetActiveElement(iEl)->GetAxis(0)->GetXmin()<0.) {
513 TPave *pave = new TPave(GetActiveElement(iEl)->GetAxis(0)->GetXmin(),
514 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
515 TMath::Min(GetActiveElement(iEl)->GetAxis(0)->GetXmax(), 0.),
516 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
517 pave -> SetFillColor(kGreen);
518 pave -> Draw("same");
519 }
520 else if (!IsFront(GetActiveElement(iEl)) && GetActiveElement(iEl)->GetAxis(0)->GetXmax()>0.) {
521 TPave *pave = new TPave(TMath::Max(GetActiveElement(iEl)->GetAxis(0)->GetXmin(), 0.),
522 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
523 GetActiveElement(iEl)->GetAxis(0)->GetXmax(),
524 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
525 pave -> SetFillColor(kGreen);
526 pave -> Draw("same");
527 }
528 }
529
530 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
531 if (IsFront(GetReadoutElement(iEl)) && GetReadoutElement(iEl)->GetAxis(0)->GetXmin()<0.) {
532 TPave *pave = new TPave(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(),
533 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
534 TMath::Min(GetReadoutElement(iEl)->GetAxis(0)->GetXmax(), 0.),
535 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
536 pave -> SetFillColor(kRed);
537 pave -> Draw("same");
538 }
539 else if (!IsFront(GetReadoutElement(iEl)) && GetReadoutElement(iEl)->GetAxis(0)->GetXmax()>0.) {
540 TPave *pave = new TPave(TMath::Max(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(), 0.),
541 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
542 GetReadoutElement(iEl)->GetAxis(0)->GetXmax(),
543 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
544 pave -> SetFillColor(kRed);
545 pave -> Draw("same");
546 }
547 }
548
549 }
550
551 // ------------------- "PROFILE" option ------------------
552
553 else if (!strcmp(opt, "profile")) {
554
555 TCanvas *cnv = new TCanvas("cnv", GetName(), 300, 900);
556 cnv->Draw();
557
558 TH2D *h = new TH2D("tmp", GetName(),
559 1, fZCenter-0.5, fZCenter+0.5,
560 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
561 h->SetXTitle("z [cm]");
562 h->SetYTitle("y [cm]");
563 h->Draw();
564
565 TPave *supportExt = new TPave(GetSupportElement(0)->GetAxis(2)->GetXmin(), -fRMaxSupport,
566 GetSupportElement(0)->GetAxis(2)->GetXmax(), fRMaxSupport);
567 TPave *supportInt = new TPave(GetSupportElement(0)->GetAxis(2)->GetXmin(), -fRMinSupport,
568 GetSupportElement(0)->GetAxis(2)->GetXmax(), fRMinSupport);
569 supportExt -> SetFillColor(kCyan-10);
570 supportInt -> SetFillColor(kCyan-10);
571 supportExt -> SetBorderSize(1);
572 supportInt -> SetBorderSize(1);
573 supportExt -> Draw("same");
574 supportInt -> Draw("same");
575
576 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
577 TPave * pave = 0;
578 if (IsFront(GetActiveElement(iEl))) {
579 pave = new TPave(GetActiveElement(iEl)->GetAxis(2)->GetXmax() -
580 5*(GetActiveElement(iEl)->GetAxis(2)->GetXmax()-GetActiveElement(iEl)->GetAxis(2)->GetXmin()),
581 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
582 GetActiveElement(iEl)->GetAxis(2)->GetXmax(),
583 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
584 }
585 else {
586 pave = new TPave(GetActiveElement(iEl)->GetAxis(2)->GetXmin(),
587 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
588 GetActiveElement(iEl)->GetAxis(2)->GetXmin() +
589 5*(GetActiveElement(iEl)->GetAxis(2)->GetXmax()-GetActiveElement(iEl)->GetAxis(2)->GetXmin()),
590 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
591 }
592 pave -> SetFillColor(kGreen);
593 pave -> Draw("same");
594 }
595
596 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
597 TPave *pave = 0;
598 if (IsFront(GetReadoutElement(iEl))) {
599 pave = new TPave(GetReadoutElement(iEl)->GetAxis(2)->GetXmax() -
600 5*(GetReadoutElement(iEl)->GetAxis(2)->GetXmax()-GetReadoutElement(iEl)->GetAxis(2)->GetXmin()),
601 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
602 GetReadoutElement(iEl)->GetAxis(2)->GetXmax(),
603 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
604 }
605 else {
606 pave = new TPave(GetReadoutElement(iEl)->GetAxis(2)->GetXmin(),
607 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
608 GetReadoutElement(iEl)->GetAxis(2)->GetXmin() +
609 5*(GetReadoutElement(iEl)->GetAxis(2)->GetXmax()-GetReadoutElement(iEl)->GetAxis(2)->GetXmin()),
610 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
611 }
612 pave -> SetFillColor(kRed);
613 pave -> Draw("same");
614 }
615
616 }
617
618}
619
620//====================================================================================================================================================
621