CbmRoot
Loading...
Searching...
No Matches
CbmTofCreateDigiPar.cxx
Go to the documentation of this file.
1/* Copyright (C) 2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Florian Uhlig [committer] */
4
6
7#include "CbmTofCell.h" // for CbmTofCell
8#include "CbmTofDigiPar.h" // for CbmTofDigiPar
9#include "CbmTofGeoHandler.h" // for CbmTofGeoHandler, k07a, k12b, k14a
10
11#include <FairRootManager.h> // for FairRootManager
12#include <FairRunAna.h> // for FairRunAna
13#include <FairRuntimeDb.h> // for FairRuntimeDb
14#include <FairTask.h> // for FairTask, InitStatus, kSUCCESS
15#include <Logger.h> // for LOG, Logger
16
17#include <TArrayD.h> // for TArrayD
18#include <TArrayI.h> // for TArrayI
19#include <TGeoManager.h> // for TGeoManager, gGeoManager
20#include <TGeoNode.h> // for TGeoNode
21#include <TObjArray.h> // for TObjArray
22#include <TObject.h> // for TObject
23
24#include <utility> // for pair
25
26// ---- Default constructor -------------------------------------------
28 : FairTask("TofCreateDigiPar")
29 , fSMType(-1)
30 , fSModule(-1)
31 , fCounter(-1)
32 , fGap(-1)
33 , fCell(-1)
34 , fRegion(-1)
35 , fSizex(-1.)
36 , fSizey(-1.)
37 , fX(-1.)
38 , fY(-1.)
39 , fZ(-1.)
40 , fDetID(-1)
41 , fCellID(-1)
42 , fCellMap()
43 , fCellMapIt()
44 , fDigiPar(nullptr)
45 , fGeoHandler(new CbmTofGeoHandler())
46{
47}
48// --------------------------------------------------------------------
49
50// ---- Constructor ----------------------------------------------------
51CbmTofCreateDigiPar::CbmTofCreateDigiPar(const char* name, const char* /*title*/)
52 : FairTask(name)
53 , fSMType(-1)
54 , fSModule(-1)
55 , fCounter(-1)
56 , fGap(-1)
57 , fCell(-1)
58 , fRegion(-1)
59 , fSizex(-1.)
60 , fSizey(-1.)
61 , fX(-1.)
62 , fY(-1.)
63 , fZ(-1.)
64 , fDetID()
65 , fCellID(-1)
66 , fCellMap()
67 , fCellMapIt()
68 , fDigiPar(nullptr)
69 , fGeoHandler(new CbmTofGeoHandler())
70{
71}
72// --------------------------------------------------------------------
73
74// ---- Destructor ----------------------------------------------------
76// --------------------------------------------------------------------
77
78// ---- Initialisation ----------------------------------------------
80{
81
82 LOG(info) << " * CbmTofCreateDigiPar:: SetParContainers() ";
83
84 // Get Base Container
85 //FairRunAna* ana = FairRunAna::Instance();
86 //FairRuntimeDb* rtdb = ana->GetRuntimeDb();
87 FairRuntimeDb* rtdb = FairRuntimeDb::instance();
88
89 fDigiPar = (CbmTofDigiPar*) (rtdb->getContainer("CbmTofDigiPar"));
90
91 LOG(info) << " * CbmTofCreateDigiPar:: fDigiPar " << fDigiPar;
92}
93// --------------------------------------------------------------------
94
95// ---- ReInit -------------------------------------------------------
97{
98
99 LOG(info) << " * CbmTofCreateDigiPar * :: ReInit() ";
100
101 // Get Base Container
102 //FairRunAna* ana = FairRunAna::Instance();
103 //FairRuntimeDb* rtdb = ana->GetRuntimeDb();
104 FairRuntimeDb* rtdb = FairRuntimeDb::instance();
105
106 fDigiPar = (CbmTofDigiPar*) (rtdb->getContainer("CbmTofDigiPar"));
107
108 return kSUCCESS;
109}
110// --------------------------------------------------------------------
111
112// ---- Init ----------------------------------------------------------
114{
115
116 Int_t geoVersion = fGeoHandler->Init();
117
118 // fModInfoMap = GetModuleInfoMap();
119
120 LOG(info) << " * CbmTofCreateDigiPar * :: Init() ";
121
122 FairRootManager* ioman = FairRootManager::Instance();
123 if (!ioman) LOG(fatal) << "No FairRootManager found";
124
125 if (k21a == geoVersion) {
126 LOG(info) << "Will now create digitization parameters for root geometry.";
128 }
129 if (k14a == geoVersion) {
130 LOG(info) << "Will now create digitization parameters for root geometry.";
132 }
133 if (k12b == geoVersion) {
134 LOG(info) << "Will now create digitization parameters for root geometry.";
136 }
137 if (k07a == geoVersion) {
138 LOG(info) << "Will now create digitization parameters for ascii geometry.";
140 }
141
142 // fill Transformation matrices for each cell
143 std::map<Int_t, TGeoNode*> nodemap;
144 for (Int_t iCell = 0; iCell < fDigiPar->GetNrOfModules(); iCell++) {
145 Int_t iAddr = fDigiPar->GetCellId(iCell);
146 CbmTofCell* fChannelInfo = fDigiPar->GetCell(iAddr);
147 gGeoManager->FindNode(fChannelInfo->GetX(), fChannelInfo->GetY(), fChannelInfo->GetZ());
148 TGeoNode* tGeoNode = gGeoManager->GetCurrentNode();
149 nodemap.insert(std::pair<Int_t, TGeoNode*>(iAddr, tGeoNode));
150 LOG(debug2) << Form("Digipar for %d, addr 0x%08x: Node=%p, x %6.2f, y %6.2f, z %6.2f ", iCell, iAddr, tGeoNode,
151 fChannelInfo->GetX(), fChannelInfo->GetY(), fChannelInfo->GetZ());
152 }
153 fDigiPar->SetNodeMap(nodemap);
154
155 return kSUCCESS;
156}
157// --------------------------------------------------------------------
159{
160
161 LOG(info) << " * CbmTofCreateDigiPar * :: FinishTask() ";
162
163 FairRunAna* ana = FairRunAna::Instance();
164 FairRuntimeDb* rtdb = ana->GetRuntimeDb();
165
166 fDigiPar = (CbmTofDigiPar*) (rtdb->getContainer("CbmTofDigiPar"));
167
168 fDigiPar->print();
169}
170
171// ---- Exec ----------------------------------------------------------
172void CbmTofCreateDigiPar::Exec(Option_t* /*option*/) {}
173
174// --------------------------------------------------------------------
176{
177
178 // The geometry structure is treelike with cave as
179 // the top node. For the TOF there is a keeping volume
180 // tof1. Inside there is a region (supermodule) with cells
181 // which are constructed out of glass and the active gaps.
182 // To extract the gap information one has to navigate there.
183 // Loop over all nodes below the top node (cave). If one of
184 // the nodes contains a string tof it must be the tof keeping
185 // volume. Now loop over all modules. For each module loop over
186 // all cells and for each cell loop now over the parts of this cell.
187 // Each cell is build out of inactive glass plates and the active gaps.
188 // since we are not interested in the inactive parts store only
189 // the relevant information about the gaps.
190 // Example for full path to gap
191 // /cave/tof1_0/t1reg1mod_1/t1reg1cel_1/t1reg1gap_1
192
193 /* Int_t nrCells = 0;*/
194 std::vector<CbmTofCell*> cellVector;
195 CbmTofCell* tofCell;
196
197 TString TopNode = gGeoManager->GetTopNode()->GetName();
198 LOG(debug2) << TopNode;
199
200 // Loop over all detector systems to find tof part
201 TObjArray* detSystems = gGeoManager->GetTopNode()->GetNodes();
202 for (Int_t iSys = 0; iSys < detSystems->GetEntriesFast(); ++iSys) {
203 TGeoNode* node = (TGeoNode*) detSystems->At(iSys);
204 LOG(debug2) << node->GetName();
205
206 // Only do something useful for tof part of geometry
207 // The node name contains a string "tof"
208 // e.g. tof_vXXy or tof_v12b
209 if (TString(node->GetName()).Contains("tof")) {
210 TString TofNode = node->GetName();
211 LOG(info) << "Found keeping node " << TofNode;
212 if (TString(((node->GetNodes())->At(0))->GetName()).Contains("Stand")) {
213 LOG(info) << " Found Tof Stand " << ((node->GetNodes())->At(0))->GetName();
214 node = (TGeoNode*) (node->GetNodes())->At(0);
215 TofNode = TofNode + "/" + node->GetName();
216 LOG(info) << "Modified keeping node " << TofNode;
217 }
218 TGeoNode* keep = node;
219 TObjArray* keeping = keep->GetNodes();
220
221 LOG(info) << "Building Tof Digi Par database ... ";
222
223 // Loop over tof keeping volume. There should be only one.
224 for (Int_t ikeep = 0; ikeep < keeping->GetEntriesFast(); ikeep++) {
225 TGeoNode* keepvol = (TGeoNode*) keeping->At(ikeep);
226 TString KeepNode = keepvol->GetName();
227 TObjArray* modarray = keepvol->GetNodes();
228
229 // Loop over the different found modules
230 for (Int_t imodule = 0; imodule < modarray->GetEntriesFast(); imodule++) {
231 TGeoNode* module = (TGeoNode*) modarray->At(imodule);
232 TString ModuleNode = module->GetName();
233 TObjArray* cellarray = module->GetNodes();
234
235 // Loop over all cells of each module
236 for (Int_t icell = 0; icell < cellarray->GetEntriesFast(); icell++) {
237 TGeoNode* cell = (TGeoNode*) cellarray->At(icell);
238 TString CellNode = cell->GetName();
239 TObjArray* gaparray = cell->GetNodes();
240
241 // Loop over all elements belonging to one cell
242 // Relevant are only the gaps which are the active parts of the detector
243 for (Int_t igap = 0; igap < gaparray->GetEntriesFast(); igap++) {
244 TGeoNode* gap = (TGeoNode*) gaparray->At(igap);
245 TString GapNode = gap->GetName();
246
247 if (GapNode.Contains("gap")) {
248
249 // Construct full path name for the gap
250 // Extract the necessary geometrical information and store
251 // this information in member variables
252 TString FullPath =
253 "/" + TopNode + "/" + TofNode + "/" + KeepNode + "/" + ModuleNode + "/" + CellNode + "/" + GapNode;
254 LOG(debug2) << "Path: " << FullPath;
256
257 // Since there are 8 gaps per cell, the information for all these
258 // gaps are stored. After all the information is available the
259 // position of the cell is calculated as mean position of the
260 // 8 individual gaps. The size of each cell should be the same for
261 // all 8 gaps.
262
264 if (fCellMapIt == fCellMap.end()) {
265 // new tof cell
266 tofCell = new CbmTofCell(fCellID, fX, fY, fZ, fSizex, fSizey);
267 cellVector.clear();
268 cellVector.push_back(tofCell);
269 fCellMap.insert(std::pair<Int_t, std::vector<CbmTofCell*>>(fCellID, cellVector));
270 }
271 else {
272 // already existing cell
273 tofCell = new CbmTofCell(fCellID, fX, fY, fZ, fSizex, fSizey);
274 fCellMap[fCellID].push_back(tofCell);
275 }
276 }
277 }
278 }
279 }
280 }
281 }
282 }
283 // Calculate the mean position for each cell and fill the tof digi parameters
284 FillDigiPar();
285}
286
288{
289
290 // The geometry structure is treelike with cave as
291 // the top node. For the TOF there is a keeping volume
292 // tof1_v<version>. <version is the geometry version which is constructed
293 // from the year when this geometry was developed and a running index starting
294 // with a,b .. . So tof_v12b denotes the second tof geometry version
295 // developed in 2012.
296 // Inside the tof keeping volumes there is one or more (supermodules)
297 // with a gas box inside which contain the different counters.
298 // Each of this counters in now build of a stack of glass plates
299 // and active gas gaps. Interesting for the parameters are only the
300 // gas gaps. Each gap is then subdivided into several detector cells.
301 // To extract the gap information one has to navigate there.
302 // Loop over all nodes below the top node (cave). If one of
303 // the nodes contains a string tof_v it must be the tof keeping
304 // volume. Now loop over all super-modules. For each super-module
305 // loop over all counters. For each counter loop over all gaps and
306 // for each gap loop over all cells.
307 // For each cell/gap store now the relevant information.
308 // Example for full path to gap
309 // /cave_0/tof_v12b_0/module_0_0/gas_box_0/counter_0/Gap_0/Cell_1
310
311 // /TOP_1/tof_v21b_mcbm_1/tof_v21b_mcbmStand_1/module_9_0/gas_box_0/counter_1/Gap_17/Cell_18
312
313 /* Int_t nrCells = 0;*/
314 std::vector<CbmTofCell*> cellVector;
315 CbmTofCell* tofCell;
316
317
318 TString TopNode = gGeoManager->GetTopNode()->GetName();
319 LOG(debug2) << "TopNode: " << TopNode;
320
321 // Loop over all detector systems to find tof part
322 TObjArray* detSystems = gGeoManager->GetTopNode()->GetNodes();
323 for (Int_t iSys = 0; iSys < detSystems->GetEntriesFast(); ++iSys) {
324 TGeoNode* node = (TGeoNode*) detSystems->At(iSys);
325 LOG(debug2) << "Det system: " << node->GetName();
326
327 // Only do something useful for tof_v part of geometry
328 // The node name contains a string "tof_v"
329 // e.g. tof_v12b
330 if (TString(node->GetName()).Contains("tof")) {
331 TString TofNode = node->GetName();
332 LOG(info) << "Found tof keeping volume: " << TofNode;
333
334 if (TString(((node->GetNodes())->At(0))->GetName()).Contains("Stand")) {
335 LOG(info) << " Found Tof Stand " << ((node->GetNodes())->At(0))->GetName();
336 node = (TGeoNode*) (node->GetNodes())->At(0);
337 TofNode = TofNode + "/" + node->GetName();
338 LOG(info) << "Modified tof keeping node " << TofNode;
339 }
340
341 TGeoNode* keep = node;
342 TObjArray* modarray = keep->GetNodes();
343
344 if (nullptr == modarray) {
345 LOG(warning) << " No modules found in geometry ";
346 return;
347 }
348 // Loop over the different found modules
349 for (Int_t imodule = 0; imodule < modarray->GetEntriesFast(); imodule++) {
350 TGeoNode* module = (TGeoNode*) modarray->At(imodule);
351 TString ModuleNode = module->GetName();
352 TObjArray* modpartarray = module->GetNodes();
353
354 // Loop over the different parts of a module
355 for (Int_t imodpart = 0; imodpart < modpartarray->GetEntriesFast(); imodpart++) {
356 TGeoNode* modpart = (TGeoNode*) modpartarray->At(imodpart);
357 TString ModPartNode = modpart->GetName();
358
359 if (ModPartNode.Contains("gas_box")) {
360 TObjArray* counterarray = modpart->GetNodes();
361
362 // Loop over the different counters
363 for (Int_t icounter = 0; icounter < counterarray->GetEntriesFast(); icounter++) {
364 TGeoNode* counter = (TGeoNode*) counterarray->At(icounter);
365 TString CounterNode = counter->GetName();
366 if (!CounterNode.Contains("counter")) continue;
367 TObjArray* gaparray = counter->GetNodes();
368 if (nullptr == gaparray) LOG(error) << " no gaps for counter " << CounterNode;
369 // Loop over the different gaps
370 for (Int_t igap = 0; igap < gaparray->GetEntriesFast(); igap++) {
371 TGeoNode* gap = (TGeoNode*) gaparray->At(igap);
372 TString GapNode = gap->GetName();
373 if (GapNode.Contains("Gap")) {
374 TObjArray* cellarray = gap->GetNodes();
375
376 // Loop over the different cells
377 for (Int_t icell = 0; icell < cellarray->GetEntriesFast(); icell++) {
378 TGeoNode* cell = (TGeoNode*) cellarray->At(icell);
379 TString CellNode = cell->GetName();
380
381 // Construct full path name for the gap
382 // Extract the necessary geometrical information and store
383 // this information in member variables
384 TString FullPath = "/" + TopNode + "/" + TofNode + "/" + +ModuleNode + "/" + ModPartNode + "/"
385 + CounterNode + "/" + GapNode + "/" + CellNode;
386 LOG(debug2) << "Path: " << FullPath;
387
389
390 // Since there are 8 gaps per cell, the information for all these
391 // gaps are stored. After all the information is available the
392 // position of the cell is calculated as mean position of the
393 // 8 individual gaps. The size of each cell should be the same for
394 // all 8 gaps.
395
397 if (fCellMapIt == fCellMap.end()) {
398 // new tof cell
399 tofCell = new CbmTofCell(fCellID, fX, fY, fZ, fSizex, fSizey);
400 cellVector.clear();
401 cellVector.push_back(tofCell);
402 fCellMap.insert(std::pair<Int_t, std::vector<CbmTofCell*>>(fCellID, cellVector));
403 }
404 else {
405 // already existing cell
406 tofCell = new CbmTofCell(fCellID, fX, fY, fZ, fSizex, fSizey);
407 fCellMap[fCellID].push_back(tofCell);
408 }
409 }
410 }
411 }
412 }
413 }
414 }
415 }
416 }
417 }
418 // Calculate the mean position for each cell and fill the tof digi parameters
419 FillDigiPar();
420}
421
423{
424 // Calculate the unique detector ID including the gap information.
425 // Since all gaps for a given cell are added up to one channel the
426 // id and corresponding information stored in the parameter container
427 // should be calculated without the gap information.
428
430
437
438 fSizex = fGeoHandler->GetSizeX(FullPath);
439 fSizey = fGeoHandler->GetSizeY(FullPath);
440
441 fX = fGeoHandler->GetX(FullPath);
442 fY = fGeoHandler->GetY(FullPath);
443 fZ = fGeoHandler->GetZ(FullPath);
444
445 LOG(debug2) << "FCI: " << FullPath.Data();
446 LOG(debug2) << "FCI: X: " << fX << " Y: " << fY << " Z: " << fZ << " SizeX: " << fSizex << " SizeY: " << fSizey;
447 LOG(debug2) << Form(" DetID: 0x%08x", fDetID) << " Region: " << fRegion << " Counter: " << fCounter
448 << " Gap: " << fGap << " Cell: " << fCell;
449
451
458
459 LOG(debug2) << "FCI: Cell ID: " << Form("0x%08x", fCellID) << " detId " << Form("0x%08x", fDetID);
460 LOG(debug2) << " Region: " << fGeoHandler->GetRegion(fCellID) << " SMTYP: " << fGeoHandler->GetSMType(fCellID)
461 << " SModule: " << fGeoHandler->GetSModule(fCellID) << " Module: " << fGeoHandler->GetCounter(fCellID)
462 << " Gap: " << fGeoHandler->GetGap(fCellID) << " Cell: " << fGeoHandler->GetCell(fCellID);
463}
464
465
467{
468
469 /*
470 ofstream fout;
471 fout.open("output.txt");
472 fout << "#####################################################################################"<<"\n";
473 fout << "# Geometry for the TOF detector"<<"\n";
474 fout << "# Format:"<<"\n";
475 fout << "#"<<"\n";
476 fout << "# Region Module Cell type X[mm] Y[mm] Dx[mm] Dy[mm]"<<"\n";
477 fout << "#####################################################################################"<<"\n";
478 fout << "[TofGeoPar]"<<"\n";
479*/
480
481 Int_t Nrcells = (Int_t) fCellMap.size();
482 LOG(debug) << "FillDigiPar:: Nr. of tof cells: " << Nrcells;
484 if (NULL == fDigiPar) LOG(fatal) << "Tof Digi Parameter container not available ";
485 fDigiPar->SetNrOfCells(Nrcells); //transfer info to DigiPar
486
487 TArrayI* CellId = new TArrayI(Nrcells);
488 TArrayD* CellX = new TArrayD(Nrcells);
489 TArrayD* CellY = new TArrayD(Nrcells);
490 TArrayD* CellZ = new TArrayD(Nrcells);
491 TArrayD* CellDx = new TArrayD(Nrcells);
492 TArrayD* CellDy = new TArrayD(Nrcells);
493
494 Int_t iDigi = 0;
495
496
497 std::map<Int_t, CbmTofCell*> singleCellMap;
498 CbmTofCell* singlecell;
499
500 for (fCellMapIt = fCellMap.begin(); fCellMapIt != fCellMap.end(); fCellMapIt++) {
501
502 CellId->AddAt(fCellMapIt->first, iDigi);
503
504 std::vector<CbmTofCell*> vcell = fCellMapIt->second;
505 Int_t cellId = fCellMapIt->first;
506 // sanity check
507 std::vector<CbmTofCell*>::iterator vcellIt;
508 Int_t id;
509 /* Int_t oldid;*/
510 /* Bool_t first=kTRUE;*/
511 CbmTofCell* tofcell;
512 Double_t x = 0.;
513 Double_t y = 0.;
514 Double_t z = 0.;
515 Double_t sizex = 0.;
516 Double_t sizey = 0.;
517 for (vcellIt = vcell.begin(); vcellIt != vcell.end(); ++vcellIt) {
518 tofcell = (*vcellIt);
519 id = tofcell->GetDetectorId();
520 if (id != cellId) {
521 LOG(info) << "id, cellId: " << id << " , " << cellId << "\n";
522 LOG(info) << "id and CellId differ";
523 }
524 x += tofcell->GetX();
525 y += tofcell->GetY();
526 z += tofcell->GetZ();
527 sizex += 2. * tofcell->GetSizex(); //nh: factor 2
528 sizey += 2. * tofcell->GetSizey();
529 }
530
531 CellX->AddAt(x / vcell.size(), iDigi);
532 CellY->AddAt(y / vcell.size(), iDigi);
533 CellZ->AddAt(z / vcell.size(), iDigi);
534 CellDx->AddAt(sizex / vcell.size(), iDigi);
535 CellDy->AddAt(sizey / vcell.size(), iDigi);
536
537
538 singlecell = new CbmTofCell(cellId, x / vcell.size(), y / vcell.size(), z / vcell.size(), sizex / vcell.size(),
539 sizey / vcell.size());
540 singleCellMap.insert(std::pair<Int_t, CbmTofCell*>(cellId, singlecell));
541
542
543 fRegion = fGeoHandler->GetRegion(cellId);
544 fSMType = fGeoHandler->GetSMType(cellId);
547 fCell = fGeoHandler->GetCell(cellId);
548
549 if (0) {
550 LOG(info) << "FillDigiPar " << iDigi << ", cellId = " << cellId << ", t " << fSMType << " m " << fSModule
551 << " c " << fCounter << " s " << fCell << " " << x / vcell.size() * 10 << " "
552 << y / vcell.size() * 10 << " " << z / vcell.size() * 10 << " " << sizex / vcell.size() * 10
553 << " " << sizey / vcell.size() * 10;
554 }
555 iDigi++;
556 }
557
558
559 fDigiPar->SetNrOfCells(Nrcells);
560 fDigiPar->SetCellIdArray(*CellId);
561 fDigiPar->SetCellXArray(*CellX);
562 fDigiPar->SetCellYArray(*CellY);
563 fDigiPar->SetCellZArray(*CellZ);
564 fDigiPar->SetCellDxArray(*CellDx);
565 fDigiPar->SetCellDyArray(*CellDy);
566 fDigiPar->SetCellMap(singleCellMap);
567}
568
569
ClassImp(CbmConverterManager)
const constexpr Int_t fCounter(0)
@ k12b
@ k21a
@ k14a
@ k07a
Int_t GetDetectorId() const
Definition CbmTofCell.h:34
Double_t GetSizey() const
Definition CbmTofCell.h:40
Double_t GetY() const
Definition CbmTofCell.h:36
Double_t GetSizex() const
Definition CbmTofCell.h:39
Double_t GetX() const
Definition CbmTofCell.h:35
Double_t GetZ() const
Definition CbmTofCell.h:37
std::map< Int_t, std::vector< CbmTofCell * > >::iterator fCellMapIt
virtual void SetParContainers()
virtual void Exec(Option_t *option)
void FillCellInfoFromGeoHandler(TString FullPath)
CbmTofGeoHandler * fGeoHandler
pointer to digi parameters
std::map< Int_t, std::vector< CbmTofCell * > > fCellMap
virtual InitStatus ReInit()
virtual InitStatus Init()
CbmTofCell * GetCell(Int_t i)
void SetCellMap(std::map< Int_t, CbmTofCell * > map)
Int_t GetNrOfModules()
void SetCellDxArray(TArrayD array)
void SetNodeMap(std::map< Int_t, TGeoNode * > map)
Int_t GetCellId(Int_t i)
void SetCellZArray(TArrayD array)
void SetCellDyArray(TArrayD array)
void SetCellYArray(TArrayD array)
void SetCellIdArray(TArrayI array)
void SetNrOfCells(Int_t i)
void SetCellXArray(TArrayD array)
Int_t GetCell(Int_t uniqueId)
Int_t Init(Bool_t isSimulation=kFALSE)
Float_t GetZ(TString volName)
Float_t GetX(TString volName)
Int_t GetSModule(Int_t uniqueId)
Int_t GetCounter(Int_t uniqueId)
Int_t GetSMType(Int_t uniqueId)
Float_t GetSizeX(TString volName)
Float_t GetSizeY(TString volName)
Int_t GetRegion(Int_t uniqueId)
Int_t GetCellId(Int_t uniqueId)
Float_t GetY(TString volName)
Int_t GetGap(Int_t uniqueId)