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),
96 fHasPixelRectangularPatternAlongY(kFALSE)
100 fActiveElements = new TClonesArray("THnSparseC");
101 fReadoutElements = new TClonesArray("THnSparseC");
102 fSupportElements = new TClonesArray("THnSparseC");
103 fActiveElements->SetOwner(kTRUE);
104 fReadoutElements->SetOwner(kTRUE);
105 fSupportElements->SetOwner(kTRUE);
109 //====================================================================================================================================================
111 AliMFTPlane::AliMFTPlane(const AliMFTPlane& plane):
113 fPlaneNumber(plane.fPlaneNumber),
114 fZCenter(plane.fZCenter),
115 fRMinSupport(plane.fRMinSupport),
117 fRMaxSupport(plane.fRMaxSupport),
118 fPixelSizeX(plane.fPixelSizeX),
119 fPixelSizeY(plane.fPixelSizeY),
120 fThicknessActive(plane.fThicknessActive),
121 fThicknessSupport(plane.fThicknessSupport),
122 fThicknessReadout(plane.fThicknessReadout),
123 fZCenterActiveFront(plane.fZCenterActiveFront),
124 fZCenterActiveBack(plane.fZCenterActiveBack),
125 fEquivalentSilicon(plane.fEquivalentSilicon),
126 fEquivalentSiliconBeforeFront(plane.fEquivalentSiliconBeforeFront),
127 fEquivalentSiliconBeforeBack(plane.fEquivalentSiliconBeforeBack),
131 fHasPixelRectangularPatternAlongY(plane.fHasPixelRectangularPatternAlongY)
135 fActiveElements = new TClonesArray(*(plane.fActiveElements));
136 fActiveElements -> SetOwner(kTRUE);
137 fReadoutElements = new TClonesArray(*(plane.fReadoutElements));
138 fReadoutElements -> SetOwner(kTRUE);
139 fSupportElements = new TClonesArray(*(plane.fSupportElements));
140 fSupportElements -> SetOwner(kTRUE);
145 //====================================================================================================================================================
147 AliMFTPlane::~AliMFTPlane() {
149 AliInfo("Delete AliMFTPlane");
150 if(fActiveElements) fActiveElements->Delete();
151 delete fActiveElements;
152 if(fReadoutElements) fReadoutElements->Delete();
153 delete fReadoutElements;
154 if(fSupportElements) fSupportElements->Delete();
155 delete fSupportElements;
159 //====================================================================================================================================================
161 void AliMFTPlane::Clear(const Option_t* /*opt*/) {
163 AliInfo("Clear AliMFTPlane");
164 if(fActiveElements) fActiveElements->Delete();
165 delete fActiveElements; fActiveElements=NULL;
166 if(fReadoutElements) fReadoutElements->Delete();
167 delete fReadoutElements; fReadoutElements=NULL;
168 if(fSupportElements) fSupportElements->Delete();
169 delete fSupportElements; fSupportElements=NULL;
173 //====================================================================================================================================================
175 AliMFTPlane& AliMFTPlane::operator=(const AliMFTPlane& plane) {
177 // Assignment operator
179 // check assignement to self
180 if (this != &plane) {
182 // base class assignement
183 TNamed::operator=(plane);
188 fPlaneNumber = plane.fPlaneNumber;
189 fZCenter = plane.fZCenter;
190 fRMinSupport = plane.fRMinSupport;
192 fRMaxSupport = plane.fRMaxSupport;
193 fPixelSizeX = plane.fPixelSizeX;
194 fPixelSizeY = plane.fPixelSizeY;
195 fThicknessActive = plane.fThicknessActive;
196 fThicknessSupport = plane.fThicknessSupport;
197 fThicknessReadout = plane.fThicknessReadout;
198 fZCenterActiveFront = plane.fZCenterActiveFront;
199 fZCenterActiveBack = plane.fZCenterActiveBack;
200 fEquivalentSilicon = plane.fEquivalentSilicon;
201 fEquivalentSiliconBeforeFront = plane.fEquivalentSiliconBeforeFront;
202 fEquivalentSiliconBeforeBack = plane.fEquivalentSiliconBeforeBack;
203 fActiveElements = new TClonesArray(*(plane.fActiveElements));
204 fActiveElements -> SetOwner(kTRUE);
205 fReadoutElements = new TClonesArray(*(plane.fReadoutElements));
206 fReadoutElements -> SetOwner(kTRUE);
207 fSupportElements = new TClonesArray(*(plane.fSupportElements));
208 fSupportElements -> SetOwner(kTRUE);
209 fHasPixelRectangularPatternAlongY = plane.fHasPixelRectangularPatternAlongY;
217 //====================================================================================================================================================
219 Bool_t AliMFTPlane::Init(Int_t planeNumber,
225 Double_t thicknessActive,
226 Double_t thicknessSupport,
227 Double_t thicknessReadout,
228 Bool_t hasPixelRectangularPatternAlongY) {
230 AliDebug(1, Form("Initializing Plane Structure for Plane %s", GetName()));
232 fPlaneNumber = planeNumber;
236 fPixelSizeX = pixelSizeX;
237 fPixelSizeY = pixelSizeY;
238 fThicknessActive = thicknessActive;
239 fThicknessSupport = thicknessSupport;
240 fThicknessReadout = thicknessReadout;
242 fHasPixelRectangularPatternAlongY = hasPixelRectangularPatternAlongY;
244 fZCenterActiveFront = fZCenter - 0.5*fThicknessSupport - 0.5*fThicknessActive;
245 fZCenterActiveBack = fZCenter + 0.5*fThicknessSupport + 0.5*fThicknessActive;
247 // if (fRMinSupport <= fRadiusMin) fRMinSupport = fRadiusMin;
249 // fRMinSupport = fRadiusMin + (fHeightActive-fActiveSuperposition) * Int_t((fRMinSupport-fRadiusMin)/(fHeightActive-fActiveSuperposition));
252 if (fRMax < fRMinSupport+fHeightActive) fRMax = fRMinSupport + fHeightActive;
254 fRMax = fRMinSupport + (fHeightActive-fActiveSuperposition) *
255 (Int_t((fRMax-fRMinSupport-fHeightActive)/(fHeightActive-fActiveSuperposition))+1) + fHeightActive;
257 fRMaxSupport = TMath::Sqrt(fHeightActive*(2.*rMax-fHeightActive) + fRMax*fRMax) + fSupportExtMargin;
263 //====================================================================================================================================================
265 Bool_t AliMFTPlane::CreateStructure() {
268 Double_t minPosition[3]={0}, maxPosition[3]={0};
270 // ------------------- support element -------------------------------------------------
276 minPosition[0] = -1.*fRMaxSupport;
277 minPosition[1] = -1.*fRMaxSupport;
278 minPosition[2] = fZCenter - 0.5*fThicknessSupport;
280 maxPosition[0] = +1.*fRMaxSupport;
281 maxPosition[1] = +1.*fRMaxSupport;
282 maxPosition[2] = fZCenter + 0.5*fThicknessSupport;
284 new ((*fSupportElements)[fSupportElements->GetEntries()]) THnSparseC(Form("MFTSupportElemHist_%02d%03d", fPlaneNumber, fSupportElements->GetEntries()),
285 Form("MFTSupportElemHist_%02d%03d", fPlaneNumber, fSupportElements->GetEntries()),
286 3, nBins, minPosition, maxPosition);
288 // ------------------- det elements: active + readout ----------------------------------
290 Double_t lowEdgeActive = -1.*fRMax;
291 Double_t supEdgeActive = lowEdgeActive + fHeightActive;
293 Bool_t isFront = kTRUE;
295 while (supEdgeActive < fRMax+0.01) {
297 if (isFront) zMin = fZCenter - 0.5*fThicknessSupport - fThicknessActive;
298 else zMin = fZCenter + 0.5*fThicknessSupport;
300 Double_t extLimitAtLowEdgeActive = TMath::Sqrt((fRMax-TMath::Abs(lowEdgeActive)) * TMath::Abs(2*fRMax - (fRMax-TMath::Abs(lowEdgeActive))));
301 Double_t extLimitAtSupEdgeActive = TMath::Sqrt((fRMax-TMath::Abs(supEdgeActive)) * TMath::Abs(2*fRMax - (fRMax-TMath::Abs(supEdgeActive))));
303 // creating new det element: active + readout
305 Double_t extLimitDetElem = TMath::Max(extLimitAtLowEdgeActive, extLimitAtSupEdgeActive);
307 if (supEdgeActive<-1.*fRMinSupport+0.01 || lowEdgeActive>1.*fRMinSupport-0.01) { // single element covering the row
309 nBins[0] = TMath::Nint(2.*extLimitDetElem/fPixelSizeX);
310 nBins[1] = TMath::Nint(fHeightActive/fPixelSizeY);
313 minPosition[0] = -1.*extLimitDetElem;
314 minPosition[1] = lowEdgeActive;
315 minPosition[2] = zMin;
317 maxPosition[0] = +1.*extLimitDetElem;
318 maxPosition[1] = supEdgeActive;
319 maxPosition[2] = zMin+fThicknessActive;
321 new ((*fActiveElements)[fActiveElements->GetEntries()]) THnSparseC(Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
322 Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
323 3, nBins, minPosition, maxPosition);
325 if (supEdgeActive>0.) {
326 minPosition[1] = supEdgeActive;
327 maxPosition[1] = supEdgeActive+fHeightReadout;
330 minPosition[1] = lowEdgeActive-fHeightReadout;
331 maxPosition[1] = lowEdgeActive;
334 new ((*fReadoutElements)[fReadoutElements->GetEntries()]) THnSparseC(Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
335 Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
336 3, nBins, minPosition, maxPosition);
340 else { // two elements covering the row
342 Double_t intLimitAtLowEdge = 0., intLimitAtSupEdge = 0.;
343 if (fRMinSupport-TMath::Abs(lowEdgeActive)>0.) intLimitAtLowEdge = TMath::Sqrt((fRMinSupport-TMath::Abs(lowEdgeActive)) * TMath::Abs(2*fRMinSupport - (fRMinSupport-TMath::Abs(lowEdgeActive))));
344 if (fRMinSupport-TMath::Abs(supEdgeActive)>0.) intLimitAtSupEdge = TMath::Sqrt((fRMinSupport-TMath::Abs(supEdgeActive)) * TMath::Abs(2*fRMinSupport - (fRMinSupport-TMath::Abs(supEdgeActive))));
345 Double_t intLimitDetElem = TMath::Max(intLimitAtLowEdge, intLimitAtSupEdge);
347 nBins[0] = TMath::Nint((extLimitDetElem-intLimitDetElem)/fPixelSizeX);
348 nBins[1] = TMath::Nint(fHeightActive/fPixelSizeY);
353 minPosition[0] = -1.*extLimitDetElem;
354 minPosition[1] = lowEdgeActive;
355 minPosition[2] = zMin;
357 maxPosition[0] = -1.*intLimitDetElem;
358 maxPosition[1] = supEdgeActive;
359 maxPosition[2] = zMin+fThicknessActive;
361 new ((*fActiveElements)[fActiveElements->GetEntries()]) THnSparseC(Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
362 Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
363 3, nBins, minPosition, maxPosition);
365 if (supEdgeActive>0.) {
366 minPosition[1] = supEdgeActive;
367 maxPosition[1] = supEdgeActive+fHeightReadout;
370 minPosition[1] = lowEdgeActive-fHeightReadout;
371 maxPosition[1] = lowEdgeActive;
374 new ((*fReadoutElements)[fReadoutElements->GetEntries()]) THnSparseC(Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
375 Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
376 3, nBins, minPosition, maxPosition);
380 minPosition[0] = +1.*intLimitDetElem;
381 minPosition[1] = lowEdgeActive;
382 minPosition[2] = zMin;
384 maxPosition[0] = +1.*extLimitDetElem;
385 maxPosition[1] = supEdgeActive;
386 maxPosition[2] = zMin+fThicknessActive;
388 new ((*fActiveElements)[fActiveElements->GetEntries()]) THnSparseC(Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
389 Form("MFTActiveElemHist_%02d%03d", fPlaneNumber, fActiveElements->GetEntries()),
390 3, nBins, minPosition, maxPosition);
392 if (supEdgeActive>0.) {
393 minPosition[1] = supEdgeActive;
394 maxPosition[1] = supEdgeActive+fHeightReadout;
397 minPosition[1] = lowEdgeActive-fHeightReadout;
398 maxPosition[1] = lowEdgeActive;
401 new ((*fReadoutElements)[fReadoutElements->GetEntries()]) THnSparseC(Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
402 Form("MFTReadoutElemHist_%02d%03d", fPlaneNumber, fReadoutElements->GetEntries()),
403 3, nBins, minPosition, maxPosition);
407 lowEdgeActive += fHeightActive - fActiveSuperposition;
408 supEdgeActive = lowEdgeActive + fHeightActive;
413 AliDebug(1, Form("Structure completed for MFT plane %s", GetName()));
419 //====================================================================================================================================================
421 THnSparseC* AliMFTPlane::GetActiveElement(Int_t id) {
423 if (id<0 || id>=GetNActiveElements()) return NULL;
424 else return (THnSparseC*) fActiveElements->At(id);
428 //====================================================================================================================================================
430 THnSparseC* AliMFTPlane::GetReadoutElement(Int_t id) {
432 if (id<0 || id>=GetNReadoutElements()) return NULL;
433 else return (THnSparseC*) fReadoutElements->At(id);
437 //====================================================================================================================================================
439 THnSparseC* AliMFTPlane::GetSupportElement(Int_t id) {
441 if (id<0 || id>=GetNSupportElements()) return NULL;
442 else return (THnSparseC*) fSupportElements->At(id);
446 //====================================================================================================================================================
448 void AliMFTPlane::DrawPlane(Option_t *opt) {
450 // ------------------- "FRONT" option ------------------
452 if (!strcmp(opt, "front")) {
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 AliInfo("Created hist");
466 TEllipse *supportExt = new TEllipse(0.0, 0.0, fRMaxSupport, fRMaxSupport);
467 TEllipse *supportInt = new TEllipse(0.0, 0.0, fRMinSupport, fRMinSupport);
468 supportExt->SetFillColor(kCyan-10);
469 supportExt -> Draw("same");
470 supportInt -> Draw("same");
472 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
473 if (!IsFront(GetActiveElement(iEl))) continue;
474 TPave *pave = new TPave(GetActiveElement(iEl)->GetAxis(0)->GetXmin(),
475 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
476 GetActiveElement(iEl)->GetAxis(0)->GetXmax(),
477 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
478 pave -> SetFillColor(kGreen);
479 pave -> Draw("same");
482 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
483 if (!IsFront(GetReadoutElement(iEl))) continue;
484 TPave *pave = new TPave(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(),
485 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
486 GetReadoutElement(iEl)->GetAxis(0)->GetXmax(),
487 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
488 pave -> SetFillColor(kRed);
489 pave -> Draw("same");
494 // ------------------- "BACK" option ------------------
496 else if (!strcmp(opt, "back")) {
498 TCanvas *cnv = new TCanvas("cnv", GetName(), 900, 900);
501 TH2D *h = new TH2D("tmp", GetName(),
502 1, 1.1*GetSupportElement(0)->GetAxis(0)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(0)->GetXmax(),
503 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
504 h->SetXTitle("x [cm]");
505 h->SetYTitle("y [cm]");
508 TEllipse *supportExt = new TEllipse(0.0, 0.0, fRMaxSupport, fRMaxSupport);
509 TEllipse *supportInt = new TEllipse(0.0, 0.0, fRMinSupport, fRMinSupport);
510 supportExt -> SetFillColor(kCyan-10);
511 supportExt -> Draw("same");
512 supportInt -> Draw("same");
514 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
515 if (IsFront(GetActiveElement(iEl))) continue;
516 TPave *pave = new TPave(GetActiveElement(iEl)->GetAxis(0)->GetXmin(),
517 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
518 GetActiveElement(iEl)->GetAxis(0)->GetXmax(),
519 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
520 pave -> SetFillColor(kGreen);
521 pave -> Draw("same");
524 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
525 if (IsFront(GetReadoutElement(iEl))) continue;
526 TPave *pave = new TPave(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(),
527 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
528 GetReadoutElement(iEl)->GetAxis(0)->GetXmax(),
529 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
530 pave -> SetFillColor(kRed);
531 pave -> Draw("same");
536 // ------------------- "BOTH" option ------------------
538 else if (!strcmp(opt, "both")) {
540 TCanvas *cnv = new TCanvas("cnv", GetName(), 900, 900);
543 TH2D *h = new TH2D("tmp", GetName(),
544 1, 1.1*GetSupportElement(0)->GetAxis(0)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(0)->GetXmax(),
545 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
546 h->SetXTitle("x [cm]");
547 h->SetYTitle("y [cm]");
550 TEllipse *supportExt = new TEllipse(0.0, 0.0, fRMaxSupport, fRMaxSupport);
551 TEllipse *supportInt = new TEllipse(0.0, 0.0, fRMinSupport, fRMinSupport);
552 supportExt -> SetFillColor(kCyan-10);
553 supportExt -> Draw("same");
554 supportInt -> Draw("same");
556 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
557 if (IsFront(GetActiveElement(iEl)) && GetActiveElement(iEl)->GetAxis(0)->GetXmin()<0.) {
558 TPave *pave = new TPave(GetActiveElement(iEl)->GetAxis(0)->GetXmin(),
559 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
560 TMath::Min(GetActiveElement(iEl)->GetAxis(0)->GetXmax(), 0.),
561 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
562 pave -> SetFillColor(kGreen);
563 pave -> Draw("same");
565 else if (!IsFront(GetActiveElement(iEl)) && GetActiveElement(iEl)->GetAxis(0)->GetXmax()>0.) {
566 TPave *pave = new TPave(TMath::Max(GetActiveElement(iEl)->GetAxis(0)->GetXmin(), 0.),
567 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
568 GetActiveElement(iEl)->GetAxis(0)->GetXmax(),
569 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
570 pave -> SetFillColor(kGreen);
571 pave -> Draw("same");
575 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
576 if (IsFront(GetReadoutElement(iEl)) && GetReadoutElement(iEl)->GetAxis(0)->GetXmin()<0.) {
577 TPave *pave = new TPave(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(),
578 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
579 TMath::Min(GetReadoutElement(iEl)->GetAxis(0)->GetXmax(), 0.),
580 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
581 pave -> SetFillColor(kRed);
582 pave -> Draw("same");
584 else if (!IsFront(GetReadoutElement(iEl)) && GetReadoutElement(iEl)->GetAxis(0)->GetXmax()>0.) {
585 TPave *pave = new TPave(TMath::Max(GetReadoutElement(iEl)->GetAxis(0)->GetXmin(), 0.),
586 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
587 GetReadoutElement(iEl)->GetAxis(0)->GetXmax(),
588 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
589 pave -> SetFillColor(kRed);
590 pave -> Draw("same");
596 // ------------------- "PROFILE" option ------------------
598 else if (!strcmp(opt, "profile")) {
600 TCanvas *cnv = new TCanvas("cnv", GetName(), 300, 900);
603 TH2D *h = new TH2D("tmp", GetName(),
604 1, fZCenter-0.5, fZCenter+0.5,
605 1, 1.1*GetSupportElement(0)->GetAxis(1)->GetXmin(), 1.1*GetSupportElement(0)->GetAxis(1)->GetXmax());
606 h->SetXTitle("z [cm]");
607 h->SetYTitle("y [cm]");
610 TPave *supportExt = new TPave(GetSupportElement(0)->GetAxis(2)->GetXmin(), -fRMaxSupport,
611 GetSupportElement(0)->GetAxis(2)->GetXmax(), fRMaxSupport);
612 TPave *supportInt = new TPave(GetSupportElement(0)->GetAxis(2)->GetXmin(), -fRMinSupport,
613 GetSupportElement(0)->GetAxis(2)->GetXmax(), fRMinSupport);
614 supportExt -> SetFillColor(kCyan-10);
615 supportInt -> SetFillColor(kCyan-10);
616 supportExt -> SetBorderSize(1);
617 supportInt -> SetBorderSize(1);
618 supportExt -> Draw("same");
619 supportInt -> Draw("same");
621 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
623 if (IsFront(GetActiveElement(iEl))) {
624 pave = new TPave(GetActiveElement(iEl)->GetAxis(2)->GetXmax() -
625 5*(GetActiveElement(iEl)->GetAxis(2)->GetXmax()-GetActiveElement(iEl)->GetAxis(2)->GetXmin()),
626 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
627 GetActiveElement(iEl)->GetAxis(2)->GetXmax(),
628 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
631 pave = new TPave(GetActiveElement(iEl)->GetAxis(2)->GetXmin(),
632 GetActiveElement(iEl)->GetAxis(1)->GetXmin(),
633 GetActiveElement(iEl)->GetAxis(2)->GetXmin() +
634 5*(GetActiveElement(iEl)->GetAxis(2)->GetXmax()-GetActiveElement(iEl)->GetAxis(2)->GetXmin()),
635 GetActiveElement(iEl)->GetAxis(1)->GetXmax(), 1);
637 pave -> SetFillColor(kGreen);
638 pave -> Draw("same");
641 for (Int_t iEl=0; iEl<GetNReadoutElements(); iEl++) {
643 if (IsFront(GetReadoutElement(iEl))) {
644 pave = new TPave(GetReadoutElement(iEl)->GetAxis(2)->GetXmax() -
645 5*(GetReadoutElement(iEl)->GetAxis(2)->GetXmax()-GetReadoutElement(iEl)->GetAxis(2)->GetXmin()),
646 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
647 GetReadoutElement(iEl)->GetAxis(2)->GetXmax(),
648 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
651 pave = new TPave(GetReadoutElement(iEl)->GetAxis(2)->GetXmin(),
652 GetReadoutElement(iEl)->GetAxis(1)->GetXmin(),
653 GetReadoutElement(iEl)->GetAxis(2)->GetXmin() +
654 5*(GetReadoutElement(iEl)->GetAxis(2)->GetXmax()-GetReadoutElement(iEl)->GetAxis(2)->GetXmin()),
655 GetReadoutElement(iEl)->GetAxis(1)->GetXmax(), 1);
657 pave -> SetFillColor(kRed);
658 pave -> Draw("same");
665 //====================================================================================================================================================
667 Int_t AliMFTPlane::GetNumberOfChips(Option_t *opt) {
671 if (!strcmp(opt, "front")) {
672 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
673 if (!IsFront(GetActiveElement(iEl))) continue;
674 Double_t length = GetActiveElement(iEl)->GetAxis(0)->GetXmax() - GetActiveElement(iEl)->GetAxis(0)->GetXmin();
675 nChips += Int_t (length/AliMFTConstants::fWidthChip) + 1;
679 else if (!strcmp(opt, "back")) {
680 for (Int_t iEl=0; iEl<GetNActiveElements(); iEl++) {
681 if (IsFront(GetActiveElement(iEl))) continue;
682 Double_t length = GetActiveElement(iEl)->GetAxis(0)->GetXmax() - GetActiveElement(iEl)->GetAxis(0)->GetXmin();
683 nChips += Int_t (length/AliMFTConstants::fWidthChip) + 1;
691 //====================================================================================================================================================