1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //====================================================================================================================================================
18 // Class for the description of the structure for the planes of the ALICE Muon Forward Tracker
20 // Contact author: antonio.uras@cern.ch
22 //====================================================================================================================================================
25 #include "THnSparse.h"
26 #include "TClonesArray.h"
34 #include "AliMFTConstants.h"
35 #include "AliMFTPlane.h"
37 const Double_t AliMFTPlane::fRadiusMin = AliMFTConstants::fRadiusMin;
38 const Double_t AliMFTPlane::fActiveSuperposition = AliMFTConstants::fActiveSuperposition;
39 const Double_t AliMFTPlane::fHeightActive = AliMFTConstants::fHeightActive;
40 const Double_t AliMFTPlane::fHeightReadout = AliMFTConstants::fHeightReadout;
41 const Double_t AliMFTPlane::fSupportExtMargin = AliMFTConstants::fSupportExtMargin;
45 //====================================================================================================================================================
47 AliMFTPlane::AliMFTPlane():
59 fZCenterActiveFront(0),
60 fZCenterActiveBack(0),
61 fEquivalentSilicon(0),
62 fEquivalentSiliconBeforeFront(0),
63 fEquivalentSiliconBeforeBack(0),
67 fHasPixelRectangularPatternAlongY(kFALSE)
70 // default constructor
74 //====================================================================================================================================================
76 AliMFTPlane::AliMFTPlane(const Char_t *name, const Char_t *title):
88 fZCenterActiveFront(0),
89 fZCenterActiveBack(0),
90 fEquivalentSilicon(0),
91 fEquivalentSiliconBeforeFront(0),
92 fEquivalentSiliconBeforeBack(0),
93 fActiveElements(new TClonesArray("THnSparseC")),
94 fReadoutElements(new TClonesArray("THnSparseC")),
95 fSupportElements(new TClonesArray("THnSparseC")),
96 fHasPixelRectangularPatternAlongY(kFALSE)
103 //====================================================================================================================================================
105 AliMFTPlane::AliMFTPlane(const AliMFTPlane& plane):
107 fPlaneNumber(plane.fPlaneNumber),
108 fZCenter(plane.fZCenter),
109 fRMinSupport(plane.fRMinSupport),
111 fRMaxSupport(plane.fRMaxSupport),
112 fPixelSizeX(plane.fPixelSizeX),
113 fPixelSizeY(plane.fPixelSizeY),
114 fThicknessActive(plane.fThicknessActive),
115 fThicknessSupport(plane.fThicknessSupport),
116 fThicknessReadout(plane.fThicknessReadout),
117 fZCenterActiveFront(plane.fZCenterActiveFront),
118 fZCenterActiveBack(plane.fZCenterActiveBack),
119 fEquivalentSilicon(plane.fEquivalentSilicon),
120 fEquivalentSiliconBeforeFront(plane.fEquivalentSiliconBeforeFront),
121 fEquivalentSiliconBeforeBack(plane.fEquivalentSiliconBeforeBack),
122 fActiveElements(new TClonesArray("THnSparseC")),
123 fReadoutElements(new TClonesArray("THnSparseC")),
124 fSupportElements(new TClonesArray("THnSparseC")),
125 fHasPixelRectangularPatternAlongY(plane.fHasPixelRectangularPatternAlongY)
130 *fActiveElements = *plane.fActiveElements;
131 *fReadoutElements = *plane.fReadoutElements;
132 *fSupportElements = *plane.fSupportElements;
136 //====================================================================================================================================================
138 AliMFTPlane& AliMFTPlane::operator=(const AliMFTPlane& plane) {
140 // Assignment operator
142 // check assignement to self
143 if (this != &plane) {
145 // base class assignement
146 TNamed::operator=(plane);
148 fPlaneNumber = plane.fPlaneNumber;
149 fZCenter = plane.fZCenter;
150 fRMinSupport = plane.fRMinSupport;
152 fRMaxSupport = plane.fRMaxSupport;
153 fPixelSizeX = plane.fPixelSizeX;
154 fPixelSizeY = plane.fPixelSizeY;
155 fThicknessActive = plane.fThicknessActive;
156 fThicknessSupport = plane.fThicknessSupport;
157 fThicknessReadout = plane.fThicknessReadout;
158 fZCenterActiveFront = plane.fZCenterActiveFront;
159 fZCenterActiveBack = plane.fZCenterActiveBack;
160 fEquivalentSilicon = plane.fEquivalentSilicon;
161 fEquivalentSiliconBeforeFront = plane.fEquivalentSiliconBeforeFront;
162 fEquivalentSiliconBeforeBack = plane.fEquivalentSiliconBeforeBack;
163 *fActiveElements = *plane.fActiveElements;
164 *fReadoutElements = *plane.fReadoutElements;
165 *fSupportElements = *plane.fSupportElements;
166 fHasPixelRectangularPatternAlongY = plane.fHasPixelRectangularPatternAlongY;
173 //====================================================================================================================================================
175 Bool_t AliMFTPlane::Init(Int_t planeNumber,
181 Double_t thicknessActive,
182 Double_t thicknessSupport,
183 Double_t thicknessReadout,
184 Bool_t hasPixelRectangularPatternAlongY) {
186 AliDebug(1, Form("Initializing Plane Structure for Plane %s", GetName()));
188 fPlaneNumber = planeNumber;
192 fPixelSizeX = pixelSizeX;
193 fPixelSizeY = pixelSizeY;
194 fThicknessActive = thicknessActive;
195 fThicknessSupport = thicknessSupport;
196 fThicknessReadout = thicknessReadout;
198 fHasPixelRectangularPatternAlongY = hasPixelRectangularPatternAlongY;
200 fZCenterActiveFront = fZCenter - 0.5*fThicknessSupport - 0.5*fThicknessActive;
201 fZCenterActiveBack = fZCenter + 0.5*fThicknessSupport + 0.5*fThicknessActive;
203 if (fRMinSupport <= fRadiusMin) fRMinSupport = fRadiusMin;
205 fRMinSupport = fRadiusMin + (fHeightActive-fActiveSuperposition) * Int_t((fRMinSupport-fRadiusMin)/(fHeightActive-fActiveSuperposition));
208 if (fRMax < fRMinSupport+fHeightActive) fRMax = fRMinSupport + fHeightActive;
210 fRMax = fRMinSupport + (fHeightActive-fActiveSuperposition) *
211 (Int_t((fRMax-fRMinSupport-fHeightActive)/(fHeightActive-fActiveSuperposition))+1) + fHeightActive;
213 fRMaxSupport = TMath::Sqrt(fHeightActive*(2.*rMax-fHeightActive) + fRMax*fRMax) + fSupportExtMargin;
219 //====================================================================================================================================================
221 Bool_t AliMFTPlane::CreateStructure() {
224 Double_t minPosition[3]={0}, maxPosition[3]={0};
226 // ------------------- support element -------------------------------------------------
232 minPosition[0] = -1.*fRMaxSupport;
233 minPosition[1] = -1.*fRMaxSupport;
234 minPosition[2] = fZCenter - 0.5*fThicknessSupport;
236 maxPosition[0] = +1.*fRMaxSupport;
237 maxPosition[1] = +1.*fRMaxSupport;
238 maxPosition[2] = fZCenter + 0.5*fThicknessSupport;
240 new ((*fSupportElements)[fSupportElements->GetEntries()]) THnSparseC(Form("MFTSupportElemHist_%02d%03d", fPlaneNumber, fSupportElements->GetEntries()),
241 Form("MFTSupportElemHist_%02d%03d", fPlaneNumber, fSupportElements->GetEntries()),
242 3, nBins, minPosition, maxPosition);
244 // ------------------- det elements: active + readout ----------------------------------
246 Double_t lowEdgeActive = -1.*fRMax;
247 Double_t supEdgeActive = lowEdgeActive + fHeightActive;
249 Bool_t isFront = kTRUE;
251 while (supEdgeActive < fRMax+0.01) {
253 if (isFront) zMin = fZCenter - 0.5*fThicknessSupport - fThicknessActive;
254 else zMin = fZCenter + 0.5*fThicknessSupport;
256 Double_t extLimitAtLowEdgeActive = TMath::Sqrt((fRMax-TMath::Abs(lowEdgeActive)) * TMath::Abs(2*fRMax - (fRMax-TMath::Abs(lowEdgeActive))));
257 Double_t extLimitAtSupEdgeActive = TMath::Sqrt((fRMax-TMath::Abs(supEdgeActive)) * TMath::Abs(2*fRMax - (fRMax-TMath::Abs(supEdgeActive))));
259 // creating new det element: active + readout
261 Double_t extLimitDetElem = TMath::Max(extLimitAtLowEdgeActive, extLimitAtSupEdgeActive);
263 if (supEdgeActive<-1.*fRMinSupport+0.01 || lowEdgeActive>1.*fRMinSupport-0.01) { // single element covering the row
265 nBins[0] = TMath::Nint(2.*extLimitDetElem/fPixelSizeX);
266 nBins[1] = TMath::Nint(fHeightActive/fPixelSizeY);
269 minPosition[0] = -1.*extLimitDetElem;
270 minPosition[1] = lowEdgeActive;
271 minPosition[2] = zMin;
273 maxPosition[0] = +1.*extLimitDetElem;
274 maxPosition[1] = supEdgeActive;
275 maxPosition[2] = zMin+fThicknessActive;
277 new ((*fActiveElements)[fActiveElements->GetEntries()]) THnSparseC(Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
278 Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
279 3, nBins, minPosition, maxPosition);
281 if (supEdgeActive>0.) {
282 minPosition[1] = supEdgeActive;
283 maxPosition[1] = supEdgeActive+fHeightReadout;
286 minPosition[1] = lowEdgeActive-fHeightReadout;
287 maxPosition[1] = lowEdgeActive;
290 new ((*fReadoutElements)[fReadoutElements->GetEntries()]) THnSparseC(Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
291 Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
292 3, nBins, minPosition, maxPosition);
296 else { // two elements covering the row
298 Double_t intLimitAtLowEdge = 0., intLimitAtSupEdge = 0.;
299 if (fRMinSupport-TMath::Abs(lowEdgeActive)>0.) intLimitAtLowEdge = TMath::Sqrt((fRMinSupport-TMath::Abs(lowEdgeActive)) * TMath::Abs(2*fRMinSupport - (fRMinSupport-TMath::Abs(lowEdgeActive))));
300 if (fRMinSupport-TMath::Abs(supEdgeActive)>0.) intLimitAtSupEdge = TMath::Sqrt((fRMinSupport-TMath::Abs(supEdgeActive)) * TMath::Abs(2*fRMinSupport - (fRMinSupport-TMath::Abs(supEdgeActive))));
301 Double_t intLimitDetElem = TMath::Max(intLimitAtLowEdge, intLimitAtSupEdge);
303 nBins[0] = TMath::Nint((extLimitDetElem-intLimitDetElem)/fPixelSizeX);
304 nBins[1] = TMath::Nint(fHeightActive/fPixelSizeY);
309 minPosition[0] = -1.*extLimitDetElem;
310 minPosition[1] = lowEdgeActive;
311 minPosition[2] = zMin;
313 maxPosition[0] = -1.*intLimitDetElem;
314 maxPosition[1] = supEdgeActive;
315 maxPosition[2] = zMin+fThicknessActive;
317 new ((*fActiveElements)[fActiveElements->GetEntries()]) THnSparseC(Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
318 Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
319 3, nBins, minPosition, maxPosition);
321 if (supEdgeActive>0.) {
322 minPosition[1] = supEdgeActive;
323 maxPosition[1] = supEdgeActive+fHeightReadout;
326 minPosition[1] = lowEdgeActive-fHeightReadout;
327 maxPosition[1] = lowEdgeActive;
330 new ((*fReadoutElements)[fReadoutElements->GetEntries()]) THnSparseC(Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
331 Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
332 3, nBins, minPosition, maxPosition);
336 minPosition[0] = +1.*intLimitDetElem;
337 minPosition[1] = lowEdgeActive;
338 minPosition[2] = zMin;
340 maxPosition[0] = +1.*extLimitDetElem;
341 maxPosition[1] = supEdgeActive;
342 maxPosition[2] = zMin+fThicknessActive;
344 new ((*fActiveElements)[fActiveElements->GetEntries()]) THnSparseC(Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
345 Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
346 3, nBins, minPosition, maxPosition);
348 if (supEdgeActive>0.) {
349 minPosition[1] = supEdgeActive;
350 maxPosition[1] = supEdgeActive+fHeightReadout;
353 minPosition[1] = lowEdgeActive-fHeightReadout;
354 maxPosition[1] = lowEdgeActive;
357 new ((*fReadoutElements)[fReadoutElements->GetEntries()]) THnSparseC(Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
358 Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
359 3, nBins, minPosition, maxPosition);
363 lowEdgeActive += fHeightActive - fActiveSuperposition;
364 supEdgeActive = lowEdgeActive + fHeightActive;
369 AliDebug(1, Form("Structure completed for MFT plane %s", GetName()));
375 //====================================================================================================================================================
377 THnSparseC* AliMFTPlane::GetActiveElement(Int_t id) {
379 if (id<0 || id>=GetNActiveElements()) return NULL;
380 else return (THnSparseC*) fActiveElements->At(id);
384 //====================================================================================================================================================
386 THnSparseC* AliMFTPlane::GetReadoutElement(Int_t id) {
388 if (id<0 || id>=GetNReadoutElements()) return NULL;
389 else return (THnSparseC*) fReadoutElements->At(id);
393 //====================================================================================================================================================
395 THnSparseC* AliMFTPlane::GetSupportElement(Int_t id) {
397 if (id<0 || id>=GetNSupportElements()) return NULL;
398 else return (THnSparseC*) fSupportElements->At(id);
402 //====================================================================================================================================================
404 void AliMFTPlane::DrawPlane(Option_t *opt) {
406 // ------------------- "FRONT" option ------------------
408 if (!strcmp(opt, "front")) {
410 TCanvas *cnv = new TCanvas("cnv", GetName(), 900, 900);
413 TH2D *h = new TH2D("tmp", GetName(),
414 1, 1.1*GetSupportElement(0)->GetAxis(0)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(0)->GetXmax(),
415 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
416 h->SetXTitle("x [cm]");
417 h->SetYTitle("y [cm]");
420 AliInfo("Created hist");
422 TEllipse *supportExt = new TEllipse(0.0, 0.0, fRMaxSupport, fRMaxSupport);
423 TEllipse *supportInt = new TEllipse(0.0, 0.0, fRMinSupport, fRMinSupport);
424 supportExt->SetFillColor(kCyan-10);
425 supportExt -> Draw("same");
426 supportInt -> Draw("same");
428 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
429 if (!IsFront(GetActiveElement(iEl))) continue;
430 TPave *pave = new TPave(GetActiveElement(iEl)->GetAxis(0)->GetXmin(),
431 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
432 GetActiveElement(iEl)->GetAxis(0)->GetXmax(),
433 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
434 pave -> SetFillColor(kGreen);
435 pave -> Draw("same");
438 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
439 if (!IsFront(GetReadoutElement(iEl))) continue;
440 TPave *pave = new TPave(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(),
441 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
442 GetReadoutElement(iEl)->GetAxis(0)->GetXmax(),
443 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
444 pave -> SetFillColor(kRed);
445 pave -> Draw("same");
450 // ------------------- "BACK" option ------------------
452 else if (!strcmp(opt, "back")) {
454 TCanvas *cnv = new TCanvas("cnv", GetName(), 900, 900);
457 TH2D *h = new TH2D("tmp", GetName(),
458 1, 1.1*GetSupportElement(0)->GetAxis(0)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(0)->GetXmax(),
459 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
460 h->SetXTitle("x [cm]");
461 h->SetYTitle("y [cm]");
464 TEllipse *supportExt = new TEllipse(0.0, 0.0, fRMaxSupport, fRMaxSupport);
465 TEllipse *supportInt = new TEllipse(0.0, 0.0, fRMinSupport, fRMinSupport);
466 supportExt -> SetFillColor(kCyan-10);
467 supportExt -> Draw("same");
468 supportInt -> Draw("same");
470 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
471 if (IsFront(GetActiveElement(iEl))) continue;
472 TPave *pave = new TPave(GetActiveElement(iEl)->GetAxis(0)->GetXmin(),
473 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
474 GetActiveElement(iEl)->GetAxis(0)->GetXmax(),
475 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
476 pave -> SetFillColor(kGreen);
477 pave -> Draw("same");
480 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
481 if (IsFront(GetReadoutElement(iEl))) continue;
482 TPave *pave = new TPave(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(),
483 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
484 GetReadoutElement(iEl)->GetAxis(0)->GetXmax(),
485 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
486 pave -> SetFillColor(kRed);
487 pave -> Draw("same");
492 // ------------------- "BOTH" option ------------------
494 else if (!strcmp(opt, "both")) {
496 TCanvas *cnv = new TCanvas("cnv", GetName(), 900, 900);
499 TH2D *h = new TH2D("tmp", GetName(),
500 1, 1.1*GetSupportElement(0)->GetAxis(0)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(0)->GetXmax(),
501 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
502 h->SetXTitle("x [cm]");
503 h->SetYTitle("y [cm]");
506 TEllipse *supportExt = new TEllipse(0.0, 0.0, fRMaxSupport, fRMaxSupport);
507 TEllipse *supportInt = new TEllipse(0.0, 0.0, fRMinSupport, fRMinSupport);
508 supportExt -> SetFillColor(kCyan-10);
509 supportExt -> Draw("same");
510 supportInt -> Draw("same");
512 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
513 if (IsFront(GetActiveElement(iEl)) && GetActiveElement(iEl)->GetAxis(0)->GetXmin()<0.) {
514 TPave *pave = new TPave(GetActiveElement(iEl)->GetAxis(0)->GetXmin(),
515 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
516 TMath::Min(GetActiveElement(iEl)->GetAxis(0)->GetXmax(), 0.),
517 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
518 pave -> SetFillColor(kGreen);
519 pave -> Draw("same");
521 else if (!IsFront(GetActiveElement(iEl)) && GetActiveElement(iEl)->GetAxis(0)->GetXmax()>0.) {
522 TPave *pave = new TPave(TMath::Max(GetActiveElement(iEl)->GetAxis(0)->GetXmin(), 0.),
523 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
524 GetActiveElement(iEl)->GetAxis(0)->GetXmax(),
525 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
526 pave -> SetFillColor(kGreen);
527 pave -> Draw("same");
531 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
532 if (IsFront(GetReadoutElement(iEl)) && GetReadoutElement(iEl)->GetAxis(0)->GetXmin()<0.) {
533 TPave *pave = new TPave(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(),
534 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
535 TMath::Min(GetReadoutElement(iEl)->GetAxis(0)->GetXmax(), 0.),
536 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
537 pave -> SetFillColor(kRed);
538 pave -> Draw("same");
540 else if (!IsFront(GetReadoutElement(iEl)) && GetReadoutElement(iEl)->GetAxis(0)->GetXmax()>0.) {
541 TPave *pave = new TPave(TMath::Max(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(), 0.),
542 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
543 GetReadoutElement(iEl)->GetAxis(0)->GetXmax(),
544 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
545 pave -> SetFillColor(kRed);
546 pave -> Draw("same");
552 // ------------------- "PROFILE" option ------------------
554 else if (!strcmp(opt, "profile")) {
556 TCanvas *cnv = new TCanvas("cnv", GetName(), 300, 900);
559 TH2D *h = new TH2D("tmp", GetName(),
560 1, fZCenter-0.5, fZCenter+0.5,
561 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
562 h->SetXTitle("z [cm]");
563 h->SetYTitle("y [cm]");
566 TPave *supportExt = new TPave(GetSupportElement(0)->GetAxis(2)->GetXmin(), -fRMaxSupport,
567 GetSupportElement(0)->GetAxis(2)->GetXmax(), fRMaxSupport);
568 TPave *supportInt = new TPave(GetSupportElement(0)->GetAxis(2)->GetXmin(), -fRMinSupport,
569 GetSupportElement(0)->GetAxis(2)->GetXmax(), fRMinSupport);
570 supportExt -> SetFillColor(kCyan-10);
571 supportInt -> SetFillColor(kCyan-10);
572 supportExt -> SetBorderSize(1);
573 supportInt -> SetBorderSize(1);
574 supportExt -> Draw("same");
575 supportInt -> Draw("same");
577 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
579 if (IsFront(GetActiveElement(iEl))) {
580 pave = new TPave(GetActiveElement(iEl)->GetAxis(2)->GetXmax() -
581 5*(GetActiveElement(iEl)->GetAxis(2)->GetXmax()-GetActiveElement(iEl)->GetAxis(2)->GetXmin()),
582 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
583 GetActiveElement(iEl)->GetAxis(2)->GetXmax(),
584 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
587 pave = new TPave(GetActiveElement(iEl)->GetAxis(2)->GetXmin(),
588 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
589 GetActiveElement(iEl)->GetAxis(2)->GetXmin() +
590 5*(GetActiveElement(iEl)->GetAxis(2)->GetXmax()-GetActiveElement(iEl)->GetAxis(2)->GetXmin()),
591 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
593 pave -> SetFillColor(kGreen);
594 pave -> Draw("same");
597 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
599 if (IsFront(GetReadoutElement(iEl))) {
600 pave = new TPave(GetReadoutElement(iEl)->GetAxis(2)->GetXmax() -
601 5*(GetReadoutElement(iEl)->GetAxis(2)->GetXmax()-GetReadoutElement(iEl)->GetAxis(2)->GetXmin()),
602 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
603 GetReadoutElement(iEl)->GetAxis(2)->GetXmax(),
604 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
607 pave = new TPave(GetReadoutElement(iEl)->GetAxis(2)->GetXmin(),
608 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
609 GetReadoutElement(iEl)->GetAxis(2)->GetXmin() +
610 5*(GetReadoutElement(iEl)->GetAxis(2)->GetXmax()-GetReadoutElement(iEl)->GetAxis(2)->GetXmin()),
611 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
613 pave -> SetFillColor(kRed);
614 pave -> Draw("same");
621 //====================================================================================================================================================
623 Int_t AliMFTPlane::GetNumberOfChips(Option_t *opt) {
627 if (!strcmp(opt, "front")) {
628 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
629 if (!IsFront(GetActiveElement(iEl))) continue;
630 Double_t length = GetActiveElement(iEl)->GetAxis(0)->GetXmax() - GetActiveElement(iEl)->GetAxis(0)->GetXmin();
631 nChips += Int_t (length/AliMFTConstants::fWidthChip) + 1;
635 else if (!strcmp(opt, "back")) {
636 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
637 if (IsFront(GetActiveElement(iEl))) continue;
638 Double_t length = GetActiveElement(iEl)->GetAxis(0)->GetXmax() - GetActiveElement(iEl)->GetAxis(0)->GetXmin();
639 nChips += Int_t (length/AliMFTConstants::fWidthChip) + 1;
647 //====================================================================================================================================================