Project
Loading...
Searching...
No Matches
GeometryTGeo.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#ifndef ALICEO2_TRK_GEOMETRYTGEO_H
13#define ALICEO2_TRK_GEOMETRYTGEO_H
14
15#include <memory>
17
18namespace o2
19{
20namespace trk
21{
23{
24 public:
26 using DetMatrixCache::getMatrixL2G;
27 using DetMatrixCache::getMatrixT2GRot;
28 using DetMatrixCache::getMatrixT2L;
29 // this method is not advised for ITS: for barrel detectors whose tracking frame is just a rotation
30 // it is cheaper to use T2GRot
31 using DetMatrixCache::getMatrixT2G;
32 GeometryTGeo(bool build = false, int loadTrans = 0);
34 void Build(int loadTrans);
35 void fillMatrixCache(int mask);
37 {
38 if (!sInstance) {
39 sInstance = std::make_unique<GeometryTGeo>(true, 0);
40 }
41 return sInstance.get();
42 };
43 static const char* getTRKVolPattern() { return sVolumeName.c_str(); }
44 static const char* getTRKLayerPattern() { return sLayerName.c_str(); }
45 static const char* getTRKPetalPattern() { return sPetalName.c_str(); }
46 static const char* getTRKPetalDiskPattern() { return sPetalDiskName.c_str(); }
47 static const char* getTRKPetalLayerPattern() { return sPetalLayerName.c_str(); }
48 static const char* getTRKStavePattern() { return sStaveName.c_str(); }
49 static const char* getTRKChipPattern() { return sChipName.c_str(); }
50 static const char* getTRKSensorPattern() { return sSensorName.c_str(); }
51 static const char* getTRKWrapVolPattern() { return sWrapperVolumeName.c_str(); }
52
53 int getNumberOfChips() const { return mSize; }
54
57 int extractNumberOfLayersVD() const;
58 int extractNumberOfPetalsVD() const;
60 int extractNumberOfDisksVD() const;
62 int extractNumberOfStavesMLOT(int lay) const;
63
65 int extractVolumeCopy(const char* name, const char* prefix) const;
66
69
70 bool isOwner() const { return mOwner; }
71 void setOwner(bool v) { mOwner = v; }
72
73 void Print(Option_t* opt = "") const;
74 void PrintChipID(int index, int subDetID, int petalcase, int disk, int lay, int stave, int indexRetrieved) const;
75
76 int getLayer(int index) const;
77 int getStave(int index) const;
78 int getSubDetID(int index) const;
79 int getPetalCase(int index) const;
80 int getDisk(int index) const;
81
89 int getChipIndex(int subDetID, int petalcase, int disk, int lay, int stave) const;
90
98 bool getChipID(int index, int& subDetID, int& petalcase, int& disk, int& lay, int& stave) const;
99
100 int getLastChipIndex(int lay) const { return mLastChipIndex[lay]; }
101 int getFirstChipIndex(int lay, int petalcase, int subDetID) const
102 {
104 if (subDetID == 0) { // VD
105 return (petalcase == 0) ? 0 : mLastChipIndexVD[petalcase - 1] + 1;
106 } else if (subDetID == 1) { // MLOT
107 return mLastChipIndex[lay + mNumberOfPetalsVD - 1] + 1;
108 }
109 return -1; // not found
110 }
111
114 TGeoHMatrix* extractMatrixSensor(int index) const;
115
116 TString getMatrixPath(int index) const;
117
118 static const char* composeSymNameTRK(int d)
119 {
120 return Form("%s_%d", o2::detectors::DetID(o2::detectors::DetID::TRK).getName(), d);
121 }
122 static const char* composeSymNameLayer(int d, int layer);
123 static const char* composeSymNameStave(int d, int layer);
124 static const char* composeSymNameChip(int d, int lr);
125 static const char* composeSymNameSensor(int d, int layer);
126
127 protected:
128 static constexpr int MAXLAYERS = 20;
129
130 static std::string sVolumeName;
131 static std::string sLayerName;
132 static std::string sPetalName;
133 static std::string sPetalDiskName;
134 static std::string sPetalLayerName;
135 static std::string sStaveName;
136 static std::string sChipName;
137 static std::string sSensorName;
138 static std::string sWrapperVolumeName;
139
145 std::vector<int> mLastChipIndex;
146 std::vector<int> mLastChipIndexVD;
147 std::vector<int> mLastChipIndexMLOT;
148 std::vector<int> mNumberOfChipsPerLayerVD;
149 std::vector<int> mNumberOfChipsPerLayerMLOT;
150 std::vector<int> mNumbersOfChipPerDiskVD;
151 std::vector<int> mNumberOfChipsPerPetalVD;
152 std::vector<int> mNumberOfStaves;
153 std::array<char, MAXLAYERS> mLayerToWrapper;
154
155 bool mOwner = true;
156
157 private:
158 static std::unique_ptr<o2::trk::GeometryTGeo> sInstance;
159};
160
161} // namespace trk
162} // namespace o2
163#endif
Static class with identifiers, bitmasks and names for ALICE detectors.
Definition DetID.h:58
const char * getName() const
int mSize
prebooked number of sensors
static const char * getTRKPetalDiskPattern()
static const char * composeSymNameLayer(int d, int layer)
static const char * getTRKStavePattern()
int getPetalCase(int index) const
static const char * getTRKChipPattern()
std::vector< int > mNumberOfChipsPerLayerVD
number of chips per layer VD ( = number of petals)
int getLastChipIndex(int lay) const
static std::string sVolumeName
int getSubDetID(int index) const
std::array< char, MAXLAYERS > mLayerToWrapper
Layer to wrapper correspondence.
static std::string sPetalLayerName
void PrintChipID(int index, int subDetID, int petalcase, int disk, int lay, int stave, int indexRetrieved) const
static const char * getTRKSensorPattern()
static std::string sStaveName
static constexpr int MAXLAYERS
max number of active layers
int extractNumberOfChipsPerPetalVD() const
bool getChipID(int index, int &subDetID, int &petalcase, int &disk, int &lay, int &stave) const
static const char * getTRKPetalLayerPattern()
int extractNumberOfLayersMLOT()
Determines the number of active parts in the Geometry.
std::vector< int > mNumbersOfChipPerDiskVD
numbersOfChipPerDiskVD
std::vector< int > mNumberOfStaves
Number Of Staves per layer in ML/OT.
Int_t mNumberOfPetalsVD
number of Petals = chip in each VD layer
std::vector< int > mLastChipIndexVD
max ID of the detctor in the layer for the VD
static std::string sPetalName
int extractNumberOfStavesMLOT(int lay) const
static const char * composeSymNameChip(int d, int lr)
static std::string sPetalDiskName
void Print(Option_t *opt="") const
int getLayer(int index) const
static const char * getTRKWrapVolPattern()
TString getMatrixPath(int index) const
int getNumberOfChips() const
static const char * getTRKLayerPattern()
int getFirstChipIndex(int lay, int petalcase, int subDetID) const
static std::string sWrapperVolumeName
Wrapper volume name.
int extractNumberOfLayersVD() const
std::vector< int > mNumberOfChipsPerPetalVD
numbersOfChipPerPetalVD
std::vector< int > mLastChipIndex
max ID of the detctor in the petal(VD) or layer(MLOT)
static std::string sChipName
static std::string sSensorName
std::vector< int > mLastChipIndexMLOT
max ID of the detctor in the layer for the MLOT
void fillMatrixCache(int mask)
static std::string sLayerName
int extractNumberOfActivePartsVD() const
static const char * composeSymNameSensor(int d, int layer)
void setOwner(bool v)
int extractNumberOfDisksVD() const
static const char * getTRKPetalPattern()
int getNumberOfLayersMLOT() const
Int_t mNumberOfActivePartsVD
number of layers
std::vector< int > mNumberOfChipsPerLayerMLOT
number of chips per layer MLOT ( = 1 for the moment)
Int_t mNumberOfDisksVD
number of Disks = 6
Int_t mNumberOfLayersMLOT
number of layers
int getChipIndex(int subDetID, int petalcase, int disk, int lay, int stave) const
int getStave(int index) const
static const char * getTRKVolPattern()
static const char * composeSymNameStave(int d, int layer)
int getDisk(int index) const
static const char * composeSymNameTRK(int d)
int extractNumberOfPetalsVD() const
int extractVolumeCopy(const char *name, const char *prefix) const
Extract number following the prefix in the name string.
void Build(int loadTrans)
Int_t mNumberOfLayersVD
number of layers
static GeometryTGeo * Instance()
int getNumberOffActivePartsVD() const
TGeoHMatrix * extractMatrixSensor(int index) const
const GLdouble * v
Definition glcorearb.h:832
GLuint index
Definition glcorearb.h:781
GLuint const GLchar * name
Definition glcorearb.h:781
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
GLint GLuint mask
Definition glcorearb.h:291
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...