CbmRoot
CbmStsSetup.cxx
Go to the documentation of this file.
1 
5 #include "CbmStsSetup.h"
6 
7 #include "CbmDefs.h" // for kSts
8 #include "CbmStsAddress.h" // for GetElementId, kStsSensor, GetAdd...
9 #include "CbmStsModule.h" // for CbmStsModule
10 #include "CbmStsParSensorCond.h" // for CbmStsParSensorCond
11 #include "CbmStsParSetModule.h" // for CbmStsParSetModule
12 #include "CbmStsParSetSensor.h" // for CbmStsParSetSensor
13 #include "CbmStsParSetSensorCond.h" // for CbmStsParSetSensorCond
14 #include "CbmStsSensor.h" // for CbmStsSensor
15 #include "CbmStsStation.h" // for CbmStsStation
16 
17 #include <FairField.h> // for FairField
18 #include <FairLogger.h> // for FairLogger
19 #include <FairRun.h> // for FairRun
20 
21 #include <TCollection.h> // for TIter
22 #include <TFile.h> // for TFile
23 #include <TGeoManager.h> // for TGeoManager, gGeoManager
24 #include <TGeoMatrix.h> // for TGeoHMatrix
25 #include <TGeoNode.h> // for TGeoNode
26 #include <TGeoPhysicalNode.h> // for TGeoPhysicalNode
27 #include <TGeoVolume.h> // for TGeoVolume
28 #include <TKey.h> // for TKey
29 #include <TList.h> // for TList
30 #include <TString.h> // for TString, operator<<, operator+
31 #include <TSystem.h> // for TSystem, gSystem
32 
33 #include <cassert> // for assert
34 #include <iomanip> // for setw, __iom_t6
35 #include <iostream> // for fstream, string, char_traits
36 #include <string.h> // for strcmp
37 
38 using namespace std;
39 
40 // ----- Initialisation of static singleton pointer --------------------
42 // -------------------------------------------------------------------------
43 
44 
45 // ----- Constructor ---------------------------------------------------
48  , fSensors()
49  , fModules()
50  , fModuleVector()
51  , fStations() {}
52 // -------------------------------------------------------------------------
53 
54 
55 // ----- Create station objects ----------------------------------------
57 
58  // For old geometries: the station corresponds to the unit
59  if (fHasStations) {
60  for (Int_t iUnit = 0; iUnit < GetNofDaughters(); iUnit++) {
61  CbmStsElement* unit = GetDaughter(iUnit);
62  // Create one station for each unit
63  Int_t stationId = unit->GetIndex();
64  TString name = Form("STS_S%02i", stationId + 1);
65  TString title = Form("STS Station %i", stationId + 1);
66  CbmStsStation* station = new CbmStsStation(name, title, unit->GetPnode());
67  // Add all ladders of the unit to the station
68  for (Int_t iLadder = 0; iLadder < unit->GetNofDaughters(); iLadder++)
69  station->AddLadder(unit->GetDaughter(iLadder));
70  // Initialise station parameters
71  station->Init();
72  // Add station to station map
73  assert(fStations.find(stationId) == fStations.end());
74  fStations[stationId] = station;
75  } //# units
76  return fStations.size();
77  } //? is old geometry?
78 
79 
80  // Loop over all ladders. They are associated to a station.
81  for (Int_t iUnit = 0; iUnit < GetNofDaughters(); iUnit++) {
82  CbmStsElement* unit = GetDaughter(iUnit);
83  for (Int_t iLadder = 0; iLadder < unit->GetNofDaughters(); iLadder++) {
84  CbmStsElement* ladder = unit->GetDaughter(iLadder);
85  // This convention must be followed by the STS geometry
86  Int_t nodeNumber = ladder->GetPnode()->GetNode()->GetNumber();
87  Int_t stationId = nodeNumber / 100 - 1;
88  // Get the station from the map. If not there, create it.
89  CbmStsStation* station = nullptr;
90  if (fStations.find(stationId) == fStations.end()) {
91  TString name = Form("STS_S%02i", stationId + 1);
92  TString title = Form("STS Station %i", stationId + 1);
93  station = new CbmStsStation(name, title);
94  fStations[stationId] = station;
95  } //? station not yet in map
96  else
97  station = fStations[stationId];
98 
99  // Add ladder to station
100  station->AddLadder(ladder);
101 
102  } //# ladders
103  } //# units
104 
105  // Initialise the stations
106  auto it = fStations.begin();
107  while (it != fStations.end()) {
108  it->second->Init();
109  it++;
110  } //# stations
111 
112  // Check that the station number is set consecutively and that the
113  // stations are ordered w.r.t. position along the beam
114  Bool_t isOk = kTRUE;
115  Double_t zPrevious = -999999;
116  for (UInt_t iStation = 0; iStation < fStations.size(); iStation++) {
117  if (fStations.find(iStation) == fStations.end()) {
118  LOG(error) << GetName() << ": Number of stations is " << fStations.size()
119  << ", but station " << iStation << "is not present!";
120  isOk = kFALSE;
121  } //? station present?
122  if (fStations[iStation]->GetZ() <= zPrevious) {
123  LOG(error) << GetName() << ": Disordered stations. Station " << iStation
124  << " is at z = " << fStations[iStation]->GetZ()
125  << "cm , previous is at z = " << zPrevious << " cm.";
126  isOk = kFALSE;
127  } //? disordered in z
128  } //# stations
129  if (!isOk) LOG(fatal) << GetName() << ": Error in creation of stations.";
130 
131  return fStations.size();
132 }
133 // -------------------------------------------------------------------------
134 
135 
136 // ----- Get an element from the STS setup -----------------------------
137 CbmStsElement* CbmStsSetup::GetElement(Int_t address, Int_t level) {
138 
139  // --- Check for initialisation
140  if (!fAddress) LOG(fatal) << fName << ": not initialised!";
141 
142  // --- Catch non-STS addresses
144  LOG(warn) << fName << ": No STS address " << address;
145  return nullptr;
146  }
147 
148  // --- Catch illegal level numbers
149  if (level < 0 || level >= kStsNofLevels) {
150  LOG(warn) << fName << ": Illegal level " << level;
151  return nullptr;
152  }
153 
154  CbmStsElement* element = this;
155  for (Int_t iLevel = 1; iLevel <= level; iLevel++) {
156  element =
157  element->GetDaughter(CbmStsAddress::GetElementId(address, iLevel));
158  assert(element);
159  }
160 
161  return element;
162 }
163 // -------------------------------------------------------------------------
164 
165 
166 // ----- Get hierarchy level name ---------------------------------------
167 const char* CbmStsSetup::GetLevelName(Int_t level) const {
168 
169  // --- Catch legacy (setup with stations)
170  if (fHasStations && level == kStsUnit) return "station";
171 
172  switch (level) {
173  case kStsSystem: return "sts"; break;
174  case kStsUnit: return "unit"; break;
175  case kStsLadder: return "ladder"; break;
176  case kStsHalfLadder: return "halfladder"; break;
177  case kStsModule: return "module"; break;
178  case kStsSensor: return "sensor"; break;
179  case kStsSide: return "side"; break;
180  default: return ""; break;
181  }
182 }
183 // -------------------------------------------------------------------------
184 
185 
186 // ----- Get the station number from an address ------------------------
187 Int_t CbmStsSetup::GetStationNumber(Int_t address) {
188 
189  // In old, station-based geometries, the station equals the unit
190  if (fHasStations) return CbmStsAddress::GetElementId(address, kStsUnit);
191 
192  // The station is obtained from the ladder
194  assert(ladder);
195  return ladder->GetPnode()->GetNode()->GetNumber() / 100 - 1;
196 }
197 // -------------------------------------------------------------------------
198 
199 
200 // ----- Initialisation ------------------------------------------------
201 Bool_t CbmStsSetup::Init(const char* geoFile) {
202 
203  // Prevent duplicate initialisation
204  assert(!fIsInitialised);
205 
206  LOG(info);
207  LOG(info) << "==========================================================";
208  LOG(info) << "Initialising STS Setup \n";
209 
210  // --- Set system address
212 
213  // --- If a geometry file was specified, read the geometry from file
214  if (geoFile) ReadGeometry(geoFile);
215 
216  // --- Else, read the geometry from TGeoManager
217  else {
218  assert(gGeoManager);
219  ReadGeometry(gGeoManager);
220  }
221 
222  // --- Statistics
223  LOG(info) << fName << ": Elements in setup: ";
224  for (Int_t iLevel = 1; iLevel <= kStsSensor; iLevel++) {
225  TString name = GetLevelName(iLevel);
226  name += "s";
227  LOG(info) << " " << setw(12) << name << setw(5) << right
228  << GetNofElements(iLevel);
229  }
230 
231  // --- Build the module and sensor maps
232  for (Int_t iUnit = 0; iUnit < GetNofDaughters(); iUnit++) {
233  CbmStsElement* unit = GetDaughter(iUnit);
234  for (Int_t iLad = 0; iLad < unit->GetNofDaughters(); iLad++) {
235  CbmStsElement* ladd = unit->GetDaughter(iLad);
236  for (Int_t iHla = 0; iHla < ladd->GetNofDaughters(); iHla++) {
237  CbmStsElement* hlad = ladd->GetDaughter(iHla);
238  for (Int_t iMod = 0; iMod < hlad->GetNofDaughters(); iMod++) {
239  CbmStsElement* modu = hlad->GetDaughter(iMod);
240  CbmStsModule* module = dynamic_cast<CbmStsModule*>(modu);
241  assert(module);
242  Int_t moduleAddress = module->GetAddress();
243  assert(!fModules.count(moduleAddress));
244  fModules[moduleAddress] = module;
245  fModuleVector.push_back(module);
246  for (Int_t iSens = 0; iSens < modu->GetNofDaughters(); iSens++) {
247  CbmStsElement* sens = modu->GetDaughter(iSens);
248  CbmStsSensor* sensor = dynamic_cast<CbmStsSensor*>(sens);
249  assert(sensor);
250  Int_t sensorAddress = sensor->GetAddress();
251  fSensors[sensorAddress] = sensor;
252  fSensorVector.push_back(sensor);
253  } //# sensors in module
254  } //# modules in half-ladder
255  } //# half-ladders in ladder
256  } //# ladders in unit
257  } //# units in system
258  LOG(info) << "Sensor in map: " << fSensors.size() << " in vector "
259  << fSensorVector.size();
260  assert(fSensors.size() == fSensorVector.size());
261 
262  // --- Create station objects
263  Int_t nStations = CreateStations();
264  LOG(info) << GetName() << ": Setup contains " << nStations
265  << " stations objects.";
266  if (FairLogger::GetLogger()->IsLogNeeded(fair::Severity::debug)) {
267  auto it = fStations.begin();
268  while (it != fStations.end()) {
269  LOG(debug) << " " << it->second->ToString();
270  it++;
271  } //# stations
272  } //? Debug
273 
274  // --- Consistency check
276  LOG(fatal) << GetName() << ": inconsistent number of sensors! "
277  << GetNofElements(kStsSensor) << " " << GetNofSensors();
278  if (Int_t(fModules.size()) != GetNofElements(kStsModule))
279  LOG(fatal) << GetName() << ": inconsistent number of modules! "
280  << GetNofElements(kStsModule) << " " << fModules.size();
281 
282  LOG(info) << "=========================================================="
283  << "\n";
284  LOG(info);
285 
286  fIsInitialised = kTRUE;
287  return kTRUE;
288 }
289 // -------------------------------------------------------------------------
290 
291 
292 // ----- Singleton instance --------------------------------------------
294  if (!fgInstance) fgInstance = new CbmStsSetup();
295  return fgInstance;
296 }
297 // -------------------------------------------------------------------------
298 
299 
300 // ----- Print list of modules -----------------------------------------
302  for (auto it = fModules.begin(); it != fModules.end(); it++)
303  LOG(info) << it->second->ToString();
304 }
305 // -------------------------------------------------------------------------
306 
307 
308 // ----- Read geometry from TGeoManager --------------------------------
309 Bool_t CbmStsSetup::ReadGeometry(TGeoManager* geo) {
310 
311  // --- Catch non-existence of GeoManager
312  assert(geo);
313  LOG(info) << fName << ": Reading geometry from TGeoManager "
314  << geo->GetName();
315 
316  // --- Get cave (top node)
317  geo->CdTop();
318  TGeoNode* cave = geo->GetCurrentNode();
319 
320  // --- Get top STS node
321  TGeoNode* sts = nullptr;
322  for (Int_t iNode = 0; iNode < cave->GetNdaughters(); iNode++) {
323  TString name = cave->GetDaughter(iNode)->GetName();
324  if (name.Contains("STS", TString::kIgnoreCase)) {
325  sts = cave->GetDaughter(iNode);
326  LOG(info) << fName << ": STS top node is " << sts->GetName();
327  break;
328  }
329  }
330  if (!sts) {
331  LOG(error) << fName << ": No top STS node found in geometry!";
332  return kFALSE;
333  }
334 
335  // --- Create physical node for STS
336  TString path = cave->GetName();
337  path = path + "/" + sts->GetName();
338  fNode = new TGeoPhysicalNode(path);
339 
340  // --- Check for old geometry (with stations) or new geometry (with units)
341  Bool_t hasStation = kFALSE;
342  Bool_t hasUnit = kFALSE;
343  for (Int_t iDaughter = 0; iDaughter < fNode->GetNode()->GetNdaughters();
344  iDaughter++) {
345  TString dName = fNode->GetNode()->GetDaughter(iDaughter)->GetName();
346  if (dName.Contains("station", TString::kIgnoreCase)) hasStation = kTRUE;
347  if (dName.Contains("unit", TString::kIgnoreCase)) hasUnit = kTRUE;
348  }
349  if (hasUnit && (!hasStation))
350  fHasStations = kFALSE;
351  else if ((!hasUnit) && hasStation)
352  fHasStations = kTRUE;
353  else if (hasUnit && hasStation)
354  LOG(fatal) << GetName() << ": geometry contains both units and stations!";
355  else
356  LOG(fatal) << GetName()
357  << ": geometry contains neither units nor stations!";
358 
359  if (fHasStations)
360  LOG(warn) << GetName() << ": using old geometry (with stations)";
361 
362  // --- Recursively initialise daughter elements
363  InitDaughters();
364 
365  return kTRUE;
366 }
367 // -------------------------------------------------------------------------
368 
369 
370 // ----- Read geometry from geometry file ------------------------------
371 Bool_t CbmStsSetup::ReadGeometry(const char* fileName) {
372 
373  LOG(info) << fName << ": Reading geometry from file " << fileName;
374 
375  // Exit if a TGeoManager is already present
376  assert(!gGeoManager);
377 
378  // --- Open geometry file
379  TFile geoFile(fileName);
380  if (!geoFile.IsOpen()) {
381  LOG(fatal) << GetName() << ": Could not open geometry file " << fileName;
382  return kFALSE;
383  }
384 
385  // Create a new TGeoManager
386  TGeoManager* stsGeometry =
387  new TGeoManager("StsGeo", "STS stand-alone geometry");
388 
389  // --- Get top volume from file
390  TGeoVolume* topVolume = nullptr;
391  TList* keyList = geoFile.GetListOfKeys();
392  TKey* key = nullptr;
393  TIter keyIter(keyList);
394  while ((key = (TKey*) keyIter())) {
395  if (strcmp(key->GetClassName(), "TGeoVolumeAssembly") == 0) {
396  TGeoVolume* volume = (TGeoVolume*) key->ReadObj();
397  if (strcmp(volume->GetName(), "TOP") == 0) {
398  topVolume = volume;
399  break;
400  } //? volume name is "TOP"
401  } //? object class is TGeoVolumeAssembly
402  }
403  if (!topVolume) {
404  LOG(fatal) << GetName() << ": No TOP volume in file!";
405  return kFALSE;
406  }
407  stsGeometry->SetTopVolume(topVolume);
408 
409  // --- Get cave (top node)
410  stsGeometry->CdTop();
411  TGeoNode* cave = stsGeometry->GetCurrentNode();
412 
413  // --- Get top STS node
414  TGeoNode* sts = nullptr;
415  for (Int_t iNode = 0; iNode < cave->GetNdaughters(); iNode++) {
416  TString name = cave->GetDaughter(iNode)->GetName();
417  if (name.Contains("STS", TString::kIgnoreCase)) {
418  sts = cave->GetDaughter(iNode);
419  stsGeometry->CdDown(iNode);
420  LOG(info) << fName << ": STS top node is " << sts->GetName();
421  break;
422  }
423  }
424  if (!sts) {
425  LOG(error) << fName << ": No top STS node found in geometry!";
426  return kFALSE;
427  }
428 
429  // --- Create physical node for STS
430  TString path = cave->GetName();
431  path = path + "/" + sts->GetName();
432  fNode = new TGeoPhysicalNode(path);
433 
434  // --- Check for old geometry (with stations) or new geometry (with units)
435  TString dName = fNode->GetNode()->GetDaughter(0)->GetName();
436  if (dName.Contains("station", TString::kIgnoreCase))
437  fHasStations = kTRUE;
438  else if (dName.Contains("unit", TString::kIgnoreCase))
439  fHasStations = kFALSE;
440  else
441  LOG(fatal) << GetName() << ": unknown geometry type; first level name is "
442  << dName;
443  if (fHasStations)
444  LOG(warn) << GetName() << ": using old geometry (with stations)";
445 
446  // --- Recursively initialise daughter elements
447  InitDaughters();
448 
449  return kTRUE;
450 }
451 // -------------------------------------------------------------------------
452 
453 
454 // ----- Set module parameters from parameter set ----------------------
456  UInt_t nModules = 0;
457  for (auto& moduleIt : fModules) {
458  UInt_t address = moduleIt.first;
459  moduleIt.second->SetParameters(params->GetParModule(address));
460  nModules++;
461  }
462  LOG(info) << GetName() << ": Set parameters for " << nModules << " modules";
463  fIsModuleParsInit = kTRUE;
464  return nModules;
465 }
466 // -------------------------------------------------------------------------
467 
468 
469 // ----- Set the sensor conditions from the parameter set --------------
471 
472  UInt_t nSensors = 0;
473  for (auto& sensorIt : fSensors) {
474  UInt_t address = sensorIt.first;
475  sensorIt.second->SetConditions(&(conds->GetParSensor(address)));
476  nSensors++;
477  }
478  LOG(info) << GetName() << ": Set conditions for " << nSensors << " sensors";
479  fIsSensorCondInit = kTRUE;
480  return nSensors;
481 }
482 // -------------------------------------------------------------------------
483 
484 
485 // ----- Set the sensor parameters -------------------------------------
487  UInt_t nSensors = 0;
488  for (auto& sensorIt : fSensors) {
489  UInt_t address = sensorIt.first;
490  sensorIt.second->SetParameters(&(parSet->GetParSensor(address)));
491  nSensors++;
492  }
493  LOG(info) << GetName() << ": Set parameters for " << nSensors << " sensors";
494  fIsSensorParsInit = kTRUE;
495  return nSensors;
496 }
497 // -------------------------------------------------------------------------
498 
499 
kStsHalfLadder
@ kStsHalfLadder
Definition: CbmStsAddress.h:20
CbmStsElement::GetAddress
Int_t GetAddress() const
Definition: CbmStsElement.h:65
CbmStsSetup::fIsSensorCondInit
Bool_t fIsSensorCondInit
Sensor conditions set.
Definition: CbmStsSetup.h:225
CbmStsParSetSensor.h
CbmStsStation::AddLadder
void AddLadder(CbmStsElement *ladder)
Definition: CbmStsStation.cxx:75
CbmStsAddress::GetAddress
Int_t GetAddress(UInt_t unit=0, UInt_t ladder=0, UInt_t halfladder=0, UInt_t module=0, UInt_t sensor=0, UInt_t side=0, UInt_t version=kCurrentVersion)
Construct address.
Definition: CbmStsAddress.cxx:90
CbmStsSetup::fSensorVector
std::vector< CbmStsSensor * > fSensorVector
Definition: CbmStsSetup.h:238
CbmStsSetup.h
CbmStsSetup::SetSensorConditions
UInt_t SetSensorConditions(CbmStsParSetSensorCond *conds)
Set sensor conditions from parameter container.
Definition: CbmStsSetup.cxx:470
CbmStsSetup::CbmStsSetup
CbmStsSetup()
Default constructor
Definition: CbmStsSetup.cxx:46
CbmStsSetup::Instance
static CbmStsSetup * Instance()
Definition: CbmStsSetup.cxx:293
CbmStsStation.h
CbmStsElement::GetIndex
Int_t GetIndex() const
Definition: CbmStsElement.h:77
ECbmModuleId
ECbmModuleId
Definition: CbmDefs.h:33
CbmStsSetup::SetSensorParameters
UInt_t SetSensorParameters(CbmStsParSetSensor *parSet)
Set sensor parameters from parameter container.
Definition: CbmStsSetup.cxx:486
CbmStsSetup::CreateStations
Int_t CreateStations()
Create station objects.
Definition: CbmStsSetup.cxx:56
kStsSystem
@ kStsSystem
Definition: CbmStsAddress.h:17
CbmStsParSensorCond.h
CbmStsSetup::GetLevelName
const char * GetLevelName(Int_t level) const
Definition: CbmStsSetup.cxx:167
CbmStsParSetModule::GetParModule
const CbmStsParModule & GetParModule(UInt_t address)
Get condition parameters of a sensor.
Definition: CbmStsParSetModule.cxx:49
CbmStsParSetModule.h
CbmStsElement::GetPnode
TGeoPhysicalNode * GetPnode() const
Definition: CbmStsElement.h:106
CbmStsSetup::fIsInitialised
Bool_t fIsInitialised
All parameter containers set.
Definition: CbmStsSetup.h:222
CbmStsParSetSensorCond.h
CbmStsSetup::fHasStations
Bool_t fHasStations
Legacy with stations instead of units.
Definition: CbmStsSetup.h:226
CbmStsSetup::ListModules
void ListModules() const
Definition: CbmStsSetup.cxx:301
CbmStsParSetSensorCond
Parameters container for CbmStsParSensorCond.
Definition: CbmStsParSetSensorCond.h:30
CbmStsAddress::GetSystemId
ECbmModuleId GetSystemId(Int_t address)
Get system Id (should be ECbmModuleId::kSts)
Definition: CbmStsAddress.cxx:190
CbmStsModule
Class representing an instance of a readout unit in the CBM-STS.
Definition: CbmStsModule.h:31
CbmStsElement::GetNofElements
Int_t GetNofElements(Int_t level) const
Definition: CbmStsElement.cxx:128
CbmStsSetup::fgInstance
static CbmStsSetup * fgInstance
Static instance of this class.
Definition: CbmStsSetup.h:221
CbmStsParSetSensor::GetParSensor
const CbmStsParSensor & GetParSensor(UInt_t address)
Get condition parameters of a sensor.
Definition: CbmStsParSetSensor.cxx:49
CbmStsSetup::fModuleVector
std::vector< CbmStsModule * > fModuleVector
Definition: CbmStsSetup.h:235
CbmStsParSetSensor
Parameters container for CbmStsParSensor.
Definition: CbmStsParSetSensor.h:30
kStsModule
@ kStsModule
Definition: CbmStsAddress.h:21
CbmStsSetup::GetStationNumber
Int_t GetStationNumber(Int_t address)
Definition: CbmStsSetup.cxx:187
CbmStsAddress::GetElementId
UInt_t GetElementId(Int_t address, Int_t level)
Get the index of an element.
Definition: CbmStsAddress.cxx:180
kStsSide
@ kStsSide
Definition: CbmStsAddress.h:23
CbmStsSetup::fModules
std::map< Int_t, CbmStsModule * > fModules
Definition: CbmStsSetup.h:232
ClassImp
ClassImp(CbmConverterManager) InitStatus CbmConverterManager
Definition: CbmConverterManager.cxx:12
CbmStsSensor
Class representing an instance of a sensor in the CBM-STS.
Definition: CbmStsSensor.h:38
CbmStsSetup::Init
Bool_t Init(const char *geometryFile=nullptr)
Initialise the setup.
Definition: CbmStsSetup.cxx:201
kStsNofLevels
@ kStsNofLevels
Definition: CbmStsAddress.h:24
CbmStsSetup
Class representing the top level of the STS setup.
Definition: CbmStsSetup.h:39
kStsUnit
@ kStsUnit
Definition: CbmStsAddress.h:18
ToIntegralType
constexpr auto ToIntegralType(T enumerator) -> typename std::underlying_type< T >::type
Definition: CbmDefs.h:24
CbmStsElement::GetDaughter
CbmStsElement * GetDaughter(Int_t index) const
Definition: CbmStsElement.cxx:120
CbmStsElement::GetNofDaughters
Int_t GetNofDaughters() const
Definition: CbmStsElement.h:95
CbmStsSetup::SetModuleParameters
UInt_t SetModuleParameters(CbmStsParSetModule *modulePars)
Set module parameters from parameter container.
Definition: CbmStsSetup.cxx:455
kStsSensor
@ kStsSensor
Definition: CbmStsAddress.h:22
CbmStsAddress.h
kStsLadder
@ kStsLadder
Definition: CbmStsAddress.h:19
CbmStsParSetModule
Parameters container for CbmStsParModule.
Definition: CbmStsParSetModule.h:30
CbmStsElement::InitDaughters
virtual void InitDaughters()
Definition: CbmStsElement.cxx:145
CbmStsSetup::GetElement
CbmStsElement * GetElement(Int_t address, Int_t level)
Definition: CbmStsSetup.cxx:137
CbmStsStation::Init
void Init()
Initialise the station parameters.
Definition: CbmStsStation.cxx:180
CbmStsSetup::GetNofSensors
Int_t GetNofSensors() const
Definition: CbmStsSetup.h:86
CbmStsModule.h
ECbmModuleId::kSts
@ kSts
Silicon Tracking System.
CbmStsSetup::fStations
std::map< Int_t, CbmStsStation * > fStations
Definition: CbmStsSetup.h:243
CbmStsElement
Class representing an element of the STS setup.
Definition: CbmStsElement.h:32
CbmStsSetup::fIsModuleParsInit
Bool_t fIsModuleParsInit
Module parameters set.
Definition: CbmStsSetup.h:223
CbmStsParSetSensorCond::GetParSensor
const CbmStsParSensorCond & GetParSensor(UInt_t address)
Get condition parameters of a sensor.
Definition: CbmStsParSetSensorCond.cxx:57
CbmStsElement::fAddress
Int_t fAddress
Unique element address.
Definition: CbmStsElement.h:124
CbmStsStation
Class representing a station of the StsSystem.
Definition: CbmStsStation.h:29
CbmStsElement::fNode
TGeoPhysicalNode * fNode
Pointer to geometry.
Definition: CbmStsElement.h:126
CbmStsSetup::fSensors
std::map< Int_t, CbmStsSensor * > fSensors
Definition: CbmStsSetup.h:229
CbmStsSetup::ReadGeometry
Bool_t ReadGeometry(TGeoManager *geoManager)
Read the geometry from TGeoManager.
Definition: CbmStsSetup.cxx:309
CbmStsSetup::fIsSensorParsInit
Bool_t fIsSensorParsInit
Sensor parameters set.
Definition: CbmStsSetup.h:224
CbmStsSensor.h
CbmDefs.h