#include "TFile.h"
#include "TNtuple.h"
#include "TClonesArray.h"
#include "TMath.h"
#include "AliMFTPlane.h"
#include "AliMFTSegmentation.h"
ClassImp(AliMFTSegmentation)
AliMFTSegmentation::AliMFTSegmentation():
TObject(),
fMFTPlanes(0)
{
}
AliMFTSegmentation::AliMFTSegmentation(const Char_t *nameGeomFile):
TObject(),
fMFTPlanes(0x0)
{
fMFTPlanes = new TClonesArray("AliMFTPlane", fNMaxPlanes);
fMFTPlanes -> SetOwner(kTRUE);
Float_t zCenter, rMin, rMax, pixelSizeX, pixelSizeY, thicknessActive, thicknessSupport, thicknessReadout;
Float_t equivalentSilicon, equivalentSiliconBeforeFront, equivalentSiliconBeforeBack, hasPixelRectangularPatternAlongY;
TFile *geomFile = new TFile(nameGeomFile);
TNtuple *geomNtuple = (TNtuple*) geomFile->Get("AliMFTGeometry");
geomNtuple -> SetBranchAddress("zCenter", &zCenter);
geomNtuple -> SetBranchAddress("rMin", &rMin);
geomNtuple -> SetBranchAddress("rMax", &rMax);
geomNtuple -> SetBranchAddress("pixelSizeX", &pixelSizeX);
geomNtuple -> SetBranchAddress("pixelSizeY", &pixelSizeY);
geomNtuple -> SetBranchAddress("thicknessActive", &thicknessActive);
geomNtuple -> SetBranchAddress("thicknessSupport", &thicknessSupport);
geomNtuple -> SetBranchAddress("thicknessReadout", &thicknessReadout);
geomNtuple -> SetBranchAddress("equivalentSilicon", &equivalentSilicon);
geomNtuple -> SetBranchAddress("equivalentSiliconBeforeFront", &equivalentSiliconBeforeFront);
geomNtuple -> SetBranchAddress("equivalentSiliconBeforeBack", &equivalentSiliconBeforeBack);
if (geomNtuple -> GetBranch("hasPixelRectangularPatternAlongY")) {
geomNtuple -> SetBranchAddress("hasPixelRectangularPatternAlongY", &hasPixelRectangularPatternAlongY);
}
else hasPixelRectangularPatternAlongY = 0.;
Int_t nPlanes = geomNtuple->GetEntries();
for (Int_t iPlane=0; iPlane<nPlanes; iPlane++) {
AliInfo(Form("Setting segmentation for MFT plane #%02d\n", iPlane));
geomNtuple -> GetEntry(iPlane);
zCenter = TMath::Abs(zCenter);
AliMFTPlane *plane = new AliMFTPlane(Form("MFTPlane_%02d", iPlane), Form("MFTPlane_%02d", iPlane));
plane -> Init(iPlane,
zCenter,
rMin,
rMax,
pixelSizeX,
pixelSizeY,
thicknessActive,
thicknessSupport,
thicknessReadout,
(hasPixelRectangularPatternAlongY>0.5));
plane -> SetEquivalentSilicon(equivalentSilicon);
plane -> SetEquivalentSiliconBeforeFront(equivalentSiliconBeforeFront);
plane -> SetEquivalentSiliconBeforeBack(equivalentSiliconBeforeBack);
plane -> CreateStructure();
new ((*fMFTPlanes)[fMFTPlanes->GetEntries()]) AliMFTPlane(*plane);
delete plane;
}
delete geomFile;
AliInfo("MFT segmentation set!\n");
}
AliMFTSegmentation::~AliMFTSegmentation() {
if (fMFTPlanes) fMFTPlanes->Delete();
delete fMFTPlanes;
}
void AliMFTSegmentation::Clear(const Option_t* ) {
if (fMFTPlanes) fMFTPlanes->Delete();
delete fMFTPlanes;
fMFTPlanes = NULL;
}
THnSparseC* AliMFTSegmentation::GetDetElem(Int_t detElemID) const {
Int_t planeNb = detElemID/fNMaxDetElemPerPlane;
Int_t detElemNb = detElemID - planeNb*fNMaxDetElemPerPlane;
THnSparseC *detElem = GetPlane(planeNb)->GetActiveElement(detElemNb);
return detElem;
}
Bool_t AliMFTSegmentation::Hit2PixelID(Double_t xHit, Double_t yHit, Int_t detElemID, Int_t &xPixel, Int_t &yPixel) {
THnSparseC *detElem = GetDetElem(detElemID);
if ( xHit<detElem->GetAxis(0)->GetXmin() ||
xHit>detElem->GetAxis(0)->GetXmax() ||
yHit<detElem->GetAxis(1)->GetXmin() ||
yHit>detElem->GetAxis(1)->GetXmax() ) return kFALSE;
xPixel = detElem->GetAxis(0)->FindBin(xHit) - 1;
yPixel = detElem->GetAxis(1)->FindBin(yHit) - 1;
return kTRUE;
}
Bool_t AliMFTSegmentation::DoesPixelExist(Int_t detElemID, Int_t xPixel, Int_t yPixel) {
THnSparseC *detElem = GetDetElem(detElemID);
if (xPixel>=0 && xPixel<detElem->GetAxis(0)->GetNbins() && yPixel>=0 && yPixel<detElem->GetAxis(1)->GetNbins()) return kTRUE;
else return kFALSE;
}
AliMFTSegmentation.cxx:10 AliMFTSegmentation.cxx:11 AliMFTSegmentation.cxx:12 AliMFTSegmentation.cxx:13 AliMFTSegmentation.cxx:14 AliMFTSegmentation.cxx:15 AliMFTSegmentation.cxx:16 AliMFTSegmentation.cxx:17 AliMFTSegmentation.cxx:18 AliMFTSegmentation.cxx:19 AliMFTSegmentation.cxx:20 AliMFTSegmentation.cxx:21 AliMFTSegmentation.cxx:22 AliMFTSegmentation.cxx:23 AliMFTSegmentation.cxx:24 AliMFTSegmentation.cxx:25 AliMFTSegmentation.cxx:26 AliMFTSegmentation.cxx:27 AliMFTSegmentation.cxx:28 AliMFTSegmentation.cxx:29 AliMFTSegmentation.cxx:30 AliMFTSegmentation.cxx:31 AliMFTSegmentation.cxx:32 AliMFTSegmentation.cxx:33 AliMFTSegmentation.cxx:34 AliMFTSegmentation.cxx:35 AliMFTSegmentation.cxx:36 AliMFTSegmentation.cxx:37 AliMFTSegmentation.cxx:38 AliMFTSegmentation.cxx:39 AliMFTSegmentation.cxx:40 AliMFTSegmentation.cxx:41 AliMFTSegmentation.cxx:42 AliMFTSegmentation.cxx:43 AliMFTSegmentation.cxx:44 AliMFTSegmentation.cxx:45 AliMFTSegmentation.cxx:46 AliMFTSegmentation.cxx:47 AliMFTSegmentation.cxx:48 AliMFTSegmentation.cxx:49 AliMFTSegmentation.cxx:50 AliMFTSegmentation.cxx:51 AliMFTSegmentation.cxx:52 AliMFTSegmentation.cxx:53 AliMFTSegmentation.cxx:54 AliMFTSegmentation.cxx:55 AliMFTSegmentation.cxx:56 AliMFTSegmentation.cxx:57 AliMFTSegmentation.cxx:58 AliMFTSegmentation.cxx:59 AliMFTSegmentation.cxx:60 AliMFTSegmentation.cxx:61 AliMFTSegmentation.cxx:62 AliMFTSegmentation.cxx:63 AliMFTSegmentation.cxx:64 AliMFTSegmentation.cxx:65 AliMFTSegmentation.cxx:66 AliMFTSegmentation.cxx:67 AliMFTSegmentation.cxx:68 AliMFTSegmentation.cxx:69 AliMFTSegmentation.cxx:70 AliMFTSegmentation.cxx:71 AliMFTSegmentation.cxx:72 AliMFTSegmentation.cxx:73 AliMFTSegmentation.cxx:74 AliMFTSegmentation.cxx:75 AliMFTSegmentation.cxx:76 AliMFTSegmentation.cxx:77 AliMFTSegmentation.cxx:78 AliMFTSegmentation.cxx:79 AliMFTSegmentation.cxx:80 AliMFTSegmentation.cxx:81 AliMFTSegmentation.cxx:82 AliMFTSegmentation.cxx:83 AliMFTSegmentation.cxx:84 AliMFTSegmentation.cxx:85 AliMFTSegmentation.cxx:86 AliMFTSegmentation.cxx:87 AliMFTSegmentation.cxx:88 AliMFTSegmentation.cxx:89 AliMFTSegmentation.cxx:90 AliMFTSegmentation.cxx:91 AliMFTSegmentation.cxx:92 AliMFTSegmentation.cxx:93 AliMFTSegmentation.cxx:94 AliMFTSegmentation.cxx:95 AliMFTSegmentation.cxx:96 AliMFTSegmentation.cxx:97 AliMFTSegmentation.cxx:98 AliMFTSegmentation.cxx:99 AliMFTSegmentation.cxx:100 AliMFTSegmentation.cxx:101 AliMFTSegmentation.cxx:102 AliMFTSegmentation.cxx:103 AliMFTSegmentation.cxx:104 AliMFTSegmentation.cxx:105 AliMFTSegmentation.cxx:106 AliMFTSegmentation.cxx:107 AliMFTSegmentation.cxx:108 AliMFTSegmentation.cxx:109 AliMFTSegmentation.cxx:110 AliMFTSegmentation.cxx:111 AliMFTSegmentation.cxx:112 AliMFTSegmentation.cxx:113 AliMFTSegmentation.cxx:114 AliMFTSegmentation.cxx:115 AliMFTSegmentation.cxx:116 AliMFTSegmentation.cxx:117 AliMFTSegmentation.cxx:118 AliMFTSegmentation.cxx:119 AliMFTSegmentation.cxx:120 AliMFTSegmentation.cxx:121 AliMFTSegmentation.cxx:122 AliMFTSegmentation.cxx:123 AliMFTSegmentation.cxx:124 AliMFTSegmentation.cxx:125 AliMFTSegmentation.cxx:126 AliMFTSegmentation.cxx:127 AliMFTSegmentation.cxx:128 AliMFTSegmentation.cxx:129 AliMFTSegmentation.cxx:130 AliMFTSegmentation.cxx:131 AliMFTSegmentation.cxx:132 AliMFTSegmentation.cxx:133 AliMFTSegmentation.cxx:134 AliMFTSegmentation.cxx:135 AliMFTSegmentation.cxx:136 AliMFTSegmentation.cxx:137 AliMFTSegmentation.cxx:138 AliMFTSegmentation.cxx:139 AliMFTSegmentation.cxx:140 AliMFTSegmentation.cxx:141 AliMFTSegmentation.cxx:142 AliMFTSegmentation.cxx:143 AliMFTSegmentation.cxx:144 AliMFTSegmentation.cxx:145 AliMFTSegmentation.cxx:146 AliMFTSegmentation.cxx:147 AliMFTSegmentation.cxx:148 AliMFTSegmentation.cxx:149 AliMFTSegmentation.cxx:150 AliMFTSegmentation.cxx:151 AliMFTSegmentation.cxx:152 AliMFTSegmentation.cxx:153 AliMFTSegmentation.cxx:154 AliMFTSegmentation.cxx:155 AliMFTSegmentation.cxx:156 AliMFTSegmentation.cxx:157 AliMFTSegmentation.cxx:158 AliMFTSegmentation.cxx:159 AliMFTSegmentation.cxx:160 AliMFTSegmentation.cxx:161 AliMFTSegmentation.cxx:162 AliMFTSegmentation.cxx:163 AliMFTSegmentation.cxx:164 AliMFTSegmentation.cxx:165 AliMFTSegmentation.cxx:166 AliMFTSegmentation.cxx:167 AliMFTSegmentation.cxx:168 AliMFTSegmentation.cxx:169 AliMFTSegmentation.cxx:170 AliMFTSegmentation.cxx:171 AliMFTSegmentation.cxx:172 AliMFTSegmentation.cxx:173 AliMFTSegmentation.cxx:174 AliMFTSegmentation.cxx:175 AliMFTSegmentation.cxx:176 AliMFTSegmentation.cxx:177 AliMFTSegmentation.cxx:178 AliMFTSegmentation.cxx:179 AliMFTSegmentation.cxx:180 AliMFTSegmentation.cxx:181 AliMFTSegmentation.cxx:182 AliMFTSegmentation.cxx:183