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 // Segmentation class for the planes of the ALICE Muon Forward Tracker
20 // Contact author: antonio.uras@cern.ch
22 //====================================================================================================================================================
26 #include "TClonesArray.h"
28 #include "AliMFTPlane.h"
29 #include "AliMFTSegmentation.h"
31 ClassImp(AliMFTSegmentation)
33 //====================================================================================================================================================
35 AliMFTSegmentation::AliMFTSegmentation():
40 // default constructor
44 //====================================================================================================================================================
46 AliMFTSegmentation::AliMFTSegmentation(const Char_t *nameGeomFile):
53 fMFTPlanes = new TClonesArray("AliMFTPlane", fNMaxPlanes);
54 fMFTPlanes -> SetOwner(kTRUE);
55 Float_t zCenter, rMin, rMax, pixelSizeX, pixelSizeY, thicknessActive, thicknessSupport, thicknessReadout;
56 Float_t equivalentSilicon, equivalentSiliconBeforeFront, equivalentSiliconBeforeBack, hasPixelRectangularPatternAlongY;
58 TFile *geomFile = new TFile(nameGeomFile);
59 TNtuple *geomNtuple = (TNtuple*) geomFile->Get("AliMFTGeometry");
61 geomNtuple -> SetBranchAddress("zCenter", &zCenter);
62 geomNtuple -> SetBranchAddress("rMin", &rMin);
63 geomNtuple -> SetBranchAddress("rMax", &rMax);
64 geomNtuple -> SetBranchAddress("pixelSizeX", &pixelSizeX);
65 geomNtuple -> SetBranchAddress("pixelSizeY", &pixelSizeY);
66 geomNtuple -> SetBranchAddress("thicknessActive", &thicknessActive);
67 geomNtuple -> SetBranchAddress("thicknessSupport", &thicknessSupport);
68 geomNtuple -> SetBranchAddress("thicknessReadout", &thicknessReadout);
69 geomNtuple -> SetBranchAddress("equivalentSilicon", &equivalentSilicon);
70 geomNtuple -> SetBranchAddress("equivalentSiliconBeforeFront", &equivalentSiliconBeforeFront);
71 geomNtuple -> SetBranchAddress("equivalentSiliconBeforeBack", &equivalentSiliconBeforeBack);
72 if (geomNtuple -> GetBranch("hasPixelRectangularPatternAlongY")) {
73 geomNtuple -> SetBranchAddress("hasPixelRectangularPatternAlongY", &hasPixelRectangularPatternAlongY);
75 else hasPixelRectangularPatternAlongY = 0.;
77 Int_t nPlanes = geomNtuple->GetEntries();
79 for (Int_t iPlane=0; iPlane<nPlanes; iPlane++) {
83 AliInfo(Form("Setting segmentation for MFT plane #%02d\n", iPlane));
85 geomNtuple -> GetEntry(iPlane);
86 zCenter = TMath::Abs(zCenter);
88 AliMFTPlane *plane = new AliMFTPlane(Form("MFTPlane_%02d", iPlane), Form("MFTPlane_%02d", iPlane));
99 (hasPixelRectangularPatternAlongY>0.5));
101 plane -> SetEquivalentSilicon(equivalentSilicon);
102 plane -> SetEquivalentSiliconBeforeFront(equivalentSiliconBeforeFront);
103 plane -> SetEquivalentSiliconBeforeBack(equivalentSiliconBeforeBack);
104 plane -> CreateStructure();
106 new ((*fMFTPlanes)[fMFTPlanes->GetEntries()]) AliMFTPlane(*plane);
113 AliInfo("MFT segmentation set!\n");
117 //====================================================================================================================================================
119 AliMFTSegmentation::~AliMFTSegmentation() {
121 if (fMFTPlanes) fMFTPlanes->Delete();
126 //====================================================================================================================================================
128 void AliMFTSegmentation::Clear(const Option_t* /*opt*/) {
130 if (fMFTPlanes) fMFTPlanes->Delete();
136 //====================================================================================================================================================
138 THnSparseC* AliMFTSegmentation::GetDetElem(Int_t detElemID) const {
142 Int_t planeNb = detElemID/fNMaxDetElemPerPlane;
143 Int_t detElemNb = detElemID - planeNb*fNMaxDetElemPerPlane;
145 THnSparseC *detElem = GetPlane(planeNb)->GetActiveElement(detElemNb);
151 //====================================================================================================================================================
153 Bool_t AliMFTSegmentation::Hit2PixelID(Double_t xHit, Double_t yHit, Int_t detElemID, Int_t &xPixel, Int_t &yPixel) {
155 // xPixel and yPixel start from 0
157 THnSparseC *detElem = GetDetElem(detElemID);
159 if ( xHit<detElem->GetAxis(0)->GetXmin() ||
160 xHit>detElem->GetAxis(0)->GetXmax() ||
161 yHit<detElem->GetAxis(1)->GetXmin() ||
162 yHit>detElem->GetAxis(1)->GetXmax() ) return kFALSE;
164 xPixel = detElem->GetAxis(0)->FindBin(xHit) - 1;
165 yPixel = detElem->GetAxis(1)->FindBin(yHit) - 1;
171 //====================================================================================================================================================
173 Bool_t AliMFTSegmentation::DoesPixelExist(Int_t detElemID, Int_t xPixel, Int_t yPixel) {
175 THnSparseC *detElem = GetDetElem(detElemID);
177 if (xPixel>=0 && xPixel<detElem->GetAxis(0)->GetNbins() && yPixel>=0 && yPixel<detElem->GetAxis(1)->GetNbins()) return kTRUE;
182 //====================================================================================================================================================